diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp index 07fb694a78c2..3f6ac8056b59 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp @@ -10025,6 +10025,9 @@ void SIInstrInfo::fixImplicitOperands(MachineInstr &MI) const { if (MI.isInlineAsm()) return; + if (MI.getNumOperands() < MI.getNumExplicitOperands()) + return; + for (auto &Op : MI.implicit_operands()) { if (Op.isReg() && Op.getReg() == AMDGPU::VCC) Op.setReg(AMDGPU::VCC_LO); diff --git a/llvm/test/CodeGen/MIR/AMDGPU/s_wait_alu_missing_operand_crash.mir b/llvm/test/CodeGen/MIR/AMDGPU/s_wait_alu_missing_operand_crash.mir new file mode 100644 index 000000000000..aba02459889c --- /dev/null +++ b/llvm/test/CodeGen/MIR/AMDGPU/s_wait_alu_missing_operand_crash.mir @@ -0,0 +1,9 @@ +# RUN: ! llc -mtriple=amdgcn -run-pass=none %s -filetype=null 2>&1 | FileCheck %s + +--- +# CHECK: Bad machine code: Too few operands +name: missing_operand_crash +body: | + bb.0: + S_WAITCNT_DEPCTR +...