@@ -232,6 +232,69 @@ define i64 @load_i64(ptr %p) {
232
232
ret i64 %res
233
233
}
234
234
235
+ define i64 @load_i64_align2 (ptr %p ) {
236
+ ; RV32I-LABEL: load_i64_align2:
237
+ ; RV32I: # %bb.0:
238
+ ; RV32I-NEXT: lhu a1, 2(a0)
239
+ ; RV32I-NEXT: lhu a2, 0(a0)
240
+ ; RV32I-NEXT: lhu a3, 6(a0)
241
+ ; RV32I-NEXT: lhu a4, 4(a0)
242
+ ; RV32I-NEXT: slli a0, a1, 16
243
+ ; RV32I-NEXT: or a0, a0, a2
244
+ ; RV32I-NEXT: slli a1, a3, 16
245
+ ; RV32I-NEXT: or a1, a1, a4
246
+ ; RV32I-NEXT: ret
247
+ ;
248
+ ; RV64I-LABEL: load_i64_align2:
249
+ ; RV64I: # %bb.0:
250
+ ; RV64I-NEXT: lhu a1, 2(a0)
251
+ ; RV64I-NEXT: lhu a2, 0(a0)
252
+ ; RV64I-NEXT: lhu a3, 4(a0)
253
+ ; RV64I-NEXT: lhu a0, 6(a0)
254
+ ; RV64I-NEXT: slli a1, a1, 16
255
+ ; RV64I-NEXT: or a1, a1, a2
256
+ ; RV64I-NEXT: slli a3, a3, 32
257
+ ; RV64I-NEXT: slli a0, a0, 48
258
+ ; RV64I-NEXT: or a0, a0, a3
259
+ ; RV64I-NEXT: or a0, a0, a1
260
+ ; RV64I-NEXT: ret
261
+ ;
262
+ ; RV32IZBKB-LABEL: load_i64_align2:
263
+ ; RV32IZBKB: # %bb.0:
264
+ ; RV32IZBKB-NEXT: lhu a1, 0(a0)
265
+ ; RV32IZBKB-NEXT: lhu a2, 2(a0)
266
+ ; RV32IZBKB-NEXT: lhu a3, 4(a0)
267
+ ; RV32IZBKB-NEXT: lhu a4, 6(a0)
268
+ ; RV32IZBKB-NEXT: pack a0, a1, a2
269
+ ; RV32IZBKB-NEXT: pack a1, a3, a4
270
+ ; RV32IZBKB-NEXT: ret
271
+ ;
272
+ ; RV64IZBKB-LABEL: load_i64_align2:
273
+ ; RV64IZBKB: # %bb.0:
274
+ ; RV64IZBKB-NEXT: lhu a1, 2(a0)
275
+ ; RV64IZBKB-NEXT: lhu a2, 4(a0)
276
+ ; RV64IZBKB-NEXT: lhu a3, 6(a0)
277
+ ; RV64IZBKB-NEXT: lhu a0, 0(a0)
278
+ ; RV64IZBKB-NEXT: packw a2, a2, a3
279
+ ; RV64IZBKB-NEXT: packw a0, a0, a1
280
+ ; RV64IZBKB-NEXT: pack a0, a0, a2
281
+ ; RV64IZBKB-NEXT: ret
282
+ ;
283
+ ; RV32I-FAST-LABEL: load_i64_align2:
284
+ ; RV32I-FAST: # %bb.0:
285
+ ; RV32I-FAST-NEXT: lw a2, 0(a0)
286
+ ; RV32I-FAST-NEXT: lw a1, 4(a0)
287
+ ; RV32I-FAST-NEXT: mv a0, a2
288
+ ; RV32I-FAST-NEXT: ret
289
+ ;
290
+ ; RV64I-FAST-LABEL: load_i64_align2:
291
+ ; RV64I-FAST: # %bb.0:
292
+ ; RV64I-FAST-NEXT: ld a0, 0(a0)
293
+ ; RV64I-FAST-NEXT: ret
294
+ %res = load i64 , ptr %p , align 2
295
+ ret i64 %res
296
+ }
297
+
235
298
define void @store_i8 (ptr %p , i8 %v ) {
236
299
; ALL-LABEL: store_i8:
237
300
; ALL: # %bb.0:
@@ -569,8 +632,8 @@ define void @store_large_constant(ptr %x) {
569
632
;
570
633
; RV64I-FAST-LABEL: store_large_constant:
571
634
; RV64I-FAST: # %bb.0:
572
- ; RV64I-FAST-NEXT: lui a1, %hi(.LCPI16_0 )
573
- ; RV64I-FAST-NEXT: ld a1, %lo(.LCPI16_0 )(a1)
635
+ ; RV64I-FAST-NEXT: lui a1, %hi(.LCPI17_0 )
636
+ ; RV64I-FAST-NEXT: ld a1, %lo(.LCPI17_0 )(a1)
574
637
; RV64I-FAST-NEXT: sd a1, 0(a0)
575
638
; RV64I-FAST-NEXT: ret
576
639
store i64 18364758544493064720 , ptr %x , align 1
0 commit comments