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