diff options
Diffstat (limited to 'llvm/lib/Target/AMDGPU/SIInstrInfo.td')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/SIInstrInfo.td | 96 |
1 files changed, 65 insertions, 31 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.td b/llvm/lib/Target/AMDGPU/SIInstrInfo.td index 6c00d854edc..49fbee561a4 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.td +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.td @@ -1083,53 +1083,88 @@ class SMRD_Pseudo <string opName, dag outs, dag ins, list<dag> pattern> : let isCodeGenOnly = 1; } -class SMRD_Real_si <bits<5> op, string opName, bit imm, dag outs, dag ins, - string asm> : +class SMRD_IMM_Real_si <bits<5> op, string opName, dag outs, dag ins, + string asm> : + SMRD <outs, ins, asm, []>, + SMRD_IMMe <op>, + SIMCInstr<opName, SISubtarget.SI> { + let AssemblerPredicates = [isSICI]; + let DecoderNamespace = "SICI"; + let DisableDecoder = DisableSIDecoder; +} + +class SMRD_SOFF_Real_si <bits<5> op, string opName, dag outs, dag ins, + string asm> : SMRD <outs, ins, asm, []>, - SMRDe <op, imm>, + SMRD_SOFFe <op>, SIMCInstr<opName, SISubtarget.SI> { let AssemblerPredicates = [isSICI]; let DecoderNamespace = "SICI"; let DisableDecoder = DisableSIDecoder; } -class SMRD_Real_vi <bits<8> op, string opName, bit imm, dag outs, dag ins, - string asm, list<dag> pattern = []> : + +class SMRD_IMM_Real_vi <bits<8> op, string opName, dag outs, dag ins, + string asm, list<dag> pattern = []> : + SMRD <outs, ins, asm, pattern>, + SMEM_IMMe_vi <op>, + SIMCInstr<opName, SISubtarget.VI> { + let AssemblerPredicates = [isVI]; + let DecoderNamespace = "VI"; + let DisableDecoder = DisableVIDecoder; +} + +class SMRD_SOFF_Real_vi <bits<8> op, string opName, dag outs, dag ins, + string asm, list<dag> pattern = []> : SMRD <outs, ins, asm, pattern>, - SMEMe_vi <op, imm>, + SMEM_SOFFe_vi <op>, SIMCInstr<opName, SISubtarget.VI> { let AssemblerPredicates = [isVI]; let DecoderNamespace = "VI"; let DisableDecoder = DisableVIDecoder; } -multiclass SMRD_m <smrd op, string opName, bit imm, dag outs, dag ins, + +multiclass SMRD_IMM_m <smrd op, string opName, dag outs, dag ins, string asm, list<dag> pattern> { def "" : SMRD_Pseudo <opName, outs, ins, pattern>; - def _si : SMRD_Real_si <op.SI, opName, imm, outs, ins, asm>; + def _si : SMRD_IMM_Real_si <op.SI, opName, outs, ins, asm>; + + // glc is only applicable to scalar stores, which are not yet + // implemented. + let glc = 0 in { + def _vi : SMRD_IMM_Real_vi <op.VI, opName, outs, ins, asm>; + } +} + +multiclass SMRD_SOFF_m <smrd op, string opName, dag outs, dag ins, + string asm, list<dag> pattern> { + + def "" : SMRD_Pseudo <opName, outs, ins, pattern>; + + def _si : SMRD_SOFF_Real_si <op.SI, opName, outs, ins, asm>; // glc is only applicable to scalar stores, which are not yet // implemented. let glc = 0 in { - def _vi : SMRD_Real_vi <op.VI, opName, imm, outs, ins, asm>; + def _vi : SMRD_SOFF_Real_vi <op.VI, opName, outs, ins, asm>; } } multiclass SMRD_Special <smrd op, string opName, dag outs, + int sdst_ = ?, string opStr = "", list<dag> pattern = []> { let hasSideEffects = 1 in { def "" : SMRD_Pseudo <opName, outs, (ins), pattern>; - let sbase = 0, offset = 0 in { - let sdst = 0 in { - def _si : SMRD_Real_si <op.SI, opName, 0, outs, (ins), opName#opStr>; - } + let sbase = 0, soff = 0, sdst = sdst_ in { + def _si : SMRD_SOFF_Real_si <op.SI, opName, outs, (ins), opName#opStr>; - let glc = 0, sdata = 0 in { - def _vi : SMRD_Real_vi <op.VI, opName, 0, outs, (ins), opName#opStr>; + let glc = 0 in { + def _vi : SMRD_SOFF_Real_vi <op.VI, opName, outs, (ins), opName#opStr>; } } } @@ -1138,51 +1173,50 @@ multiclass SMRD_Special <smrd op, string opName, dag outs, multiclass SMRD_Inval <smrd op, string opName, SDPatternOperator node> { let mayStore = 1 in { - defm : SMRD_Special<op, opName, (outs), "", [(node)]>; + defm : SMRD_Special<op, opName, (outs), 0, "", [(node)]>; } } class SMEM_Inval <bits<8> op, string opName, SDPatternOperator node> : - SMRD_Real_vi<op, opName, 0, (outs), (ins), opName, [(node)]> { + SMRD_SOFF_Real_vi<op, opName, (outs), (ins), opName, [(node)]> { let hasSideEffects = 1; let mayStore = 1; let sbase = 0; - let sdata = 0; + let sdst = 0; let glc = 0; - let offset = 0; + let soff = 0; } class SMEM_Ret <bits<8> op, string opName, SDPatternOperator node> : - SMRD_Real_vi<op, opName, 0, (outs SReg_64:$dst), (ins), - opName#" $dst", [(set i64:$dst, (node))]> { + SMRD_SOFF_Real_vi<op, opName, (outs SReg_64:$sdst), (ins), + opName#" $sdst", [(set i64:$sdst, (node))]> { let hasSideEffects = 1; let mayStore = ?; let mayLoad = ?; let sbase = 0; - let sdata = 0; let glc = 0; - let offset = 0; + let soff = 0; } multiclass SMRD_Helper <smrd op, string opName, RegisterClass baseClass, RegisterClass dstClass> { - defm _IMM : SMRD_m < - op, opName#"_IMM", 1, (outs dstClass:$dst), + defm _IMM : SMRD_IMM_m < + op, opName#"_IMM", (outs dstClass:$sdst), (ins baseClass:$sbase, smrd_offset:$offset), - opName#" $dst, $sbase, $offset", [] + opName#" $sdst, $sbase, $offset", [] >; def _IMM_ci : SMRD < - (outs dstClass:$dst), (ins baseClass:$sbase, smrd_literal_offset:$offset), - opName#" $dst, $sbase, $offset", []>, SMRD_IMMe_ci <op.SI> { + (outs dstClass:$sdst), (ins baseClass:$sbase, smrd_literal_offset:$offset), + opName#" $sdst, $sbase, $offset", []>, SMRD_IMMe_ci <op.SI> { let AssemblerPredicates = [isCIOnly]; let DecoderNamespace = "CI"; } - defm _SGPR : SMRD_m < - op, opName#"_SGPR", 0, (outs dstClass:$dst), + defm _SGPR : SMRD_SOFF_m < + op, opName#"_SGPR", (outs dstClass:$sdst), (ins baseClass:$sbase, SReg_32:$soff), - opName#" $dst, $sbase, $soff", [] + opName#" $sdst, $sbase, $soff", [] >; } |

