[llvm] [AMDGPU] Support Wave Reduction for i16 types - 1 (PR #194808)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 29 13:03:27 PDT 2026
================
@@ -6114,12 +6153,35 @@ static MachineBasicBlock *lowerWaveReduce(MachineInstr &MI,
IsWave32 ? AMDGPU::S_FF1_I32_B32 : AMDGPU::S_FF1_I32_B64;
BuildMI(*ComputeLoop, I, DL, TII->get(SFFOpc), FF1Reg)
.addReg(ActiveBitsReg);
- if (is32BitOpc) {
+ if (is32BitOpc || is16BitOpc) {
BuildMI(*ComputeLoop, I, DL, TII->get(AMDGPU::V_READLANE_B32),
LaneValueReg)
.addReg(SrcReg)
.addReg(FF1Reg);
- if (isFPOp) {
+ if (is16BitOpc) {
+ Register LaneValVgpr = MRI.createVirtualRegister(SrcRegClass);
+ Register VgprResultReg = MRI.createVirtualRegister(SrcRegClass);
+ bool isGFX10 = ST.getGeneration() == AMDGPUSubtarget::GFX10;
+ // Get the Lane Value in VGPR to avoid the Constant Bus Restriction
+ BuildMI(*ComputeLoop, I, DL, TII->get(AMDGPU::COPY), LaneValVgpr)
+ .addReg(LaneValueReg);
+ auto OpInstr =
+ BuildMI(*ComputeLoop, I, DL, TII->get(Opc), VgprResultReg);
+ if (isGFX10)
----------------
arsenm wrote:
Should not be a generation check
https://github.com/llvm/llvm-project/pull/194808
More information about the llvm-commits
mailing list