xref: /llvm-project/llvm/test/CodeGen/RISCV/make-compressible-rv64.mir (revision ff9af4c43ad71eeba2cabe99609cfaa0fd54c1d0)
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--- |
5
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  }
13
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  }
21
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  }
30
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  }
38
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  }
51
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  }
64
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  }
70
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  }
76
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  }
82
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  }
91
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  }
100
101  attributes #0 = { minsize "target-features"="+c" }
102
103...
104---
105name:            store_common_value
106tracksRegLiveness: true
107body:             |
108  bb.0.entry:
109    liveins: $x10, $x11, $x12
110
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
123
124...
125---
126name:            store_common_ptr
127tracksRegLiveness: true
128body:             |
129  bb.0.entry:
130    liveins: $x16
131
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
150
151...
152---
153name:            store_common_ptr_self
154tracksRegLiveness: true
155body:             |
156  bb.0.entry:
157    liveins: $x16
158
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
175
176...
177---
178name:            load_common_ptr
179tracksRegLiveness: true
180body:             |
181  bb.0.entry:
182    liveins: $x16
183
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
196
197...
198---
199name:            store_large_offset
200tracksRegLiveness: true
201body:             |
202  bb.0.entry:
203    liveins: $x10
204
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
227
228...
229---
230name:            load_large_offset
231tracksRegLiveness: true
232body:             |
233  bb.0.entry:
234    liveins: $x10
235
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
250
251...
252---
253name:            store_common_value_no_opt
254tracksRegLiveness: true
255body:             |
256  bb.0.entry:
257    liveins: $x10
258
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
266
267...
268---
269name:            store_common_ptr_no_opt
270tracksRegLiveness: true
271body:             |
272  bb.0.entry:
273    liveins: $x16
274
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
284
285...
286---
287name:            load_common_ptr_no_opt
288tracksRegLiveness: true
289body:             |
290  bb.0.entry:
291    liveins: $x16
292
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
300
301...
302---
303name:            store_large_offset_no_opt
304tracksRegLiveness: true
305body:             |
306  bb.0.entry:
307    liveins: $x10
308
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
322
323...
324---
325name:            load_large_offset_no_opt
326tracksRegLiveness: true
327body:             |
328  bb.0.entry:
329    liveins: $x10
330
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
340
341...
342