Skip to content

Commit 120034c

Browse files
committed
Update test cases to stop after live variables
1 parent 928a235 commit 120034c

File tree

6 files changed

+495
-710
lines changed

6 files changed

+495
-710
lines changed
Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
; RUN: llc -mtriple=riscv64 -riscv-enable-live-variables -verify-machineinstrs \
2+
; RUN: -riscv-enable-live-variables -riscv-liveness-update-kills -stop-after=riscv-live-variables \
3+
; RUN: -o - %s | FileCheck %s
4+
5+
; Test live variable analysis edge cases and special scenarios
6+
; Including: dead code, unreachable blocks, critical edges, and complex phi nodes
7+
8+
; CHECK: test_dead_code
9+
; CHECK: bb.0.entry:
10+
; CHECK: liveins: $x10
11+
; CHECK: %0:gpr = COPY $x10
12+
; CHECK: $x10 = COPY killed %0
13+
; CHECK: PseudoRET implicit $x10
14+
15+
define i64 @test_dead_code(i64 %a, i64 %b) {
16+
entry:
17+
%dead = add i64 %a, %b
18+
ret i64 %a
19+
}
20+
21+
; CHECK: test_critical_edge
22+
; CHECK: bb.0.entry:
23+
; CHECK: successors: %bb.2(0x50000000), %bb.1(0x30000000)
24+
; CHECK: liveins: $x10, $x11, $x12
25+
;
26+
; CHECK: %5:gpr = COPY $x12
27+
; CHECK: %4:gpr = COPY $x11
28+
; CHECK: %3:gpr = COPY $x10
29+
; CHECK: %6:gpr = COPY $x0
30+
; CHECK: BLT killed %6, %3, %bb.2
31+
; CHECK: PseudoBR %bb.1
32+
;
33+
; CHECK: bb.1.check2:
34+
; CHECK: successors: %bb.2(0x50000000), %bb.3(0x30000000)
35+
;
36+
; CHECK: %7:gpr = COPY $x0
37+
; CHECK: BGE killed %7, %4, %bb.3
38+
; CHECK: PseudoBR %bb.2
39+
;
40+
; CHECK: bb.2.then:
41+
; CHECK: successors: %bb.4(0x80000000)
42+
;
43+
; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def dead $x2, implicit $x2
44+
; CHECK: $x10 = COPY killed %3
45+
; CHECK: $x11 = COPY killed %4
46+
; CHECK: PseudoCALL target-flags(riscv-call) &__muldi3, csr_ilp32_lp64, implicit-def dead $x1, implicit $x10, implicit $x11, implicit-def $x2, implicit-def $x10
47+
; CHECK: ADJCALLSTACKUP 0, 0, implicit-def dead $x2, implicit $x2
48+
; CHECK: %8:gpr = COPY $x10
49+
; CHECK: %0:gpr = COPY killed %8
50+
; CHECK: PseudoBR %bb.4
51+
;
52+
; CHECK: bb.3.else:
53+
; CHECK: successors: %bb.4(0x80000000)
54+
;
55+
; CHECK: %1:gpr = SUB killed %3, killed %5
56+
;
57+
; CHECK: bb.4.end:
58+
; CHECK: %2:gpr = PHI %1, %bb.3, %0, %bb.2
59+
; CHECK: $x10 = COPY killed %2
60+
; CHECK: PseudoRET implicit $x10
61+
62+
define i64 @test_critical_edge(i64 %a, i64 %b, i64 %c) {
63+
entry:
64+
%cmp1 = icmp sgt i64 %a, 0
65+
br i1 %cmp1, label %then, label %check2
66+
67+
check2:
68+
%cmp2 = icmp sgt i64 %b, 0
69+
br i1 %cmp2, label %then, label %else
70+
71+
then:
72+
%mul = mul i64 %a, %b
73+
br label %end
74+
75+
else:
76+
%sub = sub i64 %a, %c
77+
br label %end
78+
79+
end:
80+
%result = phi i64 [ %mul, %then ], [ %sub, %else ]
81+
ret i64 %result
82+
}
83+
84+
; CHECK: test_complex_phi
85+
; CHECK: bb.0.entry:
86+
; CHECK: successors: %bb.1(0x50000000), %bb.2(0x30000000)
87+
; CHECK: liveins: $x10, $x11, $x12, $x13
88+
;
89+
; CHECK: %7:gpr = COPY $x13
90+
; CHECK: %6:gpr = COPY $x12
91+
; CHECK: %5:gpr = COPY $x11
92+
; CHECK: %4:gpr = COPY $x10
93+
; CHECK: %8:gpr = COPY $x0
94+
; CHECK: BGE killed %8, %4, %bb.2
95+
; CHECK: PseudoBR %bb.1
96+
;
97+
; CHECK: bb.1.path1:
98+
; CHECK: successors: %bb.5(0x80000000)
99+
;
100+
; CHECK: %0:gpr = ADD killed %4, killed %5
101+
; CHECK: PseudoBR %bb.5
102+
;
103+
; CHECK: bb.2.path2:
104+
; CHECK: successors: %bb.3(0x50000000), %bb.4(0x30000000)
105+
;
106+
; CHECK: %9:gpr = COPY $x0
107+
; CHECK: BGE killed %9, %6, %bb.4
108+
; CHECK: PseudoBR %bb.3
109+
;
110+
; CHECK: bb.3.path2a:
111+
; CHECK: successors: %bb.5(0x80000000)
112+
;
113+
; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def dead $x2, implicit $x2
114+
; CHECK: $x10 = COPY killed %6
115+
; CHECK: $x11 = COPY killed %7
116+
; CHECK: PseudoCALL target-flags(riscv-call) &__muldi3, csr_ilp32_lp64, implicit-def dead $x1, implicit $x10, implicit $x11, implicit-def $x2, implicit-def $x10
117+
; CHECK: ADJCALLSTACKUP 0, 0, implicit-def dead $x2, implicit $x2
118+
; CHECK: %10:gpr = COPY $x10
119+
; CHECK: %1:gpr = COPY killed %10
120+
; CHECK: PseudoBR %bb.5
121+
;
122+
; CHECK: bb.4.path2b:
123+
; CHECK: successors: %bb.5(0x80000000)
124+
;
125+
; CHECK: %2:gpr = SUB killed %6, killed %7
126+
;
127+
; CHECK: bb.5.merge:
128+
; CHECK: %3:gpr = PHI %2, %bb.4, %1, %bb.3, %0, %bb.1
129+
; CHECK: $x10 = COPY killed %3
130+
; CHECK: PseudoRET implicit $x10
131+
132+
define i64 @test_complex_phi(i64 %a, i64 %b, i64 %c, i64 %d) {
133+
entry:
134+
%cmp1 = icmp sgt i64 %a, 0
135+
br i1 %cmp1, label %path1, label %path2
136+
137+
path1:
138+
%v1 = add i64 %a, %b
139+
br label %merge
140+
141+
path2:
142+
%cmp2 = icmp sgt i64 %c, 0
143+
br i1 %cmp2, label %path2a, label %path2b
144+
145+
path2a:
146+
%v2a = mul i64 %c, %d
147+
br label %merge
148+
149+
path2b:
150+
%v2b = sub i64 %c, %d
151+
br label %merge
152+
153+
merge:
154+
%result = phi i64 [ %v1, %path1 ], [ %v2a, %path2a ], [ %v2b, %path2b ]
155+
ret i64 %result
156+
}
157+
158+
; CHECK: test_use_after_def
159+
; CHECK: bb.0.entry:
160+
; CHECK: liveins: $x10
161+
;
162+
; CHECK: %0:gpr = COPY $x10
163+
; CHECK: %1:gpr = ADDI killed %0, 1
164+
; CHECK: %2:gpr = ADD killed %1, %1
165+
; CHECK: %3:gpr = ADDI killed %2, 5
166+
; CHECK: $x10 = COPY killed %3
167+
; CHECK: PseudoRET implicit $x10
168+
169+
define i64 @test_use_after_def(i64 %a) {
170+
entry:
171+
%v1 = add i64 %a, 1
172+
%v2 = add i64 %v1, 2
173+
%v3 = add i64 %v2, 3
174+
%v4 = add i64 %v1, %v3
175+
ret i64 %v4
176+
}
177+
178+
; CHECK: test_implicit_defs
179+
; CHECK: bb.0.entry:
180+
; CHECK: liveins: $x10, $x11
181+
;
182+
; CHECK: %1:gpr = COPY $x11
183+
; CHECK: %0:gpr = COPY $x10
184+
; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def dead $x2, implicit $x2
185+
; CHECK: $x10 = COPY %0
186+
; CHECK: $x11 = COPY %1
187+
; CHECK: PseudoCALL target-flags(riscv-call) &__divdi3, csr_ilp32_lp64, implicit-def dead $x1, implicit $x10, implicit $x11, implicit-def $x2, implicit-def $x10
188+
; CHECK: ADJCALLSTACKUP 0, 0, implicit-def dead $x2, implicit $x2
189+
; CHECK: %2:gpr = COPY $x10
190+
; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def dead $x2, implicit $x2
191+
; CHECK: $x10 = COPY killed %0
192+
; CHECK: $x11 = COPY killed %1
193+
; CHECK: PseudoCALL target-flags(riscv-call) &__moddi3, csr_ilp32_lp64, implicit-def dead $x1, implicit $x10, implicit $x11, implicit-def $x2, implicit-def $x10
194+
; CHECK: ADJCALLSTACKUP 0, 0, implicit-def dead $x2, implicit $x2
195+
; CHECK: %3:gpr = COPY $x10
196+
; CHECK: %4:gpr = ADD killed %2, killed %3
197+
; CHECK: $x10 = COPY killed %4
198+
; CHECK: PseudoRET implicit $x10
199+
200+
define i64 @test_implicit_defs(i64 %a, i64 %b) {
201+
entry:
202+
%div = sdiv i64 %a, %b
203+
%rem = srem i64 %a, %b
204+
%sum = add i64 %div, %rem
205+
ret i64 %sum
206+
}

0 commit comments

Comments
 (0)