[llvm] [AMDGCN] Error checking for llvm.amdgcn.init.exec.from.input intrinsic (PR #128176)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 21 06:40:12 PST 2025
================
@@ -1622,7 +1622,21 @@ void SIWholeQuadMode::lowerInitExec(MachineInstr &MI) {
MachineInstr *FirstMI = &*MBB->begin();
if (InputReg.isVirtual()) {
MachineInstr *DefInstr = MRI->getVRegDef(InputReg);
- assert(DefInstr && DefInstr->isCopy());
+ // This condition catches some cases where a
+ // llvm.amdgcn.init.exec.from.input intrinsic's first argument comes from
+ // somewhere other than a (SGPR) function argument, which is forbidden.
+ if (!DefInstr || !DefInstr->isCopy() ||
+ (DefInstr->getNumOperands() == 2 && DefInstr->getOperand(1).isReg() &&
+ TRI->isVectorRegister(*MRI, DefInstr->getOperand(1).getReg()))) {
+ MachineFunction *MF = MBB->getParent();
+ DebugLoc DL = DefInstr->getDebugLoc();
+ DiagnosticInfoUnsupported IllegalArg(
+ MF->getFunction(), "EXEC must be initialized using function argument",
+ DL, DS_Error);
+ LLVMContext &C = MF->getFunction().getContext();
+ C.diagnose(IllegalArg);
+ return;
----------------
arsenm wrote:
Do we really need machine verification of this? I think the IR would be enough
https://github.com/llvm/llvm-project/pull/128176
More information about the llvm-commits
mailing list