mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 10:06:05 +00:00

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.
31 lines
992 B
YAML
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
|
|
...
|
|
|
|
|