aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/MachineVerifier
diff options
context:
space:
mode:
authorDaniil Fukalov <1671137+dfukalov@users.noreply.github.com>2022-09-05 17:07:55 +0300
committerDaniil Fukalov <1671137+dfukalov@users.noreply.github.com>2022-09-05 17:08:21 +0300
commit99d364d1f430f9727eb5d5e71889790f2dcab3e6 (patch)
tree0fbc90b4520d73c1afb6b11ae50b8954bdeda703 /llvm/test/MachineVerifier
parentffa62673004c3367dcf8aa01f2f7f9df13b19eed (diff)
downloadllvm-99d364d1f430f9727eb5d5e71889790f2dcab3e6.zip
llvm-99d364d1f430f9727eb5d5e71889790f2dcab3e6.tar.gz
llvm-99d364d1f430f9727eb5d5e71889790f2dcab3e6.tar.bz2
[MachineVerifier] Fix crash on early clobbered subreg operands.
MachineVerifier tried to checkLivenessAtDef() ignoring it is actually a subreg. The issue was with processing two subregs of the same reg are used in the same instruction (e.g. inline asm): "def early-clobber" and other just "def". Reviewed By: foad Differential Revision: https://reviews.llvm.org/D126661
Diffstat (limited to 'llvm/test/MachineVerifier')
-rw-r--r--llvm/test/MachineVerifier/verifier-ec-subreg-liveness.mir31
1 files changed, 31 insertions, 0 deletions
diff --git a/llvm/test/MachineVerifier/verifier-ec-subreg-liveness.mir b/llvm/test/MachineVerifier/verifier-ec-subreg-liveness.mir
new file mode 100644
index 0000000..5f14d57
--- /dev/null
+++ b/llvm/test/MachineVerifier/verifier-ec-subreg-liveness.mir
@@ -0,0 +1,31 @@
+# RUN: llc -mtriple amdgcn-amd-amdhsa -run-pass=liveintervals,pipeliner -verify-machineinstrs -o - %s | FileCheck %s
+# REQUIRES: amdgpu-registered-target
+
+# This test checks that the verifier doesn't crash on early clobbered subreg arguments.
+
+---
+name: sub0
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0_vgpr1
+
+ ; CHECK-NOT: *** Bad machine code: Inconsistent valno->def ***
+ INLINEASM &"", 0 /* attdialect */, 1835019 /* regdef-ec:VGPR_32 */, def undef early-clobber %0.sub0:vreg_64, 1835018 /* regdef:VGPR_32 */, def undef %0.sub1:vreg_64
+ FLAT_STORE_DWORDX2 $vgpr0_vgpr1, %0, 0, 0, implicit $exec, implicit $flat_scr :: (store (s64))
+ S_ENDPGM 0
+
+...
+---
+name: sub1
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $vgpr0_vgpr1
+
+ ; CHECK-NOT: *** Bad machine code: Inconsistent valno->def ***
+ INLINEASM &"", 0 /* attdialect */, 1835018 /* regdef:VGPR_32 */, def undef %0.sub0:vreg_64, 1835019 /* regdef-ec:VGPR_32 */, def undef early-clobber %0.sub1:vreg_64
+ FLAT_STORE_DWORDX2 $vgpr0_vgpr1, %0, 0, 0, implicit $exec, implicit $flat_scr :: (store (s64))
+ S_ENDPGM 0
+
+...