[clang] Fix crashes when passing VLA to va_arg (#119563)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / phi-elimination-assertion.mir
blob00828820f8ed738a10406267328d7f29d139ae2a
1 # RUN: llc -mtriple amdgcn -run-pass livevars -run-pass phi-node-elimination -o - %s | FileCheck %s
2 # RUN: llc -mtriple amdgcn --passes='require<live-vars>,phi-node-elimination' -o - %s | FileCheck %s
4 ################################################################################
5 # This test used to hit an assert in PHIElimination:
6 #  PHIElimination::LowerPHINode(llvm::MachineBasicBlock&, llvm::MachineBasicBlock::iterator): Assertion `KillInst->readsRegister(SrcReg) && "Cannot find kill instruction"'
8 ---
9 name:            foo
10 tracksRegLiveness: true
11 body:             |
12   bb.0:
13     S_CBRANCH_SCC0 %bb.2, implicit undef $scc
15   bb.1:
16     %1:sreg_32_xm0 = S_MOV_B32 255
17     S_BRANCH %bb.3
19   bb.2:
20     %2:sreg_32_xm0 = S_MOV_B32 254
22   bb.3:
23     dead %3:sreg_32_xm0 = PHI undef %2, %bb.2, undef %1, %bb.1
24     %4:sreg_32_xm0 = PHI %2, %bb.2, %1, %bb.1
25     S_NOP 0, implicit %4
26 ...
28 # CHECK-LABEL: name:            foo
29 # CHECK:   bb.3:
30 # CHECK-NEXT:     dead %2:sreg_32_xm0 = IMPLICIT_DEF
31 # CHECK-NEXT:     %3:sreg_32_xm0 = COPY killed %4
32 # CHECK-NEXT:     S_NOP 0, implicit killed %3
35 ################################################################################
36 # Similar test as above, but with swapped order for the PHI nodes.
37 # With this PHI node order we did not hit the assert, but we used to get
39 #  bb.3:
40 #    dead %3:sreg_32_xm0 = COPY killed %4
41 #    %2:sreg_32_xm0 = COPY %4
42 #    S_NOP 0, implicit killed %2
44 # which looks weird regarding killed flags for %4.
46 ---
47 name:            bar
48 tracksRegLiveness: true
49 body:             |
50   bb.0:
51     S_CBRANCH_SCC0 %bb.2, implicit undef $scc
53   bb.1:
54     %1:sreg_32_xm0 = S_MOV_B32 255
55     S_BRANCH %bb.3
57   bb.2:
58     %2:sreg_32_xm0 = S_MOV_B32 254
60   bb.3:
61     %4:sreg_32_xm0 = PHI %2, %bb.2, %1, %bb.1
62     dead %3:sreg_32_xm0 = PHI undef %2, %bb.2, undef %1, %bb.1
63     S_NOP 0, implicit %4
64 ...
66 # CHECK-LABEL: name:            bar
67 # CHECK:   bb.3:
68 # CHECK-NEXT:     dead %3:sreg_32_xm0 = IMPLICIT_DEF
69 # CHECK-NEXT:     %2:sreg_32_xm0 = COPY killed %4
70 # CHECK-NEXT:     S_NOP 0, implicit killed %2
73 # The following test crashes in phi-elimination hooks.
76 ---
77 name:            bax
78 tracksRegLiveness: true
79 body:             |
80   bb.0:
81     S_CBRANCH_SCC0 %bb.2, implicit undef $scc
83   bb.1:
84     %1:sreg_32_xm0 = S_MOV_B32 255
85     S_BRANCH %bb.3
87   bb.2:
88     %2:sreg_32_xm0 = S_MOV_B32 254
90   bb.3:
91     %3:sreg_32_xm0 = PHI %2, %bb.2, %1, %bb.1
92 ...
94 # CHECK-LABEL: name:            bax
95 # CHECK:   bb.3:
96 # CHECK-NEXT:     %2:sreg_32_xm0 = COPY killed %3