[llvm] [AMDGPU]Refactor `lowerWaveReduce` for maintainability (PR #189223)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 30 05:49:18 PDT 2026
================
@@ -5561,7 +5560,68 @@ static MachineBasicBlock *Expand64BitScalarArithmetic(MachineInstr &MI,
return BB;
}
-static uint32_t getIdentityValueFor32BitWaveReduction(unsigned Opc) {
+static MachineBasicBlock *Expand64BitV_CND_MASK(MachineInstr &MI,
+ MachineBasicBlock *BB) {
+ MachineFunction *MF = BB->getParent();
+ const GCNSubtarget &ST = MF->getSubtarget<GCNSubtarget>();
+ const SIInstrInfo *TII = ST.getInstrInfo();
+ const SIRegisterInfo *TRI = ST.getRegisterInfo();
+ MachineRegisterInfo &MRI = MF->getRegInfo();
+ const DebugLoc &DL = MI.getDebugLoc();
+ Register Dst = MI.getOperand(0).getReg();
+ const MachineOperand &Src0 = MI.getOperand(1);
+ const MachineOperand &Src1 = MI.getOperand(2);
+ Register SrcCond = MI.getOperand(3).getReg();
+
+ Register DstLo = MRI.createVirtualRegister(&AMDGPU::VGPR_32RegClass);
+ Register DstHi = MRI.createVirtualRegister(&AMDGPU::VGPR_32RegClass);
+ const auto *CondRC = TRI->getWaveMaskRegClass();
+ Register SrcCondCopy = MRI.createVirtualRegister(CondRC);
+
+ const TargetRegisterClass *Src0RC =
+ Src0.isReg() ? MRI.getRegClass(Src0.getReg()) : &AMDGPU::VReg_64RegClass;
+ const TargetRegisterClass *Src1RC =
+ Src1.isReg() ? MRI.getRegClass(Src1.getReg()) : &AMDGPU::VReg_64RegClass;
----------------
arsenm wrote:
You can query from the underlying instruction instead of worrying about the not-reg input case
https://github.com/llvm/llvm-project/pull/189223
More information about the llvm-commits
mailing list