From: Nicolai Haehnle Date: Mon, 26 Mar 2018 13:56:53 +0000 (+0000) Subject: AMDGPU: Introduce common SOP_Pseudo and VOP_Pseudo TableGen base classes X-Git-Tag: android-x86-7.1-r4~3212 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=6e532c9bf01177997993a791a1dd80e1180f389d;p=android-x86%2Fexternal-llvm.git AMDGPU: Introduce common SOP_Pseudo and VOP_Pseudo TableGen base classes Differential revision: https://reviews.llvm.org/D44820 Change-Id: I732979e2964006aa15d78a333d8886e6855f319a git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328496 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/AMDGPU/SOPInstructions.td b/lib/Target/AMDGPU/SOPInstructions.td index 02a95a4b6f2..f66888d3492 100644 --- a/lib/Target/AMDGPU/SOPInstructions.td +++ b/lib/Target/AMDGPU/SOPInstructions.td @@ -19,17 +19,28 @@ def GPRIdxMode : Operand { let OperandType = "OPERAND_IMMEDIATE"; } +class SOP_Pseudo pattern=[]> : + InstSI, + SIMCInstr { + + let isPseudo = 1; + let isCodeGenOnly = 1; + let SubtargetPredicate = isGCN; + + string Mnemonic = opName; + string AsmOperands = asmOps; + + bits<1> has_sdst = 0; +} + //===----------------------------------------------------------------------===// // SOP1 Instructions //===----------------------------------------------------------------------===// class SOP1_Pseudo pattern=[]> : - InstSI , - SIMCInstr { - let isPseudo = 1; - let isCodeGenOnly = 1; - let SubtargetPredicate = isGCN; + SOP_Pseudo { let mayLoad = 0; let mayStore = 0; @@ -40,9 +51,6 @@ class SOP1_Pseudo has_src0 = 1; bits<1> has_sdst = 1; } @@ -253,11 +261,8 @@ def S_SET_GPR_IDX_IDX : SOP1_0_32<"s_set_gpr_idx_idx"> { class SOP2_Pseudo pattern=[]> : - InstSI, - SIMCInstr { - let isPseudo = 1; - let isCodeGenOnly = 1; - let SubtargetPredicate = isGCN; + SOP_Pseudo { + let mayLoad = 0; let mayStore = 0; let hasSideEffects = 0; @@ -266,10 +271,7 @@ class SOP2_Pseudo has_sdst = 1; + let has_sdst = 1; // Pseudo instructions have no encodings, but adding this field here allows // us to do: @@ -279,7 +281,7 @@ class SOP2_Pseudo op, SOP2_Pseudo ps> : +class SOP2_Real op, SOP_Pseudo ps> : InstSI , Enc32 { diff --git a/lib/Target/AMDGPU/VOP1Instructions.td b/lib/Target/AMDGPU/VOP1Instructions.td index 29415c2f0d9..f793fe6b249 100644 --- a/lib/Target/AMDGPU/VOP1Instructions.td +++ b/lib/Target/AMDGPU/VOP1Instructions.td @@ -40,17 +40,9 @@ class VOP1_SDWA9Ae op, VOPProfile P> : VOP_SDWA9Ae

{ } class VOP1_Pseudo pattern=[], bit VOP1Only = 0> : - InstSI , - VOP , - SIMCInstr , - MnemonicAlias { + VOP_Pseudo { - let isPseudo = 1; - let isCodeGenOnly = 1; - let UseNamedOperandTable = 1; - - string Mnemonic = opName; - string AsmOperands = P.Asm32; + let AsmOperands = P.Asm32; let Size = 4; let mayLoad = 0; @@ -63,8 +55,6 @@ class VOP1_Pseudo pattern=[], bit VOP1On let Uses = [EXEC]; let AsmVariantName = AMDGPUAsmVariants.Default; - - VOPProfile Pfl = P; } class VOP1_Real : diff --git a/lib/Target/AMDGPU/VOP2Instructions.td b/lib/Target/AMDGPU/VOP2Instructions.td index 40bc0f06e60..ec762db9ad0 100644 --- a/lib/Target/AMDGPU/VOP2Instructions.td +++ b/lib/Target/AMDGPU/VOP2Instructions.td @@ -61,17 +61,9 @@ class VOP2_SDWA9Ae op, VOPProfile P> : VOP_SDWA9Ae

{ } class VOP2_Pseudo pattern=[], string suffix = "_e32"> : - InstSI , - VOP , - SIMCInstr , - MnemonicAlias { + VOP_Pseudo { - let isPseudo = 1; - let isCodeGenOnly = 1; - let UseNamedOperandTable = 1; - - string Mnemonic = opName; - string AsmOperands = P.Asm32; + let AsmOperands = P.Asm32; let Size = 4; let mayLoad = 0; @@ -84,8 +76,6 @@ class VOP2_Pseudo pattern=[], string suf let Uses = [EXEC]; let AsmVariantName = AMDGPUAsmVariants.Default; - - VOPProfile Pfl = P; } class VOP2_Real : diff --git a/lib/Target/AMDGPU/VOP3Instructions.td b/lib/Target/AMDGPU/VOP3Instructions.td index fd3cd243a86..8c1a83b5d50 100644 --- a/lib/Target/AMDGPU/VOP3Instructions.td +++ b/lib/Target/AMDGPU/VOP3Instructions.td @@ -718,9 +718,9 @@ multiclass VOP3Interp_F16_Real_gfx9 op, string OpName, string AsmName> } multiclass VOP3_Real_gfx9 op, string AsmName> { - def _gfx9 : VOP3_Real(NAME), SIEncodingFamily.GFX9>, - VOP3e_vi (NAME).Pfl> { - VOP3_Pseudo ps = !cast(NAME); + def _gfx9 : VOP3_Real(NAME), SIEncodingFamily.GFX9>, + VOP3e_vi (NAME).Pfl> { + VOP_Pseudo ps = !cast(NAME); let AsmString = AsmName # ps.AsmOperands; } } diff --git a/lib/Target/AMDGPU/VOP3PInstructions.td b/lib/Target/AMDGPU/VOP3PInstructions.td index eeee8b36c17..d2530c45459 100644 --- a/lib/Target/AMDGPU/VOP3PInstructions.td +++ b/lib/Target/AMDGPU/VOP3PInstructions.td @@ -144,8 +144,8 @@ def : GCNPat < } // End SubtargetPredicate = [HasMadMixInsts] multiclass VOP3P_Real_vi op> { - def _vi : VOP3P_Real(NAME), SIEncodingFamily.VI>, - VOP3Pe (NAME).Pfl> { + def _vi : VOP3P_Real(NAME), SIEncodingFamily.VI>, + VOP3Pe (NAME).Pfl> { let AssemblerPredicates = [HasVOP3PInsts]; let DecoderNamespace = "VI"; } diff --git a/lib/Target/AMDGPU/VOPInstructions.td b/lib/Target/AMDGPU/VOPInstructions.td index 21cad2a59e7..f0f7f259f71 100644 --- a/lib/Target/AMDGPU/VOPInstructions.td +++ b/lib/Target/AMDGPU/VOPInstructions.td @@ -38,6 +38,23 @@ class VOPAnyCommon pattern> : let Uses = [EXEC]; } +class VOP_Pseudo pattern> : + InstSI , + VOP , + SIMCInstr , + MnemonicAlias { + + let isPseudo = 1; + let isCodeGenOnly = 1; + let UseNamedOperandTable = 1; + + string Mnemonic = opName; + VOPProfile Pfl = P; + + string AsmOperands; +} + class VOP3Common pattern = [], bit HasMods = 0, bit VOP3Only = 0> : @@ -66,26 +83,18 @@ class VOP3Common pattern = [], bit VOP3Only = 0, bit isVOP3P = 0, bit isVop3OpSel = 0> : - InstSI , - VOP , - SIMCInstr, - MnemonicAlias { + VOP_Pseudo { - let isPseudo = 1; - let isCodeGenOnly = 1; - let UseNamedOperandTable = 1; let VOP3_OPSEL = isVop3OpSel; let IsPacked = P.IsPacked; - string Mnemonic = opName; - string AsmOperands = !if(isVop3OpSel, - P.AsmVOP3OpSel, - !if(!and(isVOP3P, P.IsPacked), P.AsmVOP3P, P.Asm64)); + let AsmOperands = !if(isVop3OpSel, + P.AsmVOP3OpSel, + !if(!and(isVOP3P, P.IsPacked), P.AsmVOP3P, P.Asm64)); let Size = 8; let mayLoad = 0; @@ -120,8 +129,6 @@ class VOP3_Pseudo pattern = [], !if(!or(P.HasModifiers, !or(P.HasOMod, P.HasIntClamp)), "cvtVOP3", "")); - - VOPProfile Pfl = P; } class VOP3P_Pseudo pattern = []> : @@ -129,7 +136,7 @@ class VOP3P_Pseudo pattern = []> : let VOP3P = 1; } -class VOP3_Real : +class VOP3_Real : InstSI , SIMCInstr { @@ -156,7 +163,7 @@ class VOP3_Real : // XXX - Is there any reason to distingusih this from regular VOP3 // here? -class VOP3P_Real : +class VOP3P_Real : VOP3_Real; class VOP3a : Enc64 {