11# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
22# 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
46
57---
68name : load_i8
@@ -26,6 +28,14 @@ body: |
2628 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))
2729 ; CHECK-NEXT: $x10 = COPY [[LOAD]](s32)
2830 ; 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
2939 %0:_(p0) = COPY $x10
3040 %1:_(s8) = G_LOAD %0(p0) :: (load (s8))
3141 %2:_(s32) = G_ANYEXT %1(s8)
@@ -57,6 +67,14 @@ body: |
5767 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s16))
5868 ; CHECK-NEXT: $x10 = COPY [[LOAD]](s32)
5969 ; 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
6078 %0:_(p0) = COPY $x10
6179 %1:_(s16) = G_LOAD %0(p0) :: (load (s16))
6280 %2:_(s32) = G_ANYEXT %1(s16)
@@ -87,6 +105,14 @@ body: |
87105 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32))
88106 ; CHECK-NEXT: $x10 = COPY [[LOAD]](s32)
89107 ; 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
90116 %0:_(p0) = COPY $x10
91117 %1:_(s32) = G_LOAD %0(p0) :: (load (s32))
92118 $x10 = COPY %1(s32)
@@ -122,6 +148,18 @@ body: |
122148 ; CHECK-NEXT: $x10 = COPY [[LOAD]](s32)
123149 ; CHECK-NEXT: $x11 = COPY [[LOAD1]](s32)
124150 ; 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
125163 %0:_(p0) = COPY $x10
126164 %1:_(s64) = G_LOAD %0(p0) :: (load (s64))
127165 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %1(s64)
@@ -153,6 +191,14 @@ body: |
153191 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[COPY]](p0) :: (load (p0), align 8)
154192 ; CHECK-NEXT: $x10 = COPY [[LOAD]](p0)
155193 ; 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
156202 %0:_(p0) = COPY $x10
157203 %1:_(p0) = G_LOAD %0(p0) :: (load (p0), align 8)
158204 $x10 = COPY %1(p0)
@@ -189,6 +235,14 @@ body: |
189235 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[ZEXTLOAD]]
190236 ; CHECK-NEXT: $x10 = COPY [[OR]](s32)
191237 ; 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
192246 %0:_(p0) = COPY $x10
193247 %1:_(s16) = G_LOAD %0(p0) :: (load (s16), align 1)
194248 %2:_(s32) = G_ANYEXT %1(s16)
@@ -237,6 +291,14 @@ body: |
237291 ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s32) = G_OR [[SHL2]], [[OR]]
238292 ; CHECK-NEXT: $x10 = COPY [[OR2]](s32)
239293 ; 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
240302 %0:_(p0) = COPY $x10
241303 %1:_(s32) = G_LOAD %0(p0) :: (load (s32), align 1)
242304 $x10 = COPY %1(s32)
@@ -272,6 +334,14 @@ body: |
272334 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[ZEXTLOAD]]
273335 ; CHECK-NEXT: $x10 = COPY [[OR]](s32)
274336 ; 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
275345 %0:_(p0) = COPY $x10
276346 %1:_(s32) = G_LOAD %0(p0) :: (load (s32), align 2)
277347 $x10 = COPY %1(s32)
@@ -343,6 +413,18 @@ body: |
343413 ; CHECK-NEXT: $x10 = COPY [[OR2]](s32)
344414 ; CHECK-NEXT: $x11 = COPY [[OR5]](s32)
345415 ; 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
346428 %0:_(p0) = COPY $x10
347429 %1:_(s64) = G_LOAD %0(p0) :: (load (s64), align 1)
348430 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %1(s64)
0 commit comments