Skip to content

Commit 5752acf

Browse files
committed
[MachineLICM] Precommit a test showing wrong behaviour.
1 parent 0611fdd commit 5752acf

File tree

1 file changed

+223
-0
lines changed

1 file changed

+223
-0
lines changed
Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
2+
# RUN: llc %s -mtriple=riscv64 -run-pass=early-machinelicm -o - | FileCheck %s
3+
4+
# The instruction `%invariant:gpr = ADDI %y, -1` can be hoisted, but should not because it will increase register pressure beyond the limit.
5+
---
6+
name: foo
7+
tracksRegLiveness: true
8+
body: |
9+
; CHECK-LABEL: name: foo
10+
; CHECK: bb.0.entry:
11+
; CHECK-NEXT: successors: %bb.1(0x80000000)
12+
; CHECK-NEXT: liveins: $x10, $x11, $x12
13+
; CHECK-NEXT: {{ $}}
14+
; CHECK-NEXT: %n:gpr = COPY $x10
15+
; CHECK-NEXT: %base_addr:gpr = COPY $x11
16+
; CHECK-NEXT: %y:gpr = COPY $x12
17+
; CHECK-NEXT: %zero:gpr = COPY $x0
18+
; CHECK-NEXT: %invariant:gpr = ADDI %y, -1
19+
; CHECK-NEXT: %use_y:gpr = ADDI %y, -2
20+
; CHECK-NEXT: %z:gpr = ADD %use_y, %invariant
21+
; CHECK-NEXT: {{ $}}
22+
; CHECK-NEXT: bb.1:
23+
; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
24+
; CHECK-NEXT: {{ $}}
25+
; CHECK-NEXT: %i:gpr = PHI %n, %bb.0, %i_dec, %bb.1
26+
; CHECK-NEXT: %addr:gpr = ADD %base_addr, %i
27+
; CHECK-NEXT: %x_0:gpr = LD %addr, 0 :: (load (s64))
28+
; CHECK-NEXT: %x_1:gpr = LD %addr, 1 :: (load (s64))
29+
; CHECK-NEXT: %x_2:gpr = LD %addr, 2 :: (load (s64))
30+
; CHECK-NEXT: %x_3:gpr = LD %addr, 3 :: (load (s64))
31+
; CHECK-NEXT: %x_4:gpr = LD %addr, 4 :: (load (s64))
32+
; CHECK-NEXT: %x_5:gpr = LD %addr, 5 :: (load (s64))
33+
; CHECK-NEXT: %x_6:gpr = LD %addr, 6 :: (load (s64))
34+
; CHECK-NEXT: %x_7:gpr = LD %addr, 7 :: (load (s64))
35+
; CHECK-NEXT: %x_8:gpr = LD %addr, 8 :: (load (s64))
36+
; CHECK-NEXT: %x_9:gpr = LD %addr, 9 :: (load (s64))
37+
; CHECK-NEXT: %x_10:gpr = LD %addr, 10 :: (load (s64))
38+
; CHECK-NEXT: %x_11:gpr = LD %addr, 11 :: (load (s64))
39+
; CHECK-NEXT: %x_12:gpr = LD %addr, 12 :: (load (s64))
40+
; CHECK-NEXT: %x_13:gpr = LD %addr, 13 :: (load (s64))
41+
; CHECK-NEXT: %x_14:gpr = LD %addr, 14 :: (load (s64))
42+
; CHECK-NEXT: %x_15:gpr = LD %addr, 15 :: (load (s64))
43+
; CHECK-NEXT: %x_16:gpr = LD %addr, 16 :: (load (s64))
44+
; CHECK-NEXT: %x_17:gpr = LD %addr, 17 :: (load (s64))
45+
; CHECK-NEXT: %x_18:gpr = LD %addr, 18 :: (load (s64))
46+
; CHECK-NEXT: %x_19:gpr = LD %addr, 19 :: (load (s64))
47+
; CHECK-NEXT: %x_20:gpr = LD %addr, 20 :: (load (s64))
48+
; CHECK-NEXT: %x_21:gpr = LD %addr, 21 :: (load (s64))
49+
; CHECK-NEXT: %x_22:gpr = LD %addr, 22 :: (load (s64))
50+
; CHECK-NEXT: %x_23:gpr = LD %addr, 23 :: (load (s64))
51+
; CHECK-NEXT: %x_24:gpr = LD %addr, 24 :: (load (s64))
52+
; CHECK-NEXT: %x_25:gpr = LD %addr, 25 :: (load (s64))
53+
; CHECK-NEXT: %x_26:gpr = LD %addr, 26 :: (load (s64))
54+
; CHECK-NEXT: %x_26_1:gpr = ADDI %x_26, 1
55+
; CHECK-NEXT: %x_25_1:gpr = ADDI %x_25, 1
56+
; CHECK-NEXT: %x_24_1:gpr = ADDI %x_24, 1
57+
; CHECK-NEXT: %x_23_1:gpr = ADDI %x_23, 1
58+
; CHECK-NEXT: %x_22_1:gpr = ADDI %x_22, 1
59+
; CHECK-NEXT: %x_21_1:gpr = ADDI %x_21, 1
60+
; CHECK-NEXT: %x_20_1:gpr = ADDI %x_20, 1
61+
; CHECK-NEXT: %x_19_1:gpr = ADDI %x_19, 1
62+
; CHECK-NEXT: %x_18_1:gpr = ADDI %x_18, 1
63+
; CHECK-NEXT: %x_17_1:gpr = ADDI %x_17, 1
64+
; CHECK-NEXT: %x_16_1:gpr = ADDI %x_16, 1
65+
; CHECK-NEXT: %x_15_1:gpr = ADDI %x_15, 1
66+
; CHECK-NEXT: %x_14_1:gpr = ADDI %x_14, 1
67+
; CHECK-NEXT: %x_13_1:gpr = ADDI %x_13, 1
68+
; CHECK-NEXT: %x_12_1:gpr = ADDI %x_12, 1
69+
; CHECK-NEXT: %x_11_1:gpr = ADDI %x_11, 1
70+
; CHECK-NEXT: %x_10_1:gpr = ADDI %x_10, 1
71+
; CHECK-NEXT: %x_9_1:gpr = ADDI %x_9, 1
72+
; CHECK-NEXT: %x_8_1:gpr = ADDI %x_8, 1
73+
; CHECK-NEXT: %x_7_1:gpr = ADDI %x_7, 1
74+
; CHECK-NEXT: %x_6_1:gpr = ADDI %x_6, 1
75+
; CHECK-NEXT: %x_5_1:gpr = ADDI %x_5, 1
76+
; CHECK-NEXT: %x_4_1:gpr = ADDI %x_4, 1
77+
; CHECK-NEXT: %x_3_1:gpr = ADDI %x_3, 1
78+
; CHECK-NEXT: %x_2_1:gpr = ADDI %x_2, 1
79+
; CHECK-NEXT: %x_1_1:gpr = ADDI %x_1, 1
80+
; CHECK-NEXT: %x_0_1:gpr = ADDI %x_0, 1
81+
; CHECK-NEXT: SD %x_26_1, %addr, 26 :: (store (s64))
82+
; CHECK-NEXT: SD %x_25_1, %addr, 25 :: (store (s64))
83+
; CHECK-NEXT: SD %x_24_1, %addr, 24 :: (store (s64))
84+
; CHECK-NEXT: SD %x_23_1, %addr, 23 :: (store (s64))
85+
; CHECK-NEXT: SD %x_22_1, %addr, 22 :: (store (s64))
86+
; CHECK-NEXT: SD %x_21_1, %addr, 21 :: (store (s64))
87+
; CHECK-NEXT: SD %x_20_1, %addr, 20 :: (store (s64))
88+
; CHECK-NEXT: SD %x_19_1, %addr, 19 :: (store (s64))
89+
; CHECK-NEXT: SD %x_18_1, %addr, 18 :: (store (s64))
90+
; CHECK-NEXT: SD %x_17_1, %addr, 17 :: (store (s64))
91+
; CHECK-NEXT: SD %x_16_1, %addr, 16 :: (store (s64))
92+
; CHECK-NEXT: SD %x_15_1, %addr, 15 :: (store (s64))
93+
; CHECK-NEXT: SD %x_14_1, %addr, 14 :: (store (s64))
94+
; CHECK-NEXT: SD %x_13_1, %addr, 13 :: (store (s64))
95+
; CHECK-NEXT: SD %x_12_1, %addr, 12 :: (store (s64))
96+
; CHECK-NEXT: SD %x_11_1, %addr, 11 :: (store (s64))
97+
; CHECK-NEXT: SD %x_10_1, %addr, 10 :: (store (s64))
98+
; CHECK-NEXT: SD %x_9_1, %addr, 9 :: (store (s64))
99+
; CHECK-NEXT: SD %x_8_1, %addr, 8 :: (store (s64))
100+
; CHECK-NEXT: SD %x_7_1, %addr, 7 :: (store (s64))
101+
; CHECK-NEXT: SD %x_6_1, %addr, 6 :: (store (s64))
102+
; CHECK-NEXT: SD %x_5_1, %addr, 5 :: (store (s64))
103+
; CHECK-NEXT: SD %x_4_1, %addr, 4 :: (store (s64))
104+
; CHECK-NEXT: SD %x_3_1, %addr, 3 :: (store (s64))
105+
; CHECK-NEXT: SD %x_2_1, %addr, 2 :: (store (s64))
106+
; CHECK-NEXT: SD %x_1_1, %addr, 1 :: (store (s64))
107+
; CHECK-NEXT: SD %x_0_1, %addr, 0 :: (store (s64))
108+
; CHECK-NEXT: %i_dec:gpr = ADD %i, %z
109+
; CHECK-NEXT: BEQ %i_dec, %zero, %bb.1
110+
; CHECK-NEXT: PseudoBR %bb.2
111+
; CHECK-NEXT: {{ $}}
112+
; CHECK-NEXT: bb.2:
113+
; CHECK-NEXT: PseudoRET
114+
bb.0.entry:
115+
successors: %bb.1(0x50000000)
116+
liveins: $x10, $x11, $x12
117+
118+
%n:gpr = COPY $x10
119+
%base_addr:gpr = COPY $x11
120+
%y:gpr = COPY $x12
121+
%zero:gpr = COPY $x0
122+
123+
bb.1:
124+
successors: %bb.1, %bb.2
125+
%i:gpr = PHI %n, %bb.0, %i_dec, %bb.1
126+
%addr:gpr = ADD %base_addr, %i
127+
128+
%x_0:gpr = LD %addr, 0 :: (load (s64))
129+
%x_1:gpr = LD %addr, 1 :: (load (s64))
130+
%x_2:gpr = LD %addr, 2 :: (load (s64))
131+
%x_3:gpr = LD %addr, 3 :: (load (s64))
132+
%x_4:gpr = LD %addr, 4 :: (load (s64))
133+
%x_5:gpr = LD %addr, 5 :: (load (s64))
134+
%x_6:gpr = LD %addr, 6 :: (load (s64))
135+
%x_7:gpr = LD %addr, 7 :: (load (s64))
136+
%x_8:gpr = LD %addr, 8 :: (load (s64))
137+
%x_9:gpr = LD %addr, 9 :: (load (s64))
138+
%x_10:gpr = LD %addr, 10 :: (load (s64))
139+
%x_11:gpr = LD %addr, 11 :: (load (s64))
140+
%x_12:gpr = LD %addr, 12 :: (load (s64))
141+
%x_13:gpr = LD %addr, 13 :: (load (s64))
142+
%x_14:gpr = LD %addr, 14 :: (load (s64))
143+
%x_15:gpr = LD %addr, 15 :: (load (s64))
144+
%x_16:gpr = LD %addr, 16 :: (load (s64))
145+
%x_17:gpr = LD %addr, 17 :: (load (s64))
146+
%x_18:gpr = LD %addr, 18 :: (load (s64))
147+
%x_19:gpr = LD %addr, 19 :: (load (s64))
148+
%x_20:gpr = LD %addr, 20 :: (load (s64))
149+
%x_21:gpr = LD %addr, 21 :: (load (s64))
150+
%x_22:gpr = LD %addr, 22 :: (load (s64))
151+
%x_23:gpr = LD %addr, 23 :: (load (s64))
152+
%x_24:gpr = LD %addr, 24 :: (load (s64))
153+
%x_25:gpr = LD %addr, 25 :: (load (s64))
154+
%x_26:gpr = LD %addr, 26 :: (load (s64))
155+
156+
157+
%x_26_1:gpr = ADDI %x_26, 1
158+
%x_25_1:gpr = ADDI %x_25, 1
159+
%x_24_1:gpr = ADDI %x_24, 1
160+
%x_23_1:gpr = ADDI %x_23, 1
161+
%x_22_1:gpr = ADDI %x_22, 1
162+
%x_21_1:gpr = ADDI %x_21, 1
163+
%x_20_1:gpr = ADDI %x_20, 1
164+
%x_19_1:gpr = ADDI %x_19, 1
165+
%x_18_1:gpr = ADDI %x_18, 1
166+
%x_17_1:gpr = ADDI %x_17, 1
167+
%x_16_1:gpr = ADDI %x_16, 1
168+
%x_15_1:gpr = ADDI %x_15, 1
169+
%x_14_1:gpr = ADDI %x_14, 1
170+
%x_13_1:gpr = ADDI %x_13, 1
171+
%x_12_1:gpr = ADDI %x_12, 1
172+
%x_11_1:gpr = ADDI %x_11, 1
173+
%x_10_1:gpr = ADDI %x_10, 1
174+
%x_9_1:gpr = ADDI %x_9, 1
175+
%x_8_1:gpr = ADDI %x_8, 1
176+
%x_7_1:gpr = ADDI %x_7, 1
177+
%x_6_1:gpr = ADDI %x_6, 1
178+
%x_5_1:gpr = ADDI %x_5, 1
179+
%x_4_1:gpr = ADDI %x_4, 1
180+
%x_3_1:gpr = ADDI %x_3, 1
181+
%x_2_1:gpr = ADDI %x_2, 1
182+
%x_1_1:gpr = ADDI %x_1, 1
183+
%x_0_1:gpr = ADDI %x_0, 1
184+
185+
%invariant:gpr = ADDI %y, -1
186+
187+
SD %x_26_1, %addr, 26 :: (store (s64))
188+
SD %x_25_1, %addr, 25 :: (store (s64))
189+
SD %x_24_1, %addr, 24 :: (store (s64))
190+
SD %x_23_1, %addr, 23 :: (store (s64))
191+
SD %x_22_1, %addr, 22 :: (store (s64))
192+
SD %x_21_1, %addr, 21 :: (store (s64))
193+
SD %x_20_1, %addr, 20 :: (store (s64))
194+
SD %x_19_1, %addr, 19 :: (store (s64))
195+
SD %x_18_1, %addr, 18 :: (store (s64))
196+
SD %x_17_1, %addr, 17 :: (store (s64))
197+
SD %x_16_1, %addr, 16 :: (store (s64))
198+
SD %x_15_1, %addr, 15 :: (store (s64))
199+
SD %x_14_1, %addr, 14 :: (store (s64))
200+
SD %x_13_1, %addr, 13 :: (store (s64))
201+
SD %x_12_1, %addr, 12 :: (store (s64))
202+
SD %x_11_1, %addr, 11 :: (store (s64))
203+
SD %x_10_1, %addr, 10 :: (store (s64))
204+
SD %x_9_1, %addr, 9 :: (store (s64))
205+
SD %x_8_1, %addr, 8 :: (store (s64))
206+
SD %x_7_1, %addr, 7 :: (store (s64))
207+
SD %x_6_1, %addr, 6 :: (store (s64))
208+
SD %x_5_1, %addr, 5 :: (store (s64))
209+
SD %x_4_1, %addr, 4 :: (store (s64))
210+
SD %x_3_1, %addr, 3 :: (store (s64))
211+
SD %x_2_1, %addr, 2 :: (store (s64))
212+
SD %x_1_1, %addr, 1 :: (store (s64))
213+
SD %x_0_1, %addr, 0 :: (store (s64))
214+
215+
%use_y:gpr = ADDI %y, -2
216+
%z:gpr = ADD %use_y, %invariant
217+
%i_dec:gpr = ADD %i, %z
218+
BEQ %i_dec, %zero, %bb.1
219+
PseudoBR %bb.2
220+
221+
bb.2:
222+
PseudoRET
223+
...

0 commit comments

Comments
 (0)