diff options
author | Daniil Fukalov <1671137+dfukalov@users.noreply.github.com> | 2022-09-05 17:07:55 +0300 |
---|---|---|
committer | Daniil Fukalov <1671137+dfukalov@users.noreply.github.com> | 2022-09-05 17:08:21 +0300 |
commit | 99d364d1f430f9727eb5d5e71889790f2dcab3e6 (patch) | |
tree | 0fbc90b4520d73c1afb6b11ae50b8954bdeda703 /llvm/test/MachineVerifier | |
parent | ffa62673004c3367dcf8aa01f2f7f9df13b19eed (diff) | |
download | llvm-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.mir | 31 |
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 + +... |