[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / llvm / test / CodeGen / RISCV / make-compressible-rv64.mir
blobed740d545c1da9dcdc4ca4d99e9625bd96398ac7
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -o - %s -mtriple=riscv64 -mattr=+c -simplify-mir \
3 # RUN:   -run-pass=riscv-make-compressible | FileCheck %s
4 --- |
6   define void @store_common_value(ptr %a, ptr %b, ptr %c) #0 {
7   entry:
8     store i64 0, ptr %a, align 8
9     store i64 0, ptr %b, align 8
10     store i64 0, ptr %c, align 8
11     ret void
12   }
14   define void @store_common_ptr(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, ptr %p) #0 {
15   entry:
16     store volatile i64 1, ptr %p, align 8
17     store volatile i64 3, ptr %p, align 8
18     store volatile i64 5, ptr %p, align 8
19     ret void
20   }
22   define void @store_common_ptr_self(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, ptr %p) #0 {
23   entry:
24     %q = bitcast ptr %p to ptr
25     store volatile i64 1, ptr %p, align 8
26     store volatile i64 3, ptr %p, align 8
27     store volatile ptr %p, ptr %q, align 8
28     ret void
29   }
31   define void @load_common_ptr(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, ptr %p) #0 {
32   entry:
33     %g = load volatile i64, ptr %p, align 8
34     %h = load volatile i64, ptr %p, align 8
35     %i = load volatile i64, ptr %p, align 8
36     ret void
37   }
39   define void @store_large_offset(ptr %p) #0 {
40   entry:
41     %0 = getelementptr inbounds i64, ptr %p, i64 100
42     store volatile i64 1, ptr %0, align 8
43     %1 = getelementptr inbounds i64, ptr %p, i64 101
44     store volatile i64 3, ptr %1, align 8
45     %2 = getelementptr inbounds i64, ptr %p, i64 102
46     store volatile i64 5, ptr %2, align 8
47     %3 = getelementptr inbounds i64, ptr %p, i64 103
48     store volatile i64 7, ptr %3, align 8
49     ret void
50   }
52   define void @load_large_offset(ptr %p) #0 {
53   entry:
54     %0 = getelementptr inbounds i64, ptr %p, i64 100
55     %a = load volatile i64, ptr %0, align 8
56     %1 = getelementptr inbounds i64, ptr %p, i64 101
57     %b = load volatile i64, ptr %1, align 8
58     %2 = getelementptr inbounds i64, ptr %p, i64 102
59     %c = load volatile i64, ptr %2, align 8
60     %3 = getelementptr inbounds i64, ptr %p, i64 103
61     %d = load volatile i64, ptr %3, align 8
62     ret void
63   }
65   define void @store_common_value_no_opt(ptr %a) #0 {
66   entry:
67     store i64 0, ptr %a, align 8
68     ret void
69   }
71   define void @store_common_ptr_no_opt(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, ptr %p) #0 {
72   entry:
73     store volatile i64 1, ptr %p, align 8
74     ret void
75   }
77   define void @load_common_ptr_no_opt(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, ptr %p) #0 {
78   entry:
79     %g = load volatile i64, ptr %p, align 8
80     ret void
81   }
83   define void @store_large_offset_no_opt(ptr %p) #0 {
84   entry:
85     %0 = getelementptr inbounds i64, ptr %p, i64 100
86     store volatile i64 1, ptr %0, align 8
87     %1 = getelementptr inbounds i64, ptr %p, i64 101
88     store volatile i64 3, ptr %1, align 8
89     ret void
90   }
92   define void @load_large_offset_no_opt(ptr %p) #0 {
93   entry:
94     %0 = getelementptr inbounds i64, ptr %p, i64 100
95     %a = load volatile i64, ptr %0, align 8
96     %1 = getelementptr inbounds i64, ptr %p, i64 101
97     %b = load volatile i64, ptr %1, align 8
98     ret void
99   }
101   attributes #0 = { minsize "target-features"="+c" }
105 name:            store_common_value
106 tracksRegLiveness: true
107 body:             |
108   bb.0.entry:
109     liveins: $x10, $x11, $x12
111     ; CHECK-LABEL: name: store_common_value
112     ; CHECK: liveins: $x10, $x11, $x12
113     ; CHECK-NEXT: {{  $}}
114     ; CHECK-NEXT: $x13 = ADDI $x0, 0
115     ; CHECK-NEXT: SD $x13, killed renamable $x10, 0 :: (store (s64) into %ir.a)
116     ; CHECK-NEXT: SD $x13, killed renamable $x11, 0 :: (store (s64) into %ir.b)
117     ; CHECK-NEXT: SD $x13, killed renamable $x12, 0 :: (store (s64) into %ir.c)
118     ; CHECK-NEXT: PseudoRET
119     SD $x0, killed renamable $x10, 0 :: (store (s64) into %ir.a)
120     SD $x0, killed renamable $x11, 0 :: (store (s64) into %ir.b)
121     SD $x0, killed renamable $x12, 0 :: (store (s64) into %ir.c)
122     PseudoRET
126 name:            store_common_ptr
127 tracksRegLiveness: true
128 body:             |
129   bb.0.entry:
130     liveins: $x16
132     ; CHECK-LABEL: name: store_common_ptr
133     ; CHECK: liveins: $x16
134     ; CHECK-NEXT: {{  $}}
135     ; CHECK-NEXT: renamable $x10 = ADDI $x0, 1
136     ; CHECK-NEXT: $x11 = ADDI $x16, 0
137     ; CHECK-NEXT: SD killed renamable $x10, $x11, 0 :: (volatile store (s64) into %ir.p)
138     ; CHECK-NEXT: renamable $x10 = ADDI $x0, 3
139     ; CHECK-NEXT: SD killed renamable $x10, $x11, 0 :: (volatile store (s64) into %ir.p)
140     ; CHECK-NEXT: renamable $x10 = ADDI $x0, 5
141     ; CHECK-NEXT: SD killed renamable $x10, killed $x11, 0 :: (volatile store (s64) into %ir.p)
142     ; CHECK-NEXT: PseudoRET
143     renamable $x10 = ADDI $x0, 1
144     SD killed renamable $x10, renamable $x16, 0 :: (volatile store (s64) into %ir.p)
145     renamable $x10 = ADDI $x0, 3
146     SD killed renamable $x10, renamable $x16, 0 :: (volatile store (s64) into %ir.p)
147     renamable $x10 = ADDI $x0, 5
148     SD killed renamable $x10, killed renamable $x16, 0 :: (volatile store (s64) into %ir.p)
149     PseudoRET
153 name:            store_common_ptr_self
154 tracksRegLiveness: true
155 body:             |
156   bb.0.entry:
157     liveins: $x16
159     ; CHECK-LABEL: name: store_common_ptr_self
160     ; CHECK: liveins: $x16
161     ; CHECK-NEXT: {{  $}}
162     ; CHECK-NEXT: renamable $x10 = ADDI $x0, 1
163     ; CHECK-NEXT: $x11 = ADDI $x16, 0
164     ; CHECK-NEXT: SD killed renamable $x10, $x11, 0 :: (volatile store (s64) into %ir.p)
165     ; CHECK-NEXT: renamable $x10 = ADDI $x0, 3
166     ; CHECK-NEXT: SD killed renamable $x10, $x11, 0 :: (volatile store (s64) into %ir.p)
167     ; CHECK-NEXT: SD killed $x11, $x11, 0 :: (volatile store (s64) into %ir.q)
168     ; CHECK-NEXT: PseudoRET
169     renamable $x10 = ADDI $x0, 1
170     SD killed renamable $x10, renamable $x16, 0 :: (volatile store (s64) into %ir.p)
171     renamable $x10 = ADDI $x0, 3
172     SD killed renamable $x10, renamable $x16, 0 :: (volatile store (s64) into %ir.p)
173     SD killed renamable $x16, renamable $x16, 0 :: (volatile store (s64) into %ir.q)
174     PseudoRET
178 name:            load_common_ptr
179 tracksRegLiveness: true
180 body:             |
181   bb.0.entry:
182     liveins: $x16
184     ; CHECK-LABEL: name: load_common_ptr
185     ; CHECK: liveins: $x16
186     ; CHECK-NEXT: {{  $}}
187     ; CHECK-NEXT: $x11 = ADDI $x16, 0
188     ; CHECK-NEXT: dead renamable $x10 = LD $x11, 0 :: (volatile load (s64) from %ir.p)
189     ; CHECK-NEXT: dead renamable $x10 = LD $x11, 0 :: (volatile load (s64) from %ir.p)
190     ; CHECK-NEXT: dead renamable $x10 = LD killed $x11, 0 :: (volatile load (s64) from %ir.p)
191     ; CHECK-NEXT: PseudoRET
192     dead renamable $x10 = LD renamable $x16, 0 :: (volatile load (s64) from %ir.p)
193     dead renamable $x10 = LD renamable $x16, 0 :: (volatile load (s64) from %ir.p)
194     dead renamable $x10 = LD killed renamable $x16, 0 :: (volatile load (s64) from %ir.p)
195     PseudoRET
199 name:            store_large_offset
200 tracksRegLiveness: true
201 body:             |
202   bb.0.entry:
203     liveins: $x10
205     ; CHECK-LABEL: name: store_large_offset
206     ; CHECK: liveins: $x10
207     ; CHECK-NEXT: {{  $}}
208     ; CHECK-NEXT: renamable $x11 = ADDI $x0, 1
209     ; CHECK-NEXT: $x12 = ADDI $x10, 768
210     ; CHECK-NEXT: SD killed renamable $x11, $x12, 32 :: (volatile store (s64) into %ir.0)
211     ; CHECK-NEXT: renamable $x11 = ADDI $x0, 3
212     ; CHECK-NEXT: SD killed renamable $x11, $x12, 40 :: (volatile store (s64) into %ir.1)
213     ; CHECK-NEXT: renamable $x11 = ADDI $x0, 5
214     ; CHECK-NEXT: SD killed renamable $x11, $x12, 48 :: (volatile store (s64) into %ir.2)
215     ; CHECK-NEXT: renamable $x11 = ADDI $x0, 7
216     ; CHECK-NEXT: SD killed renamable $x11, killed $x12, 56 :: (volatile store (s64) into %ir.3)
217     ; CHECK-NEXT: PseudoRET
218     renamable $x11 = ADDI $x0, 1
219     SD killed renamable $x11, renamable $x10, 800 :: (volatile store (s64) into %ir.0)
220     renamable $x11 = ADDI $x0, 3
221     SD killed renamable $x11, renamable $x10, 808 :: (volatile store (s64) into %ir.1)
222     renamable $x11 = ADDI $x0, 5
223     SD killed renamable $x11, renamable $x10, 816 :: (volatile store (s64) into %ir.2)
224     renamable $x11 = ADDI $x0, 7
225     SD killed renamable $x11, killed renamable $x10, 824 :: (volatile store (s64) into %ir.3)
226     PseudoRET
230 name:            load_large_offset
231 tracksRegLiveness: true
232 body:             |
233   bb.0.entry:
234     liveins: $x10
236     ; CHECK-LABEL: name: load_large_offset
237     ; CHECK: liveins: $x10
238     ; CHECK-NEXT: {{  $}}
239     ; CHECK-NEXT: $x12 = ADDI $x10, 768
240     ; CHECK-NEXT: dead renamable $x11 = LD $x12, 32 :: (volatile load (s64) from %ir.0)
241     ; CHECK-NEXT: dead renamable $x11 = LD $x12, 40 :: (volatile load (s64) from %ir.1)
242     ; CHECK-NEXT: dead renamable $x11 = LD $x12, 48 :: (volatile load (s64) from %ir.2)
243     ; CHECK-NEXT: dead renamable $x10 = LD killed $x12, 56 :: (volatile load (s64) from %ir.3)
244     ; CHECK-NEXT: PseudoRET
245     dead renamable $x11 = LD renamable $x10, 800 :: (volatile load (s64) from %ir.0)
246     dead renamable $x11 = LD renamable $x10, 808 :: (volatile load (s64) from %ir.1)
247     dead renamable $x11 = LD renamable $x10, 816 :: (volatile load (s64) from %ir.2)
248     dead renamable $x10 = LD killed renamable $x10, 824 :: (volatile load (s64) from %ir.3)
249     PseudoRET
253 name:            store_common_value_no_opt
254 tracksRegLiveness: true
255 body:             |
256   bb.0.entry:
257     liveins: $x10
259     ; CHECK-LABEL: name: store_common_value_no_opt
260     ; CHECK: liveins: $x10
261     ; CHECK-NEXT: {{  $}}
262     ; CHECK-NEXT: SD $x0, killed renamable $x10, 0 :: (store (s64) into %ir.a)
263     ; CHECK-NEXT: PseudoRET
264     SD $x0, killed renamable $x10, 0 :: (store (s64) into %ir.a)
265     PseudoRET
269 name:            store_common_ptr_no_opt
270 tracksRegLiveness: true
271 body:             |
272   bb.0.entry:
273     liveins: $x16
275     ; CHECK-LABEL: name: store_common_ptr_no_opt
276     ; CHECK: liveins: $x16
277     ; CHECK-NEXT: {{  $}}
278     ; CHECK-NEXT: renamable $x10 = ADDI $x0, 1
279     ; CHECK-NEXT: SD killed renamable $x10, killed renamable $x16, 0 :: (volatile store (s64) into %ir.p)
280     ; CHECK-NEXT: PseudoRET
281     renamable $x10 = ADDI $x0, 1
282     SD killed renamable $x10, killed renamable $x16, 0 :: (volatile store (s64) into %ir.p)
283     PseudoRET
287 name:            load_common_ptr_no_opt
288 tracksRegLiveness: true
289 body:             |
290   bb.0.entry:
291     liveins: $x16
293     ; CHECK-LABEL: name: load_common_ptr_no_opt
294     ; CHECK: liveins: $x16
295     ; CHECK-NEXT: {{  $}}
296     ; CHECK-NEXT: dead renamable $x10 = LD killed renamable $x16, 0 :: (volatile load (s64) from %ir.p)
297     ; CHECK-NEXT: PseudoRET
298     dead renamable $x10 = LD killed renamable $x16, 0 :: (volatile load (s64) from %ir.p)
299     PseudoRET
303 name:            store_large_offset_no_opt
304 tracksRegLiveness: true
305 body:             |
306   bb.0.entry:
307     liveins: $x10
309     ; CHECK-LABEL: name: store_large_offset_no_opt
310     ; CHECK: liveins: $x10
311     ; CHECK-NEXT: {{  $}}
312     ; CHECK-NEXT: renamable $x11 = ADDI $x0, 1
313     ; CHECK-NEXT: SD killed renamable $x11, renamable $x10, 800 :: (volatile store (s64) into %ir.0)
314     ; CHECK-NEXT: renamable $x11 = ADDI $x0, 3
315     ; CHECK-NEXT: SD killed renamable $x11, killed renamable $x10, 808 :: (volatile store (s64) into %ir.1)
316     ; CHECK-NEXT: PseudoRET
317     renamable $x11 = ADDI $x0, 1
318     SD killed renamable $x11, renamable $x10, 800 :: (volatile store (s64) into %ir.0)
319     renamable $x11 = ADDI $x0, 3
320     SD killed renamable $x11, killed renamable $x10, 808 :: (volatile store (s64) into %ir.1)
321     PseudoRET
325 name:            load_large_offset_no_opt
326 tracksRegLiveness: true
327 body:             |
328   bb.0.entry:
329     liveins: $x10
331     ; CHECK-LABEL: name: load_large_offset_no_opt
332     ; CHECK: liveins: $x10
333     ; CHECK-NEXT: {{  $}}
334     ; CHECK-NEXT: dead renamable $x11 = LD renamable $x10, 800 :: (volatile load (s64) from %ir.0)
335     ; CHECK-NEXT: dead renamable $x10 = LD killed renamable $x10, 808 :: (volatile load (s64) from %ir.1)
336     ; CHECK-NEXT: PseudoRET
337     dead renamable $x11 = LD renamable $x10, 800 :: (volatile load (s64) from %ir.0)
338     dead renamable $x10 = LD killed renamable $x10, 808 :: (volatile load (s64) from %ir.1)
339     PseudoRET