[llvm] [AMDGPU][AsmParser] Allow `v_writelane_b32` to use SGPR and M0 as source operands at the same time (PR #78827)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 31 02:21:46 PST 2024
================
@@ -3514,6 +3514,24 @@ bool AMDGPUAsmParser::usesConstantBus(const MCInst &Inst, unsigned OpIdx) {
}
}
+// Based on the comment for `AMDGPUInstructionSelector::selectWritelane`:
+// Writelane is special in that it can use SGPR and M0 (which would normally
+// count as using the constant bus twice - but in this case it is allowed since
+// the lane selector doesn't count as a use of the constant bus). However, it is
+// still required to abide by the 1 SGPR rule.
+static bool checkWriteLane(const MCInst &Inst) {
+ const unsigned Opcode = Inst.getOpcode();
+ if (Opcode != V_WRITELANE_B32_gfx6_gfx7 && Opcode != V_WRITELANE_B32_vi)
+ return false;
+ const MCOperand &LaneSelOp = Inst.getOperand(2);
+ if (!LaneSelOp.isReg())
+ return false;
+ auto LaneSelReg = mc2PseudoReg(LaneSelOp.getReg());
+ if (LaneSelReg == M0 || LaneSelReg == M0_gfxpre11)
----------------
arsenm wrote:
can fold this into return of bool expression
https://github.com/llvm/llvm-project/pull/78827
More information about the llvm-commits
mailing list