llvm-project/llvm/test/MachineVerifier/verify-implicit-def.mir
Matt Arsenault c44dca15a4
MachineVerifier: Reject extra non-register operands on instructions (#73758)
We were allowing extra immediate arguments, and only bothering to check
if registers were implicit or not.

Also consolidate extra operand checks in verifier, to make this
testable. We had 3 different places checking if you were trying to build
an instruction with more operands than allowed by the definition. We had
an assertion in addOperand, a direct check in the MIRParser to avoid the
assertion, and the machine verifier checks. Remove the assert and parser
check so the verifier can provide a consistent verification experience,
which will also handle instructions modified in place.
2023-11-30 22:33:42 +09:00

31 lines
992 B
YAML

# REQUIRES: amdgpu-registered-target
# RUN: not --crash llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -run-pass=none -o /dev/null %s 2>&1 | FileCheck %s
---
name: invalid_reg_sequence
tracksRegLiveness: true
body: |
bb.0:
; CHECK: *** Bad machine code: Too few operands ***
IMPLICIT_DEF
; FIXME: Error message misleading
; CHECK: *** Bad machine code: Explicit definition must be a register ***
IMPLICIT_DEF 0
; CHECK: *** Bad machine code: Extra explicit operand on non-variadic instruction ***
%1:vgpr_32 = IMPLICIT_DEF 0
; CHECK: *** Bad machine code: Extra explicit operand on non-variadic instruction ***
; CHECK: *** Bad machine code: Extra explicit operand on non-variadic instruction ***
%2:vgpr_32 = IMPLICIT_DEF 0, 1
; CHECK: *** Bad machine code: Extra explicit operand on non-variadic instruction ***
%3:vgpr_32 = IMPLICIT_DEF %1
; CHECK-NOT: Bad machine code
%4:vgpr_32 = IMPLICIT_DEF implicit %1
...