diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h | 63 |
1 files changed, 58 insertions, 5 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h b/contrib/llvm-project/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h index f9378693cf48..72c872dec5ba 100644 --- a/contrib/llvm-project/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h +++ b/contrib/llvm-project/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h @@ -44,6 +44,12 @@ bool isHsaAbiVersion2(const MCSubtargetInfo *STI); /// \returns True if HSA OS ABI Version identification is 3, /// false otherwise. bool isHsaAbiVersion3(const MCSubtargetInfo *STI); +/// \returns True if HSA OS ABI Version identification is 4, +/// false otherwise. +bool isHsaAbiVersion4(const MCSubtargetInfo *STI); +/// \returns True if HSA OS ABI Version identification is 3 or 4, +/// false otherwise. +bool isHsaAbiVersion3Or4(const MCSubtargetInfo *STI); struct GcnBufferFormatInfo { unsigned Format; @@ -78,6 +84,7 @@ enum class TargetIDSetting { class AMDGPUTargetID { private: + const MCSubtargetInfo &STI; TargetIDSetting XnackSetting; TargetIDSetting SramEccSetting; @@ -145,10 +152,10 @@ public: void setTargetIDFromFeaturesString(StringRef FS); void setTargetIDFromTargetIDStream(StringRef TargetID); -}; -/// Streams isa version string for given subtarget \p STI into \p Stream. -void streamIsaVersion(const MCSubtargetInfo *STI, raw_ostream &Stream); + /// \returns String representation of an object. + std::string toString() const; +}; /// \returns Wavefront size for given subtarget \p STI. unsigned getWavefrontSize(const MCSubtargetInfo *STI); @@ -284,6 +291,7 @@ struct MIMGBaseOpcodeInfo { bool Coordinates; bool LodOrClampOrMip; bool HasD16; + bool MSAA; }; LLVM_READONLY @@ -293,6 +301,7 @@ struct MIMGDimInfo { MIMGDim Dim; uint8_t NumCoords; uint8_t NumGradients; + bool MSAA; bool DA; uint8_t Encoding; const char *AsmSuffix; @@ -338,6 +347,11 @@ int getMIMGOpcode(unsigned BaseOpcode, unsigned MIMGEncoding, LLVM_READONLY int getMaskedMIMGOp(unsigned Opc, unsigned NewChannels); +LLVM_READONLY +unsigned getAddrSizeMIMGOp(const MIMGBaseOpcodeInfo *BaseOpcode, + const MIMGDimInfo *Dim, bool IsA16, + bool IsG16Supported); + struct MIMGInfo { uint16_t Opcode; uint16_t BaseOpcode; @@ -386,9 +400,21 @@ LLVM_READONLY bool getMUBUFHasSoffset(unsigned Opc); LLVM_READONLY +bool getMUBUFIsBufferInv(unsigned Opc); + +LLVM_READONLY bool getSMEMIsBuffer(unsigned Opc); LLVM_READONLY +bool getVOP1IsSingle(unsigned Opc); + +LLVM_READONLY +bool getVOP2IsSingle(unsigned Opc); + +LLVM_READONLY +bool getVOP3IsSingle(unsigned Opc); + +LLVM_READONLY const GcnBufferFormatInfo *getGcnBufferFormatInfo(uint8_t BitsPerComp, uint8_t NumComponents, uint8_t NumFormat, @@ -459,6 +485,14 @@ struct Waitcnt { return VmCnt != ~0u || ExpCnt != ~0u || LgkmCnt != ~0u || VsCnt != ~0u; } + bool hasWaitExceptVsCnt() const { + return VmCnt != ~0u || ExpCnt != ~0u || LgkmCnt != ~0u; + } + + bool hasWaitVsCnt() const { + return VsCnt != ~0u; + } + bool dominates(const Waitcnt &Other) const { return VmCnt <= Other.VmCnt && ExpCnt <= Other.ExpCnt && LgkmCnt <= Other.LgkmCnt && VsCnt <= Other.VsCnt; @@ -627,10 +661,12 @@ LLVM_READNONE bool isValidMsgId(int64_t MsgId, const MCSubtargetInfo &STI, bool Strict = true); LLVM_READNONE -bool isValidMsgOp(int64_t MsgId, int64_t OpId, bool Strict = true); +bool isValidMsgOp(int64_t MsgId, int64_t OpId, const MCSubtargetInfo &STI, + bool Strict = true); LLVM_READNONE -bool isValidMsgStream(int64_t MsgId, int64_t OpId, int64_t StreamId, bool Strict = true); +bool isValidMsgStream(int64_t MsgId, int64_t OpId, int64_t StreamId, + const MCSubtargetInfo &STI, bool Strict = true); LLVM_READNONE bool msgRequiresOp(int64_t MsgId); @@ -653,6 +689,10 @@ uint64_t encodeMsg(uint64_t MsgId, unsigned getInitialPSInputAddr(const Function &F); +bool getHasColorExport(const Function &F); + +bool getHasDepthExport(const Function &F); + LLVM_READNONE bool isShader(CallingConv::ID CC); @@ -701,8 +741,11 @@ bool isGFX9Plus(const MCSubtargetInfo &STI); bool isGFX10(const MCSubtargetInfo &STI); bool isGFX10Plus(const MCSubtargetInfo &STI); bool isGCN3Encoding(const MCSubtargetInfo &STI); +bool isGFX10_AEncoding(const MCSubtargetInfo &STI); bool isGFX10_BEncoding(const MCSubtargetInfo &STI); bool hasGFX10_3Insts(const MCSubtargetInfo &STI); +bool isGFX90A(const MCSubtargetInfo &STI); +bool hasArchitectedFlatScratch(const MCSubtargetInfo &STI); /// Is Reg - scalar register bool isSGPR(unsigned Reg, const MCRegisterInfo* TRI); @@ -746,12 +789,17 @@ inline unsigned getOperandSize(const MCOperandInfo &OpInfo) { case AMDGPU::OPERAND_REG_INLINE_C_FP32: case AMDGPU::OPERAND_REG_INLINE_AC_INT32: case AMDGPU::OPERAND_REG_INLINE_AC_FP32: + case AMDGPU::OPERAND_REG_IMM_V2INT32: + case AMDGPU::OPERAND_REG_IMM_V2FP32: + case AMDGPU::OPERAND_REG_INLINE_C_V2INT32: + case AMDGPU::OPERAND_REG_INLINE_C_V2FP32: return 4; case AMDGPU::OPERAND_REG_IMM_INT64: case AMDGPU::OPERAND_REG_IMM_FP64: case AMDGPU::OPERAND_REG_INLINE_C_INT64: case AMDGPU::OPERAND_REG_INLINE_C_FP64: + case AMDGPU::OPERAND_REG_INLINE_AC_FP64: return 8; case AMDGPU::OPERAND_REG_IMM_INT16: @@ -847,6 +895,11 @@ bool splitMUBUFOffset(uint32_t Imm, uint32_t &SOffset, uint32_t &ImmOffset, const GCNSubtarget *Subtarget, Align Alignment = Align(4)); +LLVM_READNONE +inline bool isLegal64BitDPPControl(unsigned DC) { + return DC >= DPP::ROW_NEWBCAST_FIRST && DC <= DPP::ROW_NEWBCAST_LAST; +} + /// \returns true if the intrinsic is divergent bool isIntrinsicSourceOfDivergence(unsigned IntrID); |
