diff options
Diffstat (limited to 'lib/Target/AMDGPU/SIInstrFormats.td')
-rw-r--r-- | lib/Target/AMDGPU/SIInstrFormats.td | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/lib/Target/AMDGPU/SIInstrFormats.td b/lib/Target/AMDGPU/SIInstrFormats.td index 25917cc06e6a..b73d30940fc3 100644 --- a/lib/Target/AMDGPU/SIInstrFormats.td +++ b/lib/Target/AMDGPU/SIInstrFormats.td @@ -12,16 +12,16 @@ //===----------------------------------------------------------------------===// def isGCN : Predicate<"Subtarget->getGeneration() " - ">= SISubtarget::SOUTHERN_ISLANDS">, + ">= AMDGPUSubtarget::SOUTHERN_ISLANDS">, AssemblerPredicate<"FeatureGCN">; def isSI : Predicate<"Subtarget->getGeneration() " - "== SISubtarget::SOUTHERN_ISLANDS">, + "== AMDGPUSubtarget::SOUTHERN_ISLANDS">, AssemblerPredicate<"FeatureSouthernIslands">; class InstSI <dag outs, dag ins, string asm = "", list<dag> pattern = []> : - AMDGPUInst<outs, ins, asm, pattern>, PredicateControl { + AMDGPUInst<outs, ins, asm, pattern>, GCNPredicateControl { let SubtargetPredicate = isGCN; // Low bits - basic encoding information. @@ -118,6 +118,9 @@ class InstSI <dag outs, dag ins, string asm = "", // This bit indicates that this is a packed VOP3P instruction field bit IsPacked = 0; + // This bit indicates that this is a D16 buffer instruction. + field bit D16Buf = 0; + // These need to be kept in sync with the enum in SIInstrFlags. let TSFlags{0} = SALU; let TSFlags{1} = VALU; @@ -173,6 +176,8 @@ class InstSI <dag outs, dag ins, string asm = "", let TSFlags{49} = IsPacked; + let TSFlags{50} = D16Buf; + let SchedRW = [Write32Bit]; field bits<1> DisableSIDecoder = 0; @@ -181,6 +186,9 @@ class InstSI <dag outs, dag ins, string asm = "", let isAsmParserOnly = !if(!eq(DisableDecoder{0}, {0}), 0, 1); let AsmVariantName = AMDGPUAsmVariants.Default; + + // Avoid changing source registers in a way that violates constant bus read limitations. + let hasExtraSrcRegAllocReq = !if(VOP1,1,!if(VOP2,1,!if(VOP3,1,!if(VOPC,1,!if(SDWA,1, !if(VALU,1,0)))))); } class PseudoInstSI<dag outs, dag ins, list<dag> pattern = [], string asm = ""> @@ -247,6 +255,7 @@ class MIMGe <bits<7> op> : Enc64 { bits<1> tfe; bits<1> lwe; bits<1> slc; + bit d16; bits<8> vaddr; bits<7> srsrc; bits<7> ssamp; @@ -265,6 +274,7 @@ class MIMGe <bits<7> op> : Enc64 { let Inst{47-40} = vdata; let Inst{52-48} = srsrc{6-2}; let Inst{57-53} = ssamp{6-2}; + let Inst{63} = d16; } class EXPe : Enc64 { @@ -309,6 +319,7 @@ class VINTRPCommon <dag outs, dag ins, string asm, list<dag> pattern> : let mayLoad = 0; let mayStore = 0; let hasSideEffects = 0; + let VALU = 1; } class EXPCommon<dag outs, dag ins, string asm, list<dag> pattern> : @@ -323,15 +334,3 @@ class EXPCommon<dag outs, dag ins, string asm, list<dag> pattern> : } } // End Uses = [EXEC] - -class MIMG <dag outs, dag ins, string asm, list<dag> pattern> : - InstSI <outs, ins, asm, pattern> { - - let VM_CNT = 1; - let EXP_CNT = 1; - let MIMG = 1; - let Uses = [EXEC]; - - let UseNamedOperandTable = 1; - let hasSideEffects = 0; // XXX ???? -} |