SIInstrInfo.h revision 17f852892346fdf3b1e9eec56b7a55c470279bc8
1aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke//===-- SIInstrInfo.h - SI Instruction Info Interface ---------------------===// 2aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke// 3aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke// The LLVM Compiler Infrastructure 4aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke// 5aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke// This file is distributed under the University of Illinois Open Source 6aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke// License. See LICENSE.TXT for details. 7aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke// 8aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke//===----------------------------------------------------------------------===// 9aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke// 10aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke// Interface definition for SIInstrInfo. 11aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke// 12aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke//===----------------------------------------------------------------------===// 13aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 14aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 15aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke#ifndef SIINSTRINFO_H 16aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke#define SIINSTRINFO_H 17aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 18aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke#include "AMDGPUInstrInfo.h" 19aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke#include "SIRegisterInfo.h" 20aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 21aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzkenamespace llvm { 22aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 23aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzkeclass SIInstrInfo : public AMDGPUInstrInfo { 24aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzkeprivate: 25aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke const SIRegisterInfo RI; 26aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke AMDGPUTargetMachine &TM; 27aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 28aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke MachineInstr * convertCLAMP_f32(MachineInstr & clampInstr, 29aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke MachineFunction &MF, DebugLoc DL) const; 30aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 31aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzkepublic: 32aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke explicit SIInstrInfo(AMDGPUTargetMachine &tm); 33aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 34aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke const SIRegisterInfo &getRegisterInfo() const; 35aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 36aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke virtual void copyPhysReg(MachineBasicBlock &MBB, 37aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke MachineBasicBlock::iterator MI, DebugLoc DL, 38aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke unsigned DestReg, unsigned SrcReg, 39aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke bool KillSrc) const; 40aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 41aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke /// getEncodingType - Returns the encoding type of this instruction. 42aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke unsigned getEncodingType(const MachineInstr &MI) const; 43aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 44aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke /// getEncodingBytes - Returns the size of this instructions encoding in 45aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke /// number of bytes. 46aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke unsigned getEncodingBytes(const MachineInstr &MI) const; 47aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 48aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke /// convertToISA - Convert the AMDIL MachineInstr to a supported SI 49aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke ///MachineInstr 50aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke virtual MachineInstr * convertToISA(MachineInstr & MI, MachineFunction &MF, 51aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke DebugLoc DL) const; 52aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 53aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke /// getISAOpcode - This function takes an AMDIL opcode as an argument and 54aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke /// returns an equivalent SI opcode. 55aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke virtual unsigned getISAOpcode(unsigned AMDILopcode) const; 56aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 57aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke }; 58aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 59aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke} // End namespace llvm 60aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 61aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke// These must be kept in sync with SIInstructions.td and also the 62aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke// InstrEncodingInfo array in SIInstrInfo.cpp. 63aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke// 64aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke// NOTE: This enum is only used to identify the encoding type within LLVM, 65aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke// the actual encoding type that is part of the instruction format is different 66aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzkenamespace SIInstrEncodingType { 67aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke enum Encoding { 68aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke EXP = 0, 69aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke LDS = 1, 70aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke MIMG = 2, 71aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke MTBUF = 3, 72aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke MUBUF = 4, 73aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke SMRD = 5, 74aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke SOP1 = 6, 75aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke SOP2 = 7, 76aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke SOPC = 8, 77aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke SOPK = 9, 78aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke SOPP = 10, 79aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke VINTRP = 11, 80aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke VOP1 = 12, 81aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke VOP2 = 13, 82aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke VOP3 = 14, 83aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke VOPC = 15 84aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke }; 85aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke} 86aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 87aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke#define SI_INSTR_FLAGS_ENCODING_MASK 0xf 88aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 89aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzkenamespace SIInstrFlags { 90aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke enum Flags { 91aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke // First 4 bits are the instruction encoding 92aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke NEED_WAIT = 1 << 4 93aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke }; 94aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke} 95aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke 96aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke#endif //SIINSTRINFO_H 97aaa3c0d6de7fc2c8d209d3adba11eba1133c61d1Benjamin Franzke