1
1
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2
2
# RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - \
3
- # RUN: | FileCheck %s
3
+ # RUN: | FileCheck %s
4
+ # RUN: llc -mtriple=riscv32 -mattr=+unaligned-scalar-mem -run-pass=legalizer %s -o - \
5
+ # RUN: | FileCheck %s --check-prefix=UNALIGNED
4
6
5
7
---
6
8
name : load_i8
@@ -26,6 +28,14 @@ body: |
26
28
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))
27
29
; CHECK-NEXT: $x10 = COPY [[LOAD]](s32)
28
30
; CHECK-NEXT: PseudoRET implicit $x10
31
+ ;
32
+ ; UNALIGNED-LABEL: name: load_i8
33
+ ; UNALIGNED: liveins: $x10
34
+ ; UNALIGNED-NEXT: {{ $}}
35
+ ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
36
+ ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))
37
+ ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s32)
38
+ ; UNALIGNED-NEXT: PseudoRET implicit $x10
29
39
%0:_(p0) = COPY $x10
30
40
%1:_(s8) = G_LOAD %0(p0) :: (load (s8))
31
41
%2:_(s32) = G_ANYEXT %1(s8)
@@ -57,6 +67,14 @@ body: |
57
67
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s16))
58
68
; CHECK-NEXT: $x10 = COPY [[LOAD]](s32)
59
69
; CHECK-NEXT: PseudoRET implicit $x10
70
+ ;
71
+ ; UNALIGNED-LABEL: name: load_i16
72
+ ; UNALIGNED: liveins: $x10
73
+ ; UNALIGNED-NEXT: {{ $}}
74
+ ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
75
+ ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s16))
76
+ ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s32)
77
+ ; UNALIGNED-NEXT: PseudoRET implicit $x10
60
78
%0:_(p0) = COPY $x10
61
79
%1:_(s16) = G_LOAD %0(p0) :: (load (s16))
62
80
%2:_(s32) = G_ANYEXT %1(s16)
@@ -87,6 +105,14 @@ body: |
87
105
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32))
88
106
; CHECK-NEXT: $x10 = COPY [[LOAD]](s32)
89
107
; CHECK-NEXT: PseudoRET implicit $x10
108
+ ;
109
+ ; UNALIGNED-LABEL: name: load_i32
110
+ ; UNALIGNED: liveins: $x10
111
+ ; UNALIGNED-NEXT: {{ $}}
112
+ ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
113
+ ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32))
114
+ ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s32)
115
+ ; UNALIGNED-NEXT: PseudoRET implicit $x10
90
116
%0:_(p0) = COPY $x10
91
117
%1:_(s32) = G_LOAD %0(p0) :: (load (s32))
92
118
$x10 = COPY %1(s32)
@@ -122,6 +148,18 @@ body: |
122
148
; CHECK-NEXT: $x10 = COPY [[LOAD]](s32)
123
149
; CHECK-NEXT: $x11 = COPY [[LOAD1]](s32)
124
150
; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
151
+ ;
152
+ ; UNALIGNED-LABEL: name: load_i64
153
+ ; UNALIGNED: liveins: $x10
154
+ ; UNALIGNED-NEXT: {{ $}}
155
+ ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
156
+ ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32), align 8)
157
+ ; UNALIGNED-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
158
+ ; UNALIGNED-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
159
+ ; UNALIGNED-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s32) from unknown-address + 4)
160
+ ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s32)
161
+ ; UNALIGNED-NEXT: $x11 = COPY [[LOAD1]](s32)
162
+ ; UNALIGNED-NEXT: PseudoRET implicit $x10, implicit $x11
125
163
%0:_(p0) = COPY $x10
126
164
%1:_(s64) = G_LOAD %0(p0) :: (load (s64))
127
165
%2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %1(s64)
@@ -153,6 +191,14 @@ body: |
153
191
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[COPY]](p0) :: (load (p0), align 8)
154
192
; CHECK-NEXT: $x10 = COPY [[LOAD]](p0)
155
193
; CHECK-NEXT: PseudoRET implicit $x10
194
+ ;
195
+ ; UNALIGNED-LABEL: name: load_ptr
196
+ ; UNALIGNED: liveins: $x10
197
+ ; UNALIGNED-NEXT: {{ $}}
198
+ ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
199
+ ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[COPY]](p0) :: (load (p0), align 8)
200
+ ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](p0)
201
+ ; UNALIGNED-NEXT: PseudoRET implicit $x10
156
202
%0:_(p0) = COPY $x10
157
203
%1:_(p0) = G_LOAD %0(p0) :: (load (p0), align 8)
158
204
$x10 = COPY %1(p0)
@@ -189,6 +235,14 @@ body: |
189
235
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[ZEXTLOAD]]
190
236
; CHECK-NEXT: $x10 = COPY [[OR]](s32)
191
237
; CHECK-NEXT: PseudoRET implicit $x10
238
+ ;
239
+ ; UNALIGNED-LABEL: name: load_i16_unaligned
240
+ ; UNALIGNED: liveins: $x10
241
+ ; UNALIGNED-NEXT: {{ $}}
242
+ ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
243
+ ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s16), align 1)
244
+ ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s32)
245
+ ; UNALIGNED-NEXT: PseudoRET implicit $x10
192
246
%0:_(p0) = COPY $x10
193
247
%1:_(s16) = G_LOAD %0(p0) :: (load (s16), align 1)
194
248
%2:_(s32) = G_ANYEXT %1(s16)
@@ -237,6 +291,14 @@ body: |
237
291
; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s32) = G_OR [[SHL2]], [[OR]]
238
292
; CHECK-NEXT: $x10 = COPY [[OR2]](s32)
239
293
; CHECK-NEXT: PseudoRET implicit $x10
294
+ ;
295
+ ; UNALIGNED-LABEL: name: load_i32_unaligned
296
+ ; UNALIGNED: liveins: $x10
297
+ ; UNALIGNED-NEXT: {{ $}}
298
+ ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
299
+ ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32), align 1)
300
+ ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s32)
301
+ ; UNALIGNED-NEXT: PseudoRET implicit $x10
240
302
%0:_(p0) = COPY $x10
241
303
%1:_(s32) = G_LOAD %0(p0) :: (load (s32), align 1)
242
304
$x10 = COPY %1(s32)
@@ -272,6 +334,14 @@ body: |
272
334
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[ZEXTLOAD]]
273
335
; CHECK-NEXT: $x10 = COPY [[OR]](s32)
274
336
; CHECK-NEXT: PseudoRET implicit $x10
337
+ ;
338
+ ; UNALIGNED-LABEL: name: load_i32_align2
339
+ ; UNALIGNED: liveins: $x10
340
+ ; UNALIGNED-NEXT: {{ $}}
341
+ ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
342
+ ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32), align 2)
343
+ ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s32)
344
+ ; UNALIGNED-NEXT: PseudoRET implicit $x10
275
345
%0:_(p0) = COPY $x10
276
346
%1:_(s32) = G_LOAD %0(p0) :: (load (s32), align 2)
277
347
$x10 = COPY %1(s32)
@@ -343,6 +413,18 @@ body: |
343
413
; CHECK-NEXT: $x10 = COPY [[OR2]](s32)
344
414
; CHECK-NEXT: $x11 = COPY [[OR5]](s32)
345
415
; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
416
+ ;
417
+ ; UNALIGNED-LABEL: name: load_i64_unaligned
418
+ ; UNALIGNED: liveins: $x10
419
+ ; UNALIGNED-NEXT: {{ $}}
420
+ ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
421
+ ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32), align 1)
422
+ ; UNALIGNED-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
423
+ ; UNALIGNED-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
424
+ ; UNALIGNED-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s32) from unknown-address + 4, align 1)
425
+ ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s32)
426
+ ; UNALIGNED-NEXT: $x11 = COPY [[LOAD1]](s32)
427
+ ; UNALIGNED-NEXT: PseudoRET implicit $x10, implicit $x11
346
428
%0:_(p0) = COPY $x10
347
429
%1:_(s64) = G_LOAD %0(p0) :: (load (s64), align 1)
348
430
%2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %1(s64)
0 commit comments