@@ -493,3 +493,67 @@ entry:
493493 store double %d , ptr %add.ptr , align 8
494494 ret void
495495}
496+
497+ @f = global double 4 .2 , align 16
498+
499+ define double @foo13 (ptr nocapture %p ) nounwind {
500+ ; RV32ZDINX-LABEL: foo13:
501+ ; RV32ZDINX: # %bb.0: # %entry
502+ ; RV32ZDINX-NEXT: addi sp, sp, -16
503+ ; RV32ZDINX-NEXT: lui a0, %hi(f)
504+ ; RV32ZDINX-NEXT: lw a1, %lo(f+8)(a0)
505+ ; RV32ZDINX-NEXT: sw a1, 12(sp)
506+ ; RV32ZDINX-NEXT: lw a0, %lo(f+4)(a0)
507+ ; RV32ZDINX-NEXT: sw a0, 8(sp)
508+ ; RV32ZDINX-NEXT: lw a0, 8(sp)
509+ ; RV32ZDINX-NEXT: lw a1, 12(sp)
510+ ; RV32ZDINX-NEXT: addi sp, sp, 16
511+ ; RV32ZDINX-NEXT: ret
512+ ;
513+ ; RV32ZDINXUALIGNED-LABEL: foo13:
514+ ; RV32ZDINXUALIGNED: # %bb.0: # %entry
515+ ; RV32ZDINXUALIGNED-NEXT: lui a0, %hi(f)
516+ ; RV32ZDINXUALIGNED-NEXT: addi a0, a0, %lo(f)
517+ ; RV32ZDINXUALIGNED-NEXT: lw a1, 8(a0)
518+ ; RV32ZDINXUALIGNED-NEXT: lw a0, 4(a0)
519+ ; RV32ZDINXUALIGNED-NEXT: ret
520+ ;
521+ ; RV64ZDINX-LABEL: foo13:
522+ ; RV64ZDINX: # %bb.0: # %entry
523+ ; RV64ZDINX-NEXT: lui a0, %hi(f)
524+ ; RV64ZDINX-NEXT: lwu a1, %lo(f+8)(a0)
525+ ; RV64ZDINX-NEXT: lwu a0, %lo(f+4)(a0)
526+ ; RV64ZDINX-NEXT: slli a1, a1, 32
527+ ; RV64ZDINX-NEXT: or a0, a1, a0
528+ ; RV64ZDINX-NEXT: ret
529+ entry:
530+ %add.ptr = getelementptr inbounds i8 , ptr @f , i64 4
531+ %0 = load double , ptr %add.ptr , align 4
532+ ret double %0
533+ }
534+
535+ define double @foo14 (ptr nocapture %p ) nounwind {
536+ ; RV32ZDINX-LABEL: foo14:
537+ ; RV32ZDINX: # %bb.0: # %entry
538+ ; RV32ZDINX-NEXT: lui a0, %hi(f)
539+ ; RV32ZDINX-NEXT: lw a1, %lo(f+12)(a0)
540+ ; RV32ZDINX-NEXT: lw a0, %lo(f+8)(a0)
541+ ; RV32ZDINX-NEXT: ret
542+ ;
543+ ; RV32ZDINXUALIGNED-LABEL: foo14:
544+ ; RV32ZDINXUALIGNED: # %bb.0: # %entry
545+ ; RV32ZDINXUALIGNED-NEXT: lui a0, %hi(f)
546+ ; RV32ZDINXUALIGNED-NEXT: lw a1, %lo(f+12)(a0)
547+ ; RV32ZDINXUALIGNED-NEXT: lw a0, %lo(f+8)(a0)
548+ ; RV32ZDINXUALIGNED-NEXT: ret
549+ ;
550+ ; RV64ZDINX-LABEL: foo14:
551+ ; RV64ZDINX: # %bb.0: # %entry
552+ ; RV64ZDINX-NEXT: lui a0, %hi(f)
553+ ; RV64ZDINX-NEXT: ld a0, %lo(f+8)(a0)
554+ ; RV64ZDINX-NEXT: ret
555+ entry:
556+ %add.ptr = getelementptr inbounds i8 , ptr @f , i64 8
557+ %0 = load double , ptr %add.ptr , align 8
558+ ret double %0
559+ }
0 commit comments