[llvm] [AMDGPU] Add wave reduce intrinsics for double types - 1 (PR #170811)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 21 03:46:23 PST 2026
================
@@ -5943,6 +5942,63 @@ static MachineBasicBlock *lowerWaveReduce(MachineInstr &MI,
.addReg(Accumulator->getOperand(0).getReg());
break;
}
+ case AMDGPU::V_MIN_F64_e64:
+ case AMDGPU::V_MAX_F64_e64: {
+ int SrcIdx =
+ AMDGPU::getNamedOperandIdx(MI.getOpcode(), AMDGPU::OpName::src);
+ const TargetRegisterClass *VregRC =
+ TRI->getAllocatableClass(TII->getRegClass(MI.getDesc(), SrcIdx));
+ const TargetRegisterClass *VregSubRC =
+ TRI->getSubRegisterClass(VregRC, AMDGPU::sub0);
+ Register AccumulatorVReg = MRI.createVirtualRegister(VregRC);
+ Register DstVreg = MRI.createVirtualRegister(VregRC);
+ Register LaneValLo =
+ MRI.createVirtualRegister(&AMDGPU::SReg_32_XM0RegClass);
+ Register LaneValHi =
+ MRI.createVirtualRegister(&AMDGPU::SReg_32_XM0RegClass);
+ BuildMI(*ComputeLoop, I, DL, TII->get(AMDGPU::V_MOV_B64_PSEUDO),
+ AccumulatorVReg)
+ .addReg(Accumulator->getOperand(0).getReg());
+ if (IsGFX12Plus) {
+ switch (Opc) {
----------------
easyonaadit wrote:
Err, I'm not too sure how to use an enum here. Maybe I could extract this logic into a static function?
Something like `unsigned getGFX12PlusOpcForWaveReduction(unsigned Opc)`
https://github.com/llvm/llvm-project/pull/170811
More information about the llvm-commits
mailing list