[llvm] [AMDGPU]Refactor `lowerWaveReduce` for maintainability (PR #189223)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 10 05:55:37 PDT 2026
================
@@ -5561,7 +5560,71 @@ static MachineBasicBlock *Expand64BitScalarArithmetic(MachineInstr &MI,
return BB;
}
-static uint32_t getIdentityValueFor32BitWaveReduction(unsigned Opc) {
+static void expand64BitV_CNDMASK(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);
+
+ int Src0Idx =
+ AMDGPU::getNamedOperandIdx(MI.getOpcode(), AMDGPU::OpName::src0);
+ int Src1Idx =
+ AMDGPU::getNamedOperandIdx(MI.getOpcode(), AMDGPU::OpName::src1);
+ const TargetRegisterClass *Src0RC =
+ TRI->getAllocatableClass(TII->getRegClass(MI.getDesc(), Src0Idx));
+ const TargetRegisterClass *Src1RC =
+ TRI->getAllocatableClass(TII->getRegClass(MI.getDesc(), Src1Idx));
+
+ const TargetRegisterClass *Src0SubRC =
+ TRI->getSubRegisterClass(Src0RC, AMDGPU::sub0);
+ const TargetRegisterClass *Src1SubRC =
+ TRI->getSubRegisterClass(Src1RC, AMDGPU::sub1);
----------------
arsenm wrote:
Could also take the class from the V_CNDMASK_B32 operand desc
https://github.com/llvm/llvm-project/pull/189223
More information about the llvm-commits
mailing list