[llvm] 849ecbc - [AMDGPU] Simplify getIns64. NFCI. (#139981)
via llvm-commits
llvm-commits at lists.llvm.org
Thu May 15 02:59:50 PDT 2025
Author: Stanislav Mekhanoshin
Date: 2025-05-15T02:59:46-07:00
New Revision: 849ecbc3ba1c95f41ee8dd5240c314e1a1980438
URL: https://github.com/llvm/llvm-project/commit/849ecbc3ba1c95f41ee8dd5240c314e1a1980438
DIFF: https://github.com/llvm/llvm-project/commit/849ecbc3ba1c95f41ee8dd5240c314e1a1980438.diff
LOG: [AMDGPU] Simplify getIns64. NFCI. (#139981)
This big switch is unmaintainable and buggy. In particular it
unconditionally
adds clamp if there is omod to VOP3.
Added:
Modified:
llvm/lib/Target/AMDGPU/SIInstrInfo.td
llvm/lib/Target/AMDGPU/VOP2Instructions.td
Removed:
################################################################################
diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.td b/llvm/lib/Target/AMDGPU/SIInstrInfo.td
index 79667e5ff9285..6993095193467 100644
--- a/llvm/lib/Target/AMDGPU/SIInstrInfo.td
+++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.td
@@ -1972,81 +1972,25 @@ class getIns64 <RegisterOperand Src0RC, RegisterOperand Src1RC,
RegisterOperand Src2RC, int NumSrcArgs,
bit HasClamp, bit HasModifiers, bit HasSrc2Mods, bit HasOMod,
Operand Src0Mod, Operand Src1Mod, Operand Src2Mod> {
-
- dag ret =
- !if (!eq(NumSrcArgs, 0),
- // VOP1 without input operands (V_NOP, V_CLREXCP)
- (ins),
- /* else */
- !if (!eq(NumSrcArgs, 1),
- !if (HasModifiers,
- // VOP1 with modifiers
- !if(HasOMod,
- (ins Src0Mod:$src0_modifiers, Src0RC:$src0,
- Clamp0:$clamp, omod0:$omod),
- !if (HasClamp,
- (ins Src0Mod:$src0_modifiers, Src0RC:$src0, Clamp0:$clamp),
- (ins Src0Mod:$src0_modifiers, Src0RC:$src0)))
- /* else */,
- // VOP1 without modifiers
- !if(HasOMod,
- (ins Src0RC:$src0, Clamp0:$clamp, omod0:$omod),
- !if (HasClamp,
- (ins Src0RC:$src0, Clamp0:$clamp),
- (ins Src0RC:$src0)))
- /* endif */ ),
- !if (!eq(NumSrcArgs, 2),
- !if (HasModifiers,
- // VOP 2 with modifiers
- !if(HasOMod,
- (ins Src0Mod:$src0_modifiers, Src0RC:$src0,
- Src1Mod:$src1_modifiers, Src1RC:$src1,
- Clamp0:$clamp, omod0:$omod),
- !con((ins Src0Mod:$src0_modifiers, Src0RC:$src0,
- Src1Mod:$src1_modifiers, Src1RC:$src1),
- !if(HasClamp, (ins Clamp0:$clamp), (ins))))
- /* else */,
- // VOP2 without modifiers
- !if (HasClamp,
- (ins Src0RC:$src0, Src1RC:$src1, Clamp0:$clamp),
- (ins Src0RC:$src0, Src1RC:$src1))
-
- /* endif */ )
- /* NumSrcArgs == 3 */,
- !if (HasModifiers,
- !if (HasSrc2Mods,
- // VOP3 with modifiers
- !if (HasOMod,
- (ins Src0Mod:$src0_modifiers, Src0RC:$src0,
- Src1Mod:$src1_modifiers, Src1RC:$src1,
- Src2Mod:$src2_modifiers, Src2RC:$src2,
- Clamp0:$clamp, omod0:$omod),
- !if (HasClamp,
- (ins Src0Mod:$src0_modifiers, Src0RC:$src0,
- Src1Mod:$src1_modifiers, Src1RC:$src1,
- Src2Mod:$src2_modifiers, Src2RC:$src2,
- Clamp0:$clamp),
- (ins Src0Mod:$src0_modifiers, Src0RC:$src0,
- Src1Mod:$src1_modifiers, Src1RC:$src1,
- Src2Mod:$src2_modifiers, Src2RC:$src2))),
- // VOP3 with modifiers except src2
- !if (HasOMod,
- (ins Src0Mod:$src0_modifiers, Src0RC:$src0,
- Src1Mod:$src1_modifiers, Src1RC:$src1,
- Src2RC:$src2, Clamp0:$clamp, omod0:$omod),
- !if (HasClamp,
- (ins Src0Mod:$src0_modifiers, Src0RC:$src0,
- Src1Mod:$src1_modifiers, Src1RC:$src1,
- Src2RC:$src2, Clamp0:$clamp),
- (ins Src0Mod:$src0_modifiers, Src0RC:$src0,
- Src1Mod:$src1_modifiers, Src1RC:$src1,
- Src2RC:$src2))))
- /* else */,
- // VOP3 without modifiers
- !if (HasClamp,
- (ins Src0RC:$src0, Src1RC:$src1, Src2RC:$src2, Clamp0:$clamp),
- (ins Src0RC:$src0, Src1RC:$src1, Src2RC:$src2))
- /* endif */ ))));
+ dag src0 = !if(!ge(NumSrcArgs, 1),
+ !if (HasModifiers,
+ (ins Src0Mod:$src0_modifiers, Src0RC:$src0),
+ (ins Src0RC:$src0)),
+ (ins));
+ dag src1 = !if(!ge(NumSrcArgs, 2),
+ !if (HasModifiers,
+ (ins Src1Mod:$src1_modifiers, Src1RC:$src1),
+ (ins Src1RC:$src1)),
+ (ins));
+ dag src2 = !if(!ge(NumSrcArgs, 3),
+ !if (HasSrc2Mods,
+ (ins Src2Mod:$src2_modifiers, Src2RC:$src2),
+ (ins Src2RC:$src2)),
+ (ins));
+ dag clamp = !if(HasClamp, (ins Clamp0:$clamp), (ins));
+ dag omod = !if(HasOMod, (ins omod0:$omod), (ins));
+
+ dag ret = !con(src0, src1, src2, clamp, omod);
}
class getInsVOP3Base<RegisterOperand Src0RC, RegisterOperand Src1RC,
diff --git a/llvm/lib/Target/AMDGPU/VOP2Instructions.td b/llvm/lib/Target/AMDGPU/VOP2Instructions.td
index 30cef69aa29c4..0c7e20fc1ebf3 100644
--- a/llvm/lib/Target/AMDGPU/VOP2Instructions.td
+++ b/llvm/lib/Target/AMDGPU/VOP2Instructions.td
@@ -439,7 +439,7 @@ class VOP_MAC <ValueType vt0, ValueType vt1=vt0> : VOPProfile <[vt0, vt1, vt1, v
// Src2 must accept the same operand types as vdst, namely VGPRs only
let Src2RC64 = getVOP3VRegForVT<Src2VT, IsTrue16, !not(IsRealTrue16)>.ret;
let Ins64 = getIns64<Src0RC64, Src1RC64, Src2RC64, 3,
- 0, HasModifiers, HasModifiers, HasOMod,
+ HasClamp, HasModifiers, HasModifiers, HasOMod,
Src0Mod, Src1Mod, Src2Mod>.ret;
let InsDPP = (ins Src0ModDPP:$src0_modifiers, Src0DPP:$src0,
Src1ModDPP:$src1_modifiers, Src1DPP:$src1,
@@ -448,7 +448,7 @@ class VOP_MAC <ValueType vt0, ValueType vt1=vt0> : VOPProfile <[vt0, vt1, vt1, v
DppBankMask:$bank_mask, DppBoundCtrl:$bound_ctrl);
let InsDPP16 = !con(InsDPP, (ins Dpp16FI:$fi));
let InsVOP3Base = getInsVOP3Base<Src0VOP3DPP, Src1VOP3DPP, RegisterOperand<VGPR_32>, 3,
- 0, HasModifiers, HasModifiers, HasOMod,
+ HasClamp, HasModifiers, HasModifiers, HasOMod,
Src0ModVOP3DPP, Src1ModVOP3DPP, Src2Mod, HasOpSel>.ret;
// We need a dummy src2 tied to dst to track the use of that register for s_delay_alu
let InsVOPDX = (ins Src0RC32:$src0X, Src1RC32:$vsrc1X, VGPRSrc_32:$src2X);
More information about the llvm-commits
mailing list