[llvm] [AMDGPU] Implement vop3p complex pattern optmization for gisel (PR #130234)

Diana Picus via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 27 06:18:17 PDT 2025


================
@@ -4360,13 +4900,17 @@ AMDGPUInstructionSelector::selectVOP3PModsDOT(MachineOperand &Root) const {
   MachineRegisterInfo &MRI
     = Root.getParent()->getParent()->getParent()->getRegInfo();
 
-  Register Src;
-  unsigned Mods;
-  std::tie(Src, Mods) = selectVOP3PModsImpl(Root.getReg(), MRI, true);
+  auto [Op, Mods] = selectVOP3PModsImpl(&Root, MRI, true);
+  if (!(Op->isReg()))
+    return {{
+        [=](MachineInstrBuilder &MIB) { MIB.addImm(getAllKindImm(Op)); },
+        [=](MachineInstrBuilder &MIB) { MIB.addImm(Mods); } // src_mods
+    }};
 
+  Op = getVReg(Op, &Root, RBI, MRI, TRI, TII);
   return {{
-      [=](MachineInstrBuilder &MIB) { MIB.addReg(Src); },
-      [=](MachineInstrBuilder &MIB) { MIB.addImm(Mods); }  // src_mods
+      [=](MachineInstrBuilder &MIB) { MIB.addReg(Op->getReg()); },
+      [=](MachineInstrBuilder &MIB) { MIB.addImm(Mods); } // src_mods
----------------
rovka wrote:

This is getting kind of long and complicated, can you just extract it into a helper and call from both selectVOP3PMods and selectVOP3PModsDOT? (With a flag to pass into selectVOP3PModsImpl, of course)

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


More information about the llvm-commits mailing list