[DAGCombiner] Eliminate dead stores to stack.
[llvm-complete.git] / test / CodeGen / AMDGPU / phi-elimination-assertion.mir
blob61a3551c8a4f6476c172f1944ad92486254696c9
1 # RUN: llc -mtriple amdgcn -run-pass livevars -run-pass phi-node-elimination -o - %s | FileCheck %s
3 ################################################################################
4 # This test used to hit an assert in PHIElimination:
5 #  PHIElimination::LowerPHINode(llvm::MachineBasicBlock&, llvm::MachineBasicBlock::iterator): Assertion `KillInst->readsRegister(SrcReg) && "Cannot find kill instruction"'
7 ---
8 name:            foo
9 tracksRegLiveness: true
10 body:             |
11   bb.0:
12     S_CBRANCH_SCC0 %bb.2, implicit undef $scc
14   bb.1:
15     %1:sreg_32_xm0 = S_MOV_B32 255
16     S_BRANCH %bb.3
18   bb.2:
19     %2:sreg_32_xm0 = S_MOV_B32 254
21   bb.3:
22     dead %3:sreg_32_xm0 = PHI undef %2, %bb.2, undef %1, %bb.1
23     %4:sreg_32_xm0 = PHI %2, %bb.2, %1, %bb.1
24     S_NOP 0, implicit %4
25 ...
27 # CHECK-LABEL: name:            foo
28 # CHECK:   bb.3:
29 # CHECK-NEXT:     %3:sreg_32_xm0 = COPY killed %4
30 # CHECK-NEXT:     dead %2:sreg_32_xm0 = IMPLICIT_DEF
31 # CHECK-NEXT:     S_NOP 0, implicit killed %3
34 ################################################################################
35 # Similar test as above, but with swapped order for the PHI nodes.
36 # With this PHI node order we did not hit the assert, but we used to get
38 #  bb.3:
39 #    dead %3:sreg_32_xm0 = COPY killed %4
40 #    %2:sreg_32_xm0 = COPY %4
41 #    S_NOP 0, implicit killed %2
43 # which looks weird regarding killed flags for %4.
45 ---
46 name:            bar
47 tracksRegLiveness: true
48 body:             |
49   bb.0:
50     S_CBRANCH_SCC0 %bb.2, implicit undef $scc
52   bb.1:
53     %1:sreg_32_xm0 = S_MOV_B32 255
54     S_BRANCH %bb.3
56   bb.2:
57     %2:sreg_32_xm0 = S_MOV_B32 254
59   bb.3:
60     %4:sreg_32_xm0 = PHI %2, %bb.2, %1, %bb.1
61     dead %3:sreg_32_xm0 = PHI undef %2, %bb.2, undef %1, %bb.1
62     S_NOP 0, implicit %4
63 ...
65 # CHECK-LABEL: name:            bar
66 # CHECK:   bb.3:
67 # CHECK-NEXT:     dead %3:sreg_32_xm0 = IMPLICIT_DEF
68 # CHECK-NEXT:     %2:sreg_32_xm0 = COPY killed %4
69 # CHECK-NEXT:     S_NOP 0, implicit killed %2