From d14f2a6359483730657b275d40822d1098e3ff51 Mon Sep 17 00:00:00 2001 From: Jay Foad Date: Thu, 19 May 2022 15:23:10 +0100 Subject: [PATCH] [AMDGPU] Allow multiple uses of the same literal in SOP2/SOPC AMDGPUAsmParser::validateSOPLiteral already knew about this but SIInstrInfo::verifyInstruction did not. Differential Revision: https://reviews.llvm.org/D125976 --- llvm/lib/Target/AMDGPU/SIInstrInfo.cpp | 13 ++++--------- llvm/test/CodeGen/AMDGPU/verify-duplicate-literal.mir | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp index 6d2ce9e..cb1a4a2 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp @@ -4366,16 +4366,11 @@ bool SIInstrInfo::verifyInstruction(const MachineInstr &MI, if (isSOP2(MI) || isSOPC(MI)) { const MachineOperand &Src0 = MI.getOperand(Src0Idx); const MachineOperand &Src1 = MI.getOperand(Src1Idx); - unsigned Immediates = 0; - if (!Src0.isReg() && - !isInlineConstant(Src0, Desc.OpInfo[Src0Idx].OperandType)) - Immediates++; - if (!Src1.isReg() && - !isInlineConstant(Src1, Desc.OpInfo[Src1Idx].OperandType)) - Immediates++; - - if (Immediates > 1) { + if (!Src0.isReg() && !Src1.isReg() && + !isInlineConstant(Src0, Desc.OpInfo[Src0Idx].OperandType) && + !isInlineConstant(Src1, Desc.OpInfo[Src1Idx].OperandType) && + !Src0.isIdenticalTo(Src1)) { ErrInfo = "SOP2/SOPC instruction requires too many immediate constants"; return false; } diff --git a/llvm/test/CodeGen/AMDGPU/verify-duplicate-literal.mir b/llvm/test/CodeGen/AMDGPU/verify-duplicate-literal.mir index a6b6a01..a5920d3 100644 --- a/llvm/test/CodeGen/AMDGPU/verify-duplicate-literal.mir +++ b/llvm/test/CodeGen/AMDGPU/verify-duplicate-literal.mir @@ -26,3 +26,19 @@ body: | ; CHECK: $vgpr0 = V_FMA_F32_e64 0, $vgpr0, 0, 1077936128, 0, 1077936128, 0, 0, implicit $mode, implicit $exec $vgpr0 = V_FMA_F32_e64 0, $vgpr0, 0, 1077936128, 0, 1077936128, 0, 0, implicit $mode, implicit $exec ... + +--- +name: use_duplicate_literal_sop2 +tracksRegLiveness: true +body: | + bb.0: + $sgpr0 = S_ADD_U32 12345, 12345, implicit-def $scc +... + +--- +name: use_duplicate_literal_sopc +tracksRegLiveness: true +body: | + bb.0: + S_CMP_LG_U32 305419896, 305419896, implicit-def $scc +... -- 2.7.4