[llvm] 87117a2 - MachineVerifier: Add tests which are incorrectly accepted

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 1 06:07:02 PDT 2023


Author: Matt Arsenault
Date: 2023-09-01T09:06:57-04:00
New Revision: 87117a2e20059f476e067b0f1a5bc50473f3c08f

URL: https://github.com/llvm/llvm-project/commit/87117a2e20059f476e067b0f1a5bc50473f3c08f
DIFF: https://github.com/llvm/llvm-project/commit/87117a2e20059f476e067b0f1a5bc50473f3c08f.diff

LOG: 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

Added: 
    llvm/test/MachineVerifier/register-killed-inside-loop.mir
    llvm/test/MachineVerifier/undef-virt-reg-entry-block.mir
    llvm/test/MachineVerifier/undef-virt-reg-nonentry-block.mir

Modified: 
    

Removed: 
    


################################################################################
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 00000000000000..a89d0da0fa7345
--- /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 00000000000000..de4edeaa57c8ec
--- /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 00000000000000..38073fb0b73e9c
--- /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
+
+...


        


More information about the llvm-commits mailing list