[llvm] [AMDGPU] Add OMOD folding for TRANS bfloat16 instructions (PR #208595)

Jay Foad via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 15 06:29:04 PDT 2026


================
@@ -2363,6 +2363,60 @@ SIFoldOperandsImpl::isOMod(const MachineInstr &MI) const {
 
     return std::pair(nullptr, SIOutMods::NONE);
   }
+  case AMDGPU::V_FMA_MIXLO_BF16:
+  case AMDGPU::V_FMA_MIX_BF16_t16: {
+    if (MFI->getMode().FP32Denormals.Output != DenormalMode::PreserveSign ||
+        MI.mayRaiseFPException())
+      return {nullptr, SIOutMods::NONE};
+
+    const MachineOperand *Src0 = TII->getNamedOperand(MI, AMDGPU::OpName::src0);
+    const MachineOperand *Src1 = TII->getNamedOperand(MI, AMDGPU::OpName::src1);
+    const MachineOperand *Src2 = TII->getNamedOperand(MI, AMDGPU::OpName::src2);
+
+    if (!Src2->isImm() || Src2->getImm() != 0)
+      return {nullptr, SIOutMods::NONE};
+
+    // op_sel bits are in src*_modifiers but don't affect folding
----------------
jayfoad wrote:

Why do they not affect the folding? When you look through REG_SEQUENCE you look through to the first (presumably lo16) operand, but what if op_sel here selected the hi16 part?

https://github.com/llvm/llvm-project/pull/208595


More information about the llvm-commits mailing list