diff --git a/llvm/lib/Target/AMDGPU/SIOptimizeExecMasking.cpp b/llvm/lib/Target/AMDGPU/SIOptimizeExecMasking.cpp --- a/llvm/lib/Target/AMDGPU/SIOptimizeExecMasking.cpp +++ b/llvm/lib/Target/AMDGPU/SIOptimizeExecMasking.cpp @@ -451,20 +451,23 @@ auto Builder = BuildMI(*VCmp.getParent(), std::next(InsertPosIt), VCmp.getDebugLoc(), TII->get(NewOpcode)); - if (AMDGPU::getNamedOperandIdx(NewOpcode, AMDGPU::OpName::src0_modifiers) != - -1) - Builder.addImm(0); + auto AddModifierOrZero = [&](unsigned OperandName) -> void { + if (AMDGPU::getNamedOperandIdx(NewOpcode, OperandName) != -1) { + if (auto *Mod = TII->getNamedOperand(VCmp, OperandName)) { + Builder.addImm(Mod->getImm()); + } else { + Builder.addImm(0); + } + } + }; + AddModifierOrZero(AMDGPU::OpName::src0_modifiers); Builder.add(*Src0); - if (AMDGPU::getNamedOperandIdx(NewOpcode, AMDGPU::OpName::src1_modifiers) != - -1) - Builder.addImm(0); - + AddModifierOrZero(AMDGPU::OpName::src1_modifiers); Builder.add(*Src1); - if (AMDGPU::getNamedOperandIdx(NewOpcode, AMDGPU::OpName::clamp) != -1) - Builder.addImm(0); + AddModifierOrZero(AMDGPU::OpName::clamp); return true; }