diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2022-05-04 10:36:25 +0100 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2023-09-01 09:06:57 -0400 |
commit | 87117a2e20059f476e067b0f1a5bc50473f3c08f (patch) | |
tree | 2d277e36f81977b4955f4208d6aeebb346c98068 /llvm/test/MachineVerifier | |
parent | 12559064e05a11e8418425de59d8745f0cfb1122 (diff) | |
download | llvm-87117a2e20059f476e067b0f1a5bc50473f3c08f.zip llvm-87117a2e20059f476e067b0f1a5bc50473f3c08f.tar.gz llvm-87117a2e20059f476e067b0f1a5bc50473f3c08f.tar.bz2 |
MachineVerifier: Add tests which are incorrectly accepted
In the process of splitting out the liveness tracking, I ran into
these cases which should have been caught. There are still missing
errors for some cases in the entry block.
https://reviews.llvm.org/D127104
Diffstat (limited to 'llvm/test/MachineVerifier')
3 files changed, 64 insertions, 0 deletions
diff --git a/llvm/test/MachineVerifier/register-killed-inside-loop.mir b/llvm/test/MachineVerifier/register-killed-inside-loop.mir new file mode 100644 index 0000000..a89d0da --- /dev/null +++ b/llvm/test/MachineVerifier/register-killed-inside-loop.mir @@ -0,0 +1,33 @@ +# FIXME: This should fail the verifier +# XFAIL: * +# REQUIRES: amdgpu-registered-target +# RUN: not --crash llc -o - -mtriple=amdgcn-amd-amdhsa -run-pass=none -verify-machineinstrs %s 2>&1 | FileCheck %s + +# %1 is live out of %bb.1 through the loop edge, and therefore the kill flag is invalid. + +# CHECK: *** Bad machine code: Virtual register killed in block, but needed live out. *** + +--- +name: kill_flag_in_loop +body: | + bb.0: + liveins: $sgpr0, $vgpr0_vgpr1 + successors: %bb.1(0x80000000) + + %0:sreg_32 = COPY $sgpr0 + %1:sreg_32 = S_AND_B32 1, killed %0, implicit-def dead $scc + + bb.1: + successors: %bb.2(0x40000000), %bb.1(0x40000000) + + S_CMP_EQ_I32 killed %1:sreg_32, 1, implicit-def $scc + S_CBRANCH_SCC0 %bb.2, implicit $scc + S_BRANCH %bb.1 + + bb.2: + successors: %bb.3(0x80000000) + + bb.3: + S_ENDPGM 0 + +... diff --git a/llvm/test/MachineVerifier/undef-virt-reg-entry-block.mir b/llvm/test/MachineVerifier/undef-virt-reg-entry-block.mir new file mode 100644 index 0000000..de4edea --- /dev/null +++ b/llvm/test/MachineVerifier/undef-virt-reg-entry-block.mir @@ -0,0 +1,14 @@ +# XFAIL: * +# REQUIRES: amdgpu-registered-target +# RUN: not --crash llc -o - -mtriple=amdgcn-amd-amdhsa -run-pass=none -verify-machineinstrs %s + + # FIXME: This should catch the undefined use of %0 + +--- +name: undef_virtreg +body: | + bb.0: + + S_ENDPGM 0, implicit %0:sreg_32 + +... diff --git a/llvm/test/MachineVerifier/undef-virt-reg-nonentry-block.mir b/llvm/test/MachineVerifier/undef-virt-reg-nonentry-block.mir new file mode 100644 index 0000000..38073fb --- /dev/null +++ b/llvm/test/MachineVerifier/undef-virt-reg-nonentry-block.mir @@ -0,0 +1,17 @@ +# FIXME: This should fail the verifier +# XFAIL: * +# REQUIRES: amdgpu-registered-target +# RUN: not --crash llc -o - -mtriple=amdgcn-amd-amdhsa -run-pass=none -verify-machineinstrs %s 2>&1 | FileCheck %s + +# CHECK: *** Bad machine code: Virtual register defs don't dominate all uses. *** + +--- +name: undef_virtreg +body: | + bb.0: + + bb.1: + %0:sreg_32 = S_AND_B32 1, %1:sreg_32, implicit-def dead $scc + S_ENDPGM 0, implicit %1 + +... |