blob: e2e6ea76103c7478ba76f7ed58b0e67ae3059526 [file] [log] [blame]
Bjorn Petterssonc2fc53a2018-09-30 17:26:58 +00001# RUN: llc -mtriple amdgcn -run-pass livevars -run-pass phi-node-elimination -o - %s | FileCheck %s
2
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"'
6
7---
8name: foo
9tracksRegLiveness: true
10body: |
11 bb.0:
12 S_CBRANCH_SCC0 %bb.2, implicit undef $scc
13
14 bb.1:
15 %1:sreg_32_xm0 = S_MOV_B32 255
16 S_BRANCH %bb.3
17
18 bb.2:
19 %2:sreg_32_xm0 = S_MOV_B32 254
20
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...
26
27# CHECK-LABEL: name: foo
28# CHECK: bb.3:
Alexander Timofeev9ff70132019-09-13 17:37:30 +000029# CHECK-NEXT: dead %2:sreg_32_xm0 = IMPLICIT_DEF
Alexander Timofeev6524a7a2019-09-17 09:08:58 +000030# CHECK-NEXT: %3:sreg_32_xm0 = COPY killed %4
Bjorn Petterssonc2fc53a2018-09-30 17:26:58 +000031# CHECK-NEXT: S_NOP 0, implicit killed %3
32
33
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
37#
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
42#
43# which looks weird regarding killed flags for %4.
44
45---
46name: bar
47tracksRegLiveness: true
48body: |
49 bb.0:
50 S_CBRANCH_SCC0 %bb.2, implicit undef $scc
51
52 bb.1:
53 %1:sreg_32_xm0 = S_MOV_B32 255
54 S_BRANCH %bb.3
55
56 bb.2:
57 %2:sreg_32_xm0 = S_MOV_B32 254
58
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...
64
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
Michael Liao7957d4c2019-09-11 19:55:20 +000070
71
72# The following test crashes in phi-elimination hooks.
73#
74
75---
76name: bax
77tracksRegLiveness: true
78body: |
79 bb.0:
80 S_CBRANCH_SCC0 %bb.2, implicit undef $scc
81
82 bb.1:
83 %1:sreg_32_xm0 = S_MOV_B32 255
84 S_BRANCH %bb.3
85
86 bb.2:
87 %2:sreg_32_xm0 = S_MOV_B32 254
88
89 bb.3:
90 %3:sreg_32_xm0 = PHI %2, %bb.2, %1, %bb.1
91...
92
93# CHECK-LABEL: name: bax
94# CHECK: bb.3:
95# CHECK-NEXT: %2:sreg_32_xm0 = COPY killed %3