xref: /llvm-project/llvm/test/CodeGen/RISCV/zdinx-boundary-check.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
18b90f8e0SShao-Ce SUN; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
28b90f8e0SShao-Ce SUN; RUN: llc -mtriple=riscv32 -mattr=+zdinx -verify-machineinstrs < %s \
38b90f8e0SShao-Ce SUN; RUN:   -target-abi=ilp32 | FileCheck -check-prefix=RV32ZDINX %s
45b41eb3aSCraig Topper; RUN: llc -mtriple=riscv32 -mattr=+zdinx,+unaligned-scalar-mem -verify-machineinstrs < %s \
55b41eb3aSCraig Topper; RUN:   -target-abi=ilp32 | FileCheck -check-prefix=RV32ZDINXUALIGNED %s
68b90f8e0SShao-Ce SUN; RUN: llc -mtriple=riscv64 -mattr=+zdinx -verify-machineinstrs < %s \
78b90f8e0SShao-Ce SUN; RUN:   -target-abi=lp64 | FileCheck -check-prefix=RV64ZDINX %s
88b90f8e0SShao-Ce SUN
9216e2820SShao-Ce SUNdefine void @foo(ptr nocapture %p, double %d) nounwind {
108b90f8e0SShao-Ce SUN; RV32ZDINX-LABEL: foo:
118b90f8e0SShao-Ce SUN; RV32ZDINX:       # %bb.0: # %entry
12576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a3, a2
138b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    addi a0, a0, 2047
14576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a2, a1
158b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    sw a2, -3(a0)
168b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    sw a3, 1(a0)
178b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    ret
188b90f8e0SShao-Ce SUN;
195b41eb3aSCraig Topper; RV32ZDINXUALIGNED-LABEL: foo:
205b41eb3aSCraig Topper; RV32ZDINXUALIGNED:       # %bb.0: # %entry
215b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    mv a3, a2
225b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi a0, a0, 2047
235b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    mv a2, a1
245b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a2, -3(a0)
255b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a3, 1(a0)
265b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    ret
275b41eb3aSCraig Topper;
288b90f8e0SShao-Ce SUN; RV64ZDINX-LABEL: foo:
298b90f8e0SShao-Ce SUN; RV64ZDINX:       # %bb.0: # %entry
308b90f8e0SShao-Ce SUN; RV64ZDINX-NEXT:    sd a1, 2044(a0)
318b90f8e0SShao-Ce SUN; RV64ZDINX-NEXT:    ret
328b90f8e0SShao-Ce SUNentry:
338b90f8e0SShao-Ce SUN  %add.ptr = getelementptr inbounds i8, ptr %p, i64 2044
348b90f8e0SShao-Ce SUN  store double %d, ptr %add.ptr, align 8
358b90f8e0SShao-Ce SUN  ret void
368b90f8e0SShao-Ce SUN}
378b90f8e0SShao-Ce SUN
38216e2820SShao-Ce SUNdefine void @foo2(ptr nocapture %p, double %d) nounwind {
398b90f8e0SShao-Ce SUN; RV32ZDINX-LABEL: foo2:
408b90f8e0SShao-Ce SUN; RV32ZDINX:       # %bb.0: # %entry
41576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a3, a2
42*9122c523SPengcheng Wang; RV32ZDINX-NEXT:    addi a0, a0, 2047
43576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a2, a1
448b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    fadd.d a2, a2, a2
458b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    sw a2, -3(a0)
468b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    sw a3, 1(a0)
478b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    ret
488b90f8e0SShao-Ce SUN;
495b41eb3aSCraig Topper; RV32ZDINXUALIGNED-LABEL: foo2:
505b41eb3aSCraig Topper; RV32ZDINXUALIGNED:       # %bb.0: # %entry
515b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    mv a3, a2
52*9122c523SPengcheng Wang; RV32ZDINXUALIGNED-NEXT:    addi a0, a0, 2047
535b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    mv a2, a1
545b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    fadd.d a2, a2, a2
555b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a2, -3(a0)
565b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a3, 1(a0)
575b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    ret
585b41eb3aSCraig Topper;
598b90f8e0SShao-Ce SUN; RV64ZDINX-LABEL: foo2:
608b90f8e0SShao-Ce SUN; RV64ZDINX:       # %bb.0: # %entry
618b90f8e0SShao-Ce SUN; RV64ZDINX-NEXT:    fadd.d a1, a1, a1
628b90f8e0SShao-Ce SUN; RV64ZDINX-NEXT:    sd a1, 2044(a0)
638b90f8e0SShao-Ce SUN; RV64ZDINX-NEXT:    ret
648b90f8e0SShao-Ce SUNentry:
658b90f8e0SShao-Ce SUN  %a = fadd double %d, %d
668b90f8e0SShao-Ce SUN  %add.ptr = getelementptr inbounds i8, ptr %p, i64 2044
678b90f8e0SShao-Ce SUN  store double %a, ptr %add.ptr, align 8
688b90f8e0SShao-Ce SUN  ret void
698b90f8e0SShao-Ce SUN}
708b90f8e0SShao-Ce SUN
718b90f8e0SShao-Ce SUN@d = global double 4.2, align 8
728b90f8e0SShao-Ce SUN
73216e2820SShao-Ce SUNdefine void @foo3(ptr nocapture %p) nounwind {
748b90f8e0SShao-Ce SUN; RV32ZDINX-LABEL: foo3:
758b90f8e0SShao-Ce SUN; RV32ZDINX:       # %bb.0: # %entry
768b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    lui a1, %hi(d)
778b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    lw a2, %lo(d)(a1)
788b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    lw a3, %lo(d+4)(a1)
798b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    addi a0, a0, 2047
808b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    sw a2, -3(a0)
818b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    sw a3, 1(a0)
828b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    ret
838b90f8e0SShao-Ce SUN;
845b41eb3aSCraig Topper; RV32ZDINXUALIGNED-LABEL: foo3:
855b41eb3aSCraig Topper; RV32ZDINXUALIGNED:       # %bb.0: # %entry
865b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lui a1, %hi(d)
875b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lw a2, %lo(d)(a1)
885b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lw a3, %lo(d+4)(a1)
895b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi a0, a0, 2047
905b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a2, -3(a0)
915b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a3, 1(a0)
925b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    ret
935b41eb3aSCraig Topper;
948b90f8e0SShao-Ce SUN; RV64ZDINX-LABEL: foo3:
958b90f8e0SShao-Ce SUN; RV64ZDINX:       # %bb.0: # %entry
968b90f8e0SShao-Ce SUN; RV64ZDINX-NEXT:    lui a1, %hi(d)
978b90f8e0SShao-Ce SUN; RV64ZDINX-NEXT:    ld a1, %lo(d)(a1)
988b90f8e0SShao-Ce SUN; RV64ZDINX-NEXT:    sd a1, 2044(a0)
998b90f8e0SShao-Ce SUN; RV64ZDINX-NEXT:    ret
1008b90f8e0SShao-Ce SUNentry:
1018b90f8e0SShao-Ce SUN  %0 = load double, ptr @d, align 8
1028b90f8e0SShao-Ce SUN  %add.ptr = getelementptr inbounds i8, ptr %p, i64 2044
1038b90f8e0SShao-Ce SUN  store double %0, ptr %add.ptr, align 8
1048b90f8e0SShao-Ce SUN  ret void
1058b90f8e0SShao-Ce SUN}
1068b90f8e0SShao-Ce SUN
107216e2820SShao-Ce SUNdefine void @foo4(ptr %p) nounwind {
1088b90f8e0SShao-Ce SUN; RV32ZDINX-LABEL: foo4:
1098b90f8e0SShao-Ce SUN; RV32ZDINX:       # %bb.0: # %entry
1108b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    addi sp, sp, -16
1115f73d2b7SYunze Zhu; RV32ZDINX-NEXT:    addi a1, a0, 2047
1125f73d2b7SYunze Zhu; RV32ZDINX-NEXT:    lw a2, -3(a1)
1135f73d2b7SYunze Zhu; RV32ZDINX-NEXT:    lw a3, 1(a1)
1148b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    sw a0, 8(sp)
1155f73d2b7SYunze Zhu; RV32ZDINX-NEXT:    lui a0, %hi(d)
1165f73d2b7SYunze Zhu; RV32ZDINX-NEXT:    sw a2, %lo(d)(a0)
1175f73d2b7SYunze Zhu; RV32ZDINX-NEXT:    sw a3, %lo(d+4)(a0)
1188b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    addi sp, sp, 16
1198b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    ret
1208b90f8e0SShao-Ce SUN;
1215b41eb3aSCraig Topper; RV32ZDINXUALIGNED-LABEL: foo4:
1225b41eb3aSCraig Topper; RV32ZDINXUALIGNED:       # %bb.0: # %entry
1235b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi sp, sp, -16
1245b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi a1, a0, 2047
1255b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lw a2, -3(a1)
1265b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lw a3, 1(a1)
1275b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a0, 8(sp)
1285b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lui a0, %hi(d)
1295b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a2, %lo(d)(a0)
1305b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a3, %lo(d+4)(a0)
1315b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi sp, sp, 16
1325b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    ret
1335b41eb3aSCraig Topper;
1348b90f8e0SShao-Ce SUN; RV64ZDINX-LABEL: foo4:
1358b90f8e0SShao-Ce SUN; RV64ZDINX:       # %bb.0: # %entry
1368b90f8e0SShao-Ce SUN; RV64ZDINX-NEXT:    addi sp, sp, -16
1375f73d2b7SYunze Zhu; RV64ZDINX-NEXT:    ld a1, 2044(a0)
1388b90f8e0SShao-Ce SUN; RV64ZDINX-NEXT:    sd a0, 8(sp)
1395f73d2b7SYunze Zhu; RV64ZDINX-NEXT:    lui a0, %hi(d)
1405f73d2b7SYunze Zhu; RV64ZDINX-NEXT:    sd a1, %lo(d)(a0)
1418b90f8e0SShao-Ce SUN; RV64ZDINX-NEXT:    addi sp, sp, 16
1428b90f8e0SShao-Ce SUN; RV64ZDINX-NEXT:    ret
1438b90f8e0SShao-Ce SUNentry:
1448b90f8e0SShao-Ce SUN  %p.addr = alloca ptr, align 8
1458b90f8e0SShao-Ce SUN  store ptr %p, ptr %p.addr, align 8
1468b90f8e0SShao-Ce SUN  %0 = load ptr, ptr %p.addr, align 8
1478b90f8e0SShao-Ce SUN  %add.ptr = getelementptr inbounds i8, ptr %0, i64 2044
1488b90f8e0SShao-Ce SUN  %1 = load double, ptr %add.ptr, align 8
1498b90f8e0SShao-Ce SUN  store double %1, ptr @d, align 8
1508b90f8e0SShao-Ce SUN  ret void
1518b90f8e0SShao-Ce SUN}
1528b90f8e0SShao-Ce SUN
153216e2820SShao-Ce SUNdefine void @foo5(ptr nocapture %p, double %d) nounwind {
1548b90f8e0SShao-Ce SUN; RV32ZDINX-LABEL: foo5:
1558b90f8e0SShao-Ce SUN; RV32ZDINX:       # %bb.0: # %entry
156576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a3, a2
1578b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    addi a0, a0, -2048
158576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a2, a1
1598b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    sw a2, -1(a0)
1608b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    sw a3, 3(a0)
1618b90f8e0SShao-Ce SUN; RV32ZDINX-NEXT:    ret
1628b90f8e0SShao-Ce SUN;
1635b41eb3aSCraig Topper; RV32ZDINXUALIGNED-LABEL: foo5:
1645b41eb3aSCraig Topper; RV32ZDINXUALIGNED:       # %bb.0: # %entry
1655b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    mv a3, a2
1665b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi a0, a0, -2048
1675b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    mv a2, a1
1685b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a2, -1(a0)
1695b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a3, 3(a0)
1705b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    ret
1715b41eb3aSCraig Topper;
1728b90f8e0SShao-Ce SUN; RV64ZDINX-LABEL: foo5:
1738b90f8e0SShao-Ce SUN; RV64ZDINX:       # %bb.0: # %entry
1748b90f8e0SShao-Ce SUN; RV64ZDINX-NEXT:    addi a0, a0, -2048
1758b90f8e0SShao-Ce SUN; RV64ZDINX-NEXT:    sd a1, -1(a0)
1768b90f8e0SShao-Ce SUN; RV64ZDINX-NEXT:    ret
1778b90f8e0SShao-Ce SUNentry:
1788b90f8e0SShao-Ce SUN  %add.ptr = getelementptr inbounds i8, ptr %p, i64 -2049
1798b90f8e0SShao-Ce SUN  store double %d, ptr %add.ptr, align 8
1808b90f8e0SShao-Ce SUN  ret void
1818b90f8e0SShao-Ce SUN}
182216e2820SShao-Ce SUN
183216e2820SShao-Ce SUNdefine void @foo6(ptr %p, double %d) nounwind {
184216e2820SShao-Ce SUN; RV32ZDINX-LABEL: foo6:
185216e2820SShao-Ce SUN; RV32ZDINX:       # %bb.0: # %entry
186576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a3, a2
187*9122c523SPengcheng Wang; RV32ZDINX-NEXT:    lui a2, %hi(.LCPI5_0)
188*9122c523SPengcheng Wang; RV32ZDINX-NEXT:    lw a4, %lo(.LCPI5_0)(a2)
189*9122c523SPengcheng Wang; RV32ZDINX-NEXT:    lw a5, %lo(.LCPI5_0+4)(a2)
190576d81baSCraig Topper; RV32ZDINX-NEXT:    mv a2, a1
191216e2820SShao-Ce SUN; RV32ZDINX-NEXT:    fadd.d a2, a2, a4
192216e2820SShao-Ce SUN; RV32ZDINX-NEXT:    addi a0, a0, 2047
193216e2820SShao-Ce SUN; RV32ZDINX-NEXT:    sw a2, -3(a0)
194216e2820SShao-Ce SUN; RV32ZDINX-NEXT:    sw a3, 1(a0)
195216e2820SShao-Ce SUN; RV32ZDINX-NEXT:    ret
196216e2820SShao-Ce SUN;
1975b41eb3aSCraig Topper; RV32ZDINXUALIGNED-LABEL: foo6:
1985b41eb3aSCraig Topper; RV32ZDINXUALIGNED:       # %bb.0: # %entry
1995b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    mv a3, a2
200*9122c523SPengcheng Wang; RV32ZDINXUALIGNED-NEXT:    lui a2, %hi(.LCPI5_0)
201*9122c523SPengcheng Wang; RV32ZDINXUALIGNED-NEXT:    lw a4, %lo(.LCPI5_0)(a2)
202*9122c523SPengcheng Wang; RV32ZDINXUALIGNED-NEXT:    lw a5, %lo(.LCPI5_0+4)(a2)
2035b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    mv a2, a1
2045b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    fadd.d a2, a2, a4
2055b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi a0, a0, 2047
2065b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a2, -3(a0)
2075b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a3, 1(a0)
2085b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    ret
2095b41eb3aSCraig Topper;
210216e2820SShao-Ce SUN; RV64ZDINX-LABEL: foo6:
211216e2820SShao-Ce SUN; RV64ZDINX:       # %bb.0: # %entry
212216e2820SShao-Ce SUN; RV64ZDINX-NEXT:    lui a2, %hi(.LCPI5_0)
213216e2820SShao-Ce SUN; RV64ZDINX-NEXT:    ld a2, %lo(.LCPI5_0)(a2)
214216e2820SShao-Ce SUN; RV64ZDINX-NEXT:    fadd.d a1, a1, a2
215216e2820SShao-Ce SUN; RV64ZDINX-NEXT:    sd a1, 2044(a0)
216216e2820SShao-Ce SUN; RV64ZDINX-NEXT:    ret
217216e2820SShao-Ce SUNentry:
218216e2820SShao-Ce SUN  %add = fadd double %d, 3.140000e+00
219216e2820SShao-Ce SUN  %add.ptr = getelementptr inbounds i8, ptr %p, i64 2044
220216e2820SShao-Ce SUN  store double %add, ptr %add.ptr, align 8
221216e2820SShao-Ce SUN  ret void
222216e2820SShao-Ce SUN}
2235b41eb3aSCraig Topper
2245b41eb3aSCraig Topperdefine void @foo7(ptr nocapture %p) nounwind {
2255b41eb3aSCraig Topper; RV32ZDINX-LABEL: foo7:
2265b41eb3aSCraig Topper; RV32ZDINX:       # %bb.0: # %entry
2275b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi sp, sp, -16
2285b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lui a1, %hi(d)
2295b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lw a2, %lo(d+4)(a1)
2305b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi a1, a1, %lo(d)
2315b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a2, 8(sp)
2325b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lw a1, 8(a1)
2335b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a1, 12(sp)
2345b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lw a2, 8(sp)
2355b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lw a3, 12(sp)
2365b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi a0, a0, 2047
2375b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a2, -3(a0)
2385b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a3, 1(a0)
2395b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi sp, sp, 16
2405b41eb3aSCraig Topper; RV32ZDINX-NEXT:    ret
2415b41eb3aSCraig Topper;
2425b41eb3aSCraig Topper; RV32ZDINXUALIGNED-LABEL: foo7:
2435b41eb3aSCraig Topper; RV32ZDINXUALIGNED:       # %bb.0: # %entry
2445b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lui a1, %hi(d)
2455b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi a1, a1, %lo(d)
2465b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lw a2, 4(a1)
2475b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lw a3, 8(a1)
2485b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi a0, a0, 2047
2495b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a2, -3(a0)
2505b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a3, 1(a0)
2515b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    ret
2525b41eb3aSCraig Topper;
2535b41eb3aSCraig Topper; RV64ZDINX-LABEL: foo7:
2545b41eb3aSCraig Topper; RV64ZDINX:       # %bb.0: # %entry
2555b41eb3aSCraig Topper; RV64ZDINX-NEXT:    lui a1, %hi(d)
2565b41eb3aSCraig Topper; RV64ZDINX-NEXT:    addi a2, a1, %lo(d)
2575b41eb3aSCraig Topper; RV64ZDINX-NEXT:    lwu a2, 8(a2)
2585b41eb3aSCraig Topper; RV64ZDINX-NEXT:    lwu a1, %lo(d+4)(a1)
2595b41eb3aSCraig Topper; RV64ZDINX-NEXT:    slli a2, a2, 32
2605b41eb3aSCraig Topper; RV64ZDINX-NEXT:    or a1, a2, a1
2615b41eb3aSCraig Topper; RV64ZDINX-NEXT:    sd a1, 2044(a0)
2625b41eb3aSCraig Topper; RV64ZDINX-NEXT:    ret
2635b41eb3aSCraig Topperentry:
2645b41eb3aSCraig Topper  %p2 = getelementptr inbounds i8, ptr @d, i32 4
2655b41eb3aSCraig Topper  %0 = load double, ptr %p2, align 4
2665b41eb3aSCraig Topper  %add.ptr = getelementptr inbounds i8, ptr %p, i64 2044
2675b41eb3aSCraig Topper  store double %0, ptr %add.ptr, align 8
2685b41eb3aSCraig Topper  ret void
2695b41eb3aSCraig Topper}
2705b41eb3aSCraig Topper
2715b41eb3aSCraig Topperdefine void @foo8(ptr %p) nounwind {
2725b41eb3aSCraig Topper; RV32ZDINX-LABEL: foo8:
2735b41eb3aSCraig Topper; RV32ZDINX:       # %bb.0: # %entry
2745b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi sp, sp, -16
2755b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi a1, a0, 2047
2765b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lw a2, -3(a1)
2775b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lw a3, 1(a1)
2785b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a0, 8(sp)
2795b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a2, 0(sp)
2805b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a3, 4(sp)
2815b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lw a0, 4(sp)
2825b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lui a1, %hi(d)
2835b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi a2, a1, %lo(d)
2845b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a0, 8(a2)
2855b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lw a0, 0(sp)
2865b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a0, %lo(d+4)(a1)
2875b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi sp, sp, 16
2885b41eb3aSCraig Topper; RV32ZDINX-NEXT:    ret
2895b41eb3aSCraig Topper;
2905b41eb3aSCraig Topper; RV32ZDINXUALIGNED-LABEL: foo8:
2915b41eb3aSCraig Topper; RV32ZDINXUALIGNED:       # %bb.0: # %entry
2925b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi sp, sp, -16
2935b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi a1, a0, 2047
2945b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lw a2, -3(a1)
2955b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lw a3, 1(a1)
2965b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a0, 8(sp)
2975b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lui a0, %hi(d)
2985b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi a0, a0, %lo(d)
2995b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a2, 4(a0)
3005b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a3, 8(a0)
3015b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi sp, sp, 16
3025b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    ret
3035b41eb3aSCraig Topper;
3045b41eb3aSCraig Topper; RV64ZDINX-LABEL: foo8:
3055b41eb3aSCraig Topper; RV64ZDINX:       # %bb.0: # %entry
3065b41eb3aSCraig Topper; RV64ZDINX-NEXT:    addi sp, sp, -16
3075b41eb3aSCraig Topper; RV64ZDINX-NEXT:    ld a1, 2044(a0)
3085b41eb3aSCraig Topper; RV64ZDINX-NEXT:    sd a0, 8(sp)
3095b41eb3aSCraig Topper; RV64ZDINX-NEXT:    lui a0, %hi(d)
3105b41eb3aSCraig Topper; RV64ZDINX-NEXT:    addi a2, a0, %lo(d)
3115b41eb3aSCraig Topper; RV64ZDINX-NEXT:    sw a1, %lo(d+4)(a0)
3125b41eb3aSCraig Topper; RV64ZDINX-NEXT:    srli a1, a1, 32
3135b41eb3aSCraig Topper; RV64ZDINX-NEXT:    sw a1, 8(a2)
3145b41eb3aSCraig Topper; RV64ZDINX-NEXT:    addi sp, sp, 16
3155b41eb3aSCraig Topper; RV64ZDINX-NEXT:    ret
3165b41eb3aSCraig Topperentry:
3175b41eb3aSCraig Topper  %p.addr = alloca ptr, align 8
3185b41eb3aSCraig Topper  store ptr %p, ptr %p.addr, align 8
3195b41eb3aSCraig Topper  %0 = load ptr, ptr %p.addr, align 8
3205b41eb3aSCraig Topper  %add.ptr = getelementptr inbounds i8, ptr %0, i64 2044
3215b41eb3aSCraig Topper  %1 = load double, ptr %add.ptr, align 8
3225b41eb3aSCraig Topper  %p2 = getelementptr inbounds i8, ptr @d, i32 4
3235b41eb3aSCraig Topper  store double %1, ptr %p2, align 4
3245b41eb3aSCraig Topper  ret void
3255b41eb3aSCraig Topper}
3265b41eb3aSCraig Topper
3275b41eb3aSCraig Topper@e = global double 4.2, align 4
3285b41eb3aSCraig Topper
3295b41eb3aSCraig Topperdefine void @foo9(ptr nocapture %p) nounwind {
3305b41eb3aSCraig Topper; RV32ZDINX-LABEL: foo9:
3315b41eb3aSCraig Topper; RV32ZDINX:       # %bb.0: # %entry
3325b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi sp, sp, -16
3335b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lui a1, %hi(e)
3345b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lw a2, %lo(e)(a1)
3355b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a2, 8(sp)
3365b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi a1, a1, %lo(e)
3375b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lw a1, 4(a1)
3385b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a1, 12(sp)
3395b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lw a2, 8(sp)
3405b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lw a3, 12(sp)
3415b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi a0, a0, 2047
3425b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a2, -3(a0)
3435b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a3, 1(a0)
3445b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi sp, sp, 16
3455b41eb3aSCraig Topper; RV32ZDINX-NEXT:    ret
3465b41eb3aSCraig Topper;
3475b41eb3aSCraig Topper; RV32ZDINXUALIGNED-LABEL: foo9:
3485b41eb3aSCraig Topper; RV32ZDINXUALIGNED:       # %bb.0: # %entry
3495b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lui a1, %hi(e)
3505b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi a1, a1, %lo(e)
3515b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lw a2, 0(a1)
3525b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lw a3, 4(a1)
3535b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi a0, a0, 2047
3545b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a2, -3(a0)
3555b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a3, 1(a0)
3565b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    ret
3575b41eb3aSCraig Topper;
3585b41eb3aSCraig Topper; RV64ZDINX-LABEL: foo9:
3595b41eb3aSCraig Topper; RV64ZDINX:       # %bb.0: # %entry
3605b41eb3aSCraig Topper; RV64ZDINX-NEXT:    lui a1, %hi(e)
3615b41eb3aSCraig Topper; RV64ZDINX-NEXT:    addi a2, a1, %lo(e)
3625b41eb3aSCraig Topper; RV64ZDINX-NEXT:    lwu a2, 4(a2)
3635b41eb3aSCraig Topper; RV64ZDINX-NEXT:    lwu a1, %lo(e)(a1)
3645b41eb3aSCraig Topper; RV64ZDINX-NEXT:    slli a2, a2, 32
3655b41eb3aSCraig Topper; RV64ZDINX-NEXT:    or a1, a2, a1
3665b41eb3aSCraig Topper; RV64ZDINX-NEXT:    sd a1, 2044(a0)
3675b41eb3aSCraig Topper; RV64ZDINX-NEXT:    ret
3685b41eb3aSCraig Topperentry:
3695b41eb3aSCraig Topper  %0 = load double, ptr @e, align 4
3705b41eb3aSCraig Topper  %add.ptr = getelementptr inbounds i8, ptr %p, i64 2044
3715b41eb3aSCraig Topper  store double %0, ptr %add.ptr, align 8
3725b41eb3aSCraig Topper  ret void
3735b41eb3aSCraig Topper}
3745b41eb3aSCraig Topper
3755b41eb3aSCraig Topperdefine void @foo10(ptr %p) nounwind {
3765b41eb3aSCraig Topper; RV32ZDINX-LABEL: foo10:
3775b41eb3aSCraig Topper; RV32ZDINX:       # %bb.0: # %entry
3785b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi sp, sp, -16
3795b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi a1, a0, 2047
3805b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lw a2, -3(a1)
3815b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lw a3, 1(a1)
3825b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a0, 8(sp)
3835b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a2, 0(sp)
3845b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a3, 4(sp)
3855b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lw a0, 4(sp)
3865b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lui a1, %hi(e)
3875b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi a2, a1, %lo(e)
3885b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a0, 4(a2)
3895b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lw a0, 0(sp)
3905b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a0, %lo(e)(a1)
3915b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi sp, sp, 16
3925b41eb3aSCraig Topper; RV32ZDINX-NEXT:    ret
3935b41eb3aSCraig Topper;
3945b41eb3aSCraig Topper; RV32ZDINXUALIGNED-LABEL: foo10:
3955b41eb3aSCraig Topper; RV32ZDINXUALIGNED:       # %bb.0: # %entry
3965b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi sp, sp, -16
3975b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi a1, a0, 2047
3985b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lw a2, -3(a1)
3995b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lw a3, 1(a1)
4005b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a0, 8(sp)
4015b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lui a0, %hi(e)
4025b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi a0, a0, %lo(e)
4035b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a2, 0(a0)
4045b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a3, 4(a0)
4055b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi sp, sp, 16
4065b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    ret
4075b41eb3aSCraig Topper;
4085b41eb3aSCraig Topper; RV64ZDINX-LABEL: foo10:
4095b41eb3aSCraig Topper; RV64ZDINX:       # %bb.0: # %entry
4105b41eb3aSCraig Topper; RV64ZDINX-NEXT:    addi sp, sp, -16
4115b41eb3aSCraig Topper; RV64ZDINX-NEXT:    ld a1, 2044(a0)
4125b41eb3aSCraig Topper; RV64ZDINX-NEXT:    sd a0, 8(sp)
4135b41eb3aSCraig Topper; RV64ZDINX-NEXT:    lui a0, %hi(e)
4145b41eb3aSCraig Topper; RV64ZDINX-NEXT:    sw a1, %lo(e)(a0)
4155b41eb3aSCraig Topper; RV64ZDINX-NEXT:    addi a0, a0, %lo(e)
4165b41eb3aSCraig Topper; RV64ZDINX-NEXT:    srli a1, a1, 32
4175b41eb3aSCraig Topper; RV64ZDINX-NEXT:    sw a1, 4(a0)
4185b41eb3aSCraig Topper; RV64ZDINX-NEXT:    addi sp, sp, 16
4195b41eb3aSCraig Topper; RV64ZDINX-NEXT:    ret
4205b41eb3aSCraig Topperentry:
4215b41eb3aSCraig Topper  %p.addr = alloca ptr, align 8
4225b41eb3aSCraig Topper  store ptr %p, ptr %p.addr, align 8
4235b41eb3aSCraig Topper  %0 = load ptr, ptr %p.addr, align 8
4245b41eb3aSCraig Topper  %add.ptr = getelementptr inbounds i8, ptr %0, i64 2044
4255b41eb3aSCraig Topper  %1 = load double, ptr %add.ptr, align 8
4265b41eb3aSCraig Topper  store double %1, ptr @e, align 4
4275b41eb3aSCraig Topper  ret void
4285b41eb3aSCraig Topper}
4295b41eb3aSCraig Topper
4305b41eb3aSCraig Topperdefine void @foo11(ptr nocapture %p, double %d) nounwind {
4315b41eb3aSCraig Topper; RV32ZDINX-LABEL: foo11:
4325b41eb3aSCraig Topper; RV32ZDINX:       # %bb.0: # %entry
4335b41eb3aSCraig Topper; RV32ZDINX-NEXT:    mv a3, a2
4345b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lui a2, 1
4355b41eb3aSCraig Topper; RV32ZDINX-NEXT:    add a0, a0, a2
4365b41eb3aSCraig Topper; RV32ZDINX-NEXT:    mv a2, a1
4375b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a2, -4(a0)
4385b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a3, 0(a0)
4395b41eb3aSCraig Topper; RV32ZDINX-NEXT:    ret
4405b41eb3aSCraig Topper;
4415b41eb3aSCraig Topper; RV32ZDINXUALIGNED-LABEL: foo11:
4425b41eb3aSCraig Topper; RV32ZDINXUALIGNED:       # %bb.0: # %entry
4435b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    mv a3, a2
4445b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lui a2, 1
4455b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    add a0, a0, a2
4465b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    mv a2, a1
4475b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a2, -4(a0)
4485b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a3, 0(a0)
4495b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    ret
4505b41eb3aSCraig Topper;
4515b41eb3aSCraig Topper; RV64ZDINX-LABEL: foo11:
4525b41eb3aSCraig Topper; RV64ZDINX:       # %bb.0: # %entry
4535b41eb3aSCraig Topper; RV64ZDINX-NEXT:    addi a0, a0, 2047
4545b41eb3aSCraig Topper; RV64ZDINX-NEXT:    sd a1, 2045(a0)
4555b41eb3aSCraig Topper; RV64ZDINX-NEXT:    ret
4565b41eb3aSCraig Topperentry:
4575b41eb3aSCraig Topper  %add.ptr = getelementptr inbounds i8, ptr %p, i64 4092
4585b41eb3aSCraig Topper  store double %d, ptr %add.ptr, align 8
4595b41eb3aSCraig Topper  ret void
4605b41eb3aSCraig Topper}
4615b41eb3aSCraig Topper
4625b41eb3aSCraig Topperdefine void @foo12(ptr nocapture %p, double %d) nounwind {
4635b41eb3aSCraig Topper; RV32ZDINX-LABEL: foo12:
4645b41eb3aSCraig Topper; RV32ZDINX:       # %bb.0: # %entry
4655b41eb3aSCraig Topper; RV32ZDINX-NEXT:    mv a3, a2
4665b41eb3aSCraig Topper; RV32ZDINX-NEXT:    lui a2, 2
4675b41eb3aSCraig Topper; RV32ZDINX-NEXT:    addi a2, a2, 2047
4685b41eb3aSCraig Topper; RV32ZDINX-NEXT:    add a0, a0, a2
4695b41eb3aSCraig Topper; RV32ZDINX-NEXT:    mv a2, a1
4705b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a2, 0(a0)
4715b41eb3aSCraig Topper; RV32ZDINX-NEXT:    sw a3, 4(a0)
4725b41eb3aSCraig Topper; RV32ZDINX-NEXT:    ret
4735b41eb3aSCraig Topper;
4745b41eb3aSCraig Topper; RV32ZDINXUALIGNED-LABEL: foo12:
4755b41eb3aSCraig Topper; RV32ZDINXUALIGNED:       # %bb.0: # %entry
4765b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    mv a3, a2
4775b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lui a2, 2
4785b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi a2, a2, 2047
4795b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    add a0, a0, a2
4805b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    mv a2, a1
4815b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a2, 0(a0)
4825b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    sw a3, 4(a0)
4835b41eb3aSCraig Topper; RV32ZDINXUALIGNED-NEXT:    ret
4845b41eb3aSCraig Topper;
4855b41eb3aSCraig Topper; RV64ZDINX-LABEL: foo12:
4865b41eb3aSCraig Topper; RV64ZDINX:       # %bb.0: # %entry
4875b41eb3aSCraig Topper; RV64ZDINX-NEXT:    lui a2, 2
4885b41eb3aSCraig Topper; RV64ZDINX-NEXT:    add a0, a0, a2
4895b41eb3aSCraig Topper; RV64ZDINX-NEXT:    sd a1, 2047(a0)
4905b41eb3aSCraig Topper; RV64ZDINX-NEXT:    ret
4915b41eb3aSCraig Topperentry:
4925b41eb3aSCraig Topper  %add.ptr = getelementptr inbounds i8, ptr %p, i64 10239
4935b41eb3aSCraig Topper  store double %d, ptr %add.ptr, align 8
4945b41eb3aSCraig Topper  ret void
4955b41eb3aSCraig Topper}
4960c1500efSCraig Topper
4970c1500efSCraig Topper@f = global double 4.2, align 16
4980c1500efSCraig Topper
4990c1500efSCraig Topperdefine double @foo13(ptr nocapture %p) nounwind {
5000c1500efSCraig Topper; RV32ZDINX-LABEL: foo13:
5010c1500efSCraig Topper; RV32ZDINX:       # %bb.0: # %entry
5020c1500efSCraig Topper; RV32ZDINX-NEXT:    addi sp, sp, -16
5030c1500efSCraig Topper; RV32ZDINX-NEXT:    lui a0, %hi(f)
5040c1500efSCraig Topper; RV32ZDINX-NEXT:    lw a1, %lo(f+8)(a0)
5050c1500efSCraig Topper; RV32ZDINX-NEXT:    sw a1, 12(sp)
5060c1500efSCraig Topper; RV32ZDINX-NEXT:    lw a0, %lo(f+4)(a0)
5070c1500efSCraig Topper; RV32ZDINX-NEXT:    sw a0, 8(sp)
5080c1500efSCraig Topper; RV32ZDINX-NEXT:    lw a0, 8(sp)
5090c1500efSCraig Topper; RV32ZDINX-NEXT:    lw a1, 12(sp)
5100c1500efSCraig Topper; RV32ZDINX-NEXT:    addi sp, sp, 16
5110c1500efSCraig Topper; RV32ZDINX-NEXT:    ret
5120c1500efSCraig Topper;
5130c1500efSCraig Topper; RV32ZDINXUALIGNED-LABEL: foo13:
5140c1500efSCraig Topper; RV32ZDINXUALIGNED:       # %bb.0: # %entry
5150c1500efSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lui a0, %hi(f)
5160c1500efSCraig Topper; RV32ZDINXUALIGNED-NEXT:    addi a0, a0, %lo(f)
5170c1500efSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lw a1, 8(a0)
5180c1500efSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lw a0, 4(a0)
5190c1500efSCraig Topper; RV32ZDINXUALIGNED-NEXT:    ret
5200c1500efSCraig Topper;
5210c1500efSCraig Topper; RV64ZDINX-LABEL: foo13:
5220c1500efSCraig Topper; RV64ZDINX:       # %bb.0: # %entry
5230c1500efSCraig Topper; RV64ZDINX-NEXT:    lui a0, %hi(f)
5240c1500efSCraig Topper; RV64ZDINX-NEXT:    lwu a1, %lo(f+8)(a0)
5250c1500efSCraig Topper; RV64ZDINX-NEXT:    lwu a0, %lo(f+4)(a0)
5260c1500efSCraig Topper; RV64ZDINX-NEXT:    slli a1, a1, 32
5270c1500efSCraig Topper; RV64ZDINX-NEXT:    or a0, a1, a0
5280c1500efSCraig Topper; RV64ZDINX-NEXT:    ret
5290c1500efSCraig Topperentry:
5300c1500efSCraig Topper  %add.ptr = getelementptr inbounds i8, ptr @f, i64 4
5310c1500efSCraig Topper  %0 = load double, ptr %add.ptr, align 4
5320c1500efSCraig Topper  ret double %0
5330c1500efSCraig Topper}
5340c1500efSCraig Topper
5350c1500efSCraig Topperdefine double @foo14(ptr nocapture %p) nounwind {
5360c1500efSCraig Topper; RV32ZDINX-LABEL: foo14:
5370c1500efSCraig Topper; RV32ZDINX:       # %bb.0: # %entry
5380c1500efSCraig Topper; RV32ZDINX-NEXT:    lui a0, %hi(f)
5390c1500efSCraig Topper; RV32ZDINX-NEXT:    lw a1, %lo(f+12)(a0)
5400c1500efSCraig Topper; RV32ZDINX-NEXT:    lw a0, %lo(f+8)(a0)
5410c1500efSCraig Topper; RV32ZDINX-NEXT:    ret
5420c1500efSCraig Topper;
5430c1500efSCraig Topper; RV32ZDINXUALIGNED-LABEL: foo14:
5440c1500efSCraig Topper; RV32ZDINXUALIGNED:       # %bb.0: # %entry
5450c1500efSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lui a0, %hi(f)
5460c1500efSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lw a1, %lo(f+12)(a0)
5470c1500efSCraig Topper; RV32ZDINXUALIGNED-NEXT:    lw a0, %lo(f+8)(a0)
5480c1500efSCraig Topper; RV32ZDINXUALIGNED-NEXT:    ret
5490c1500efSCraig Topper;
5500c1500efSCraig Topper; RV64ZDINX-LABEL: foo14:
5510c1500efSCraig Topper; RV64ZDINX:       # %bb.0: # %entry
5520c1500efSCraig Topper; RV64ZDINX-NEXT:    lui a0, %hi(f)
5530c1500efSCraig Topper; RV64ZDINX-NEXT:    ld a0, %lo(f+8)(a0)
5540c1500efSCraig Topper; RV64ZDINX-NEXT:    ret
5550c1500efSCraig Topperentry:
5560c1500efSCraig Topper  %add.ptr = getelementptr inbounds i8, ptr @f, i64 8
5570c1500efSCraig Topper  %0 = load double, ptr %add.ptr, align 8
5580c1500efSCraig Topper  ret double %0
5590c1500efSCraig Topper}
560