brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.7 KiB · c561b6d Raw
519 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+zdinx -verify-machineinstrs < %s \3; RUN:   -target-abi=ilp32 | FileCheck -check-prefix=RV32ZDINX %s4; RUN: llc -mtriple=riscv32 -mattr=+zdinx,+unaligned-scalar-mem -verify-machineinstrs < %s \5; RUN:   -target-abi=ilp32 | FileCheck -check-prefix=RV32ZDINXUALIGNED %s6; RUN: llc -mtriple=riscv64 -mattr=+zdinx -verify-machineinstrs < %s \7; RUN:   -target-abi=lp64 | FileCheck -check-prefix=RV64ZDINX %s8 9define void @foo(ptr nocapture %p, double %d) nounwind {10; RV32ZDINX-LABEL: foo:11; RV32ZDINX:       # %bb.0: # %entry12; RV32ZDINX-NEXT:    addi a3, a0, 204413; RV32ZDINX-NEXT:    sw a1, 2044(a0)14; RV32ZDINX-NEXT:    sw a2, 4(a3)15; RV32ZDINX-NEXT:    ret16;17; RV32ZDINXUALIGNED-LABEL: foo:18; RV32ZDINXUALIGNED:       # %bb.0: # %entry19; RV32ZDINXUALIGNED-NEXT:    addi a3, a0, 204420; RV32ZDINXUALIGNED-NEXT:    sw a1, 2044(a0)21; RV32ZDINXUALIGNED-NEXT:    sw a2, 4(a3)22; RV32ZDINXUALIGNED-NEXT:    ret23;24; RV64ZDINX-LABEL: foo:25; RV64ZDINX:       # %bb.0: # %entry26; RV64ZDINX-NEXT:    sd a1, 2044(a0)27; RV64ZDINX-NEXT:    ret28entry:29  %add.ptr = getelementptr inbounds i8, ptr %p, i64 204430  store double %d, ptr %add.ptr, align 831  ret void32}33 34define void @foo2(ptr nocapture %p, double %d) nounwind {35; RV32ZDINX-LABEL: foo2:36; RV32ZDINX:       # %bb.0: # %entry37; RV32ZDINX-NEXT:    mv a3, a238; RV32ZDINX-NEXT:    addi a4, a0, 204439; RV32ZDINX-NEXT:    mv a2, a140; RV32ZDINX-NEXT:    fadd.d a2, a2, a241; RV32ZDINX-NEXT:    sw a3, 4(a4)42; RV32ZDINX-NEXT:    sw a2, 2044(a0)43; RV32ZDINX-NEXT:    ret44;45; RV32ZDINXUALIGNED-LABEL: foo2:46; RV32ZDINXUALIGNED:       # %bb.0: # %entry47; RV32ZDINXUALIGNED-NEXT:    mv a3, a248; RV32ZDINXUALIGNED-NEXT:    addi a4, a0, 204449; RV32ZDINXUALIGNED-NEXT:    mv a2, a150; RV32ZDINXUALIGNED-NEXT:    fadd.d a2, a2, a251; RV32ZDINXUALIGNED-NEXT:    sw a3, 4(a4)52; RV32ZDINXUALIGNED-NEXT:    sw a2, 2044(a0)53; RV32ZDINXUALIGNED-NEXT:    ret54;55; RV64ZDINX-LABEL: foo2:56; RV64ZDINX:       # %bb.0: # %entry57; RV64ZDINX-NEXT:    fadd.d a1, a1, a158; RV64ZDINX-NEXT:    sd a1, 2044(a0)59; RV64ZDINX-NEXT:    ret60entry:61  %a = fadd double %d, %d62  %add.ptr = getelementptr inbounds i8, ptr %p, i64 204463  store double %a, ptr %add.ptr, align 864  ret void65}66 67@d = global double 4.2, align 868 69define void @foo3(ptr nocapture %p) nounwind {70; RV32ZDINX-LABEL: foo3:71; RV32ZDINX:       # %bb.0: # %entry72; RV32ZDINX-NEXT:    lui a1, %hi(d)73; RV32ZDINX-NEXT:    lw a2, %lo(d+4)(a1)74; RV32ZDINX-NEXT:    lw a1, %lo(d)(a1)75; RV32ZDINX-NEXT:    addi a3, a0, 204476; RV32ZDINX-NEXT:    sw a2, 4(a3)77; RV32ZDINX-NEXT:    sw a1, 2044(a0)78; RV32ZDINX-NEXT:    ret79;80; RV32ZDINXUALIGNED-LABEL: foo3:81; RV32ZDINXUALIGNED:       # %bb.0: # %entry82; RV32ZDINXUALIGNED-NEXT:    lui a1, %hi(d)83; RV32ZDINXUALIGNED-NEXT:    lw a2, %lo(d+4)(a1)84; RV32ZDINXUALIGNED-NEXT:    lw a1, %lo(d)(a1)85; RV32ZDINXUALIGNED-NEXT:    addi a3, a0, 204486; RV32ZDINXUALIGNED-NEXT:    sw a2, 4(a3)87; RV32ZDINXUALIGNED-NEXT:    sw a1, 2044(a0)88; RV32ZDINXUALIGNED-NEXT:    ret89;90; RV64ZDINX-LABEL: foo3:91; RV64ZDINX:       # %bb.0: # %entry92; RV64ZDINX-NEXT:    lui a1, %hi(d)93; RV64ZDINX-NEXT:    ld a1, %lo(d)(a1)94; RV64ZDINX-NEXT:    sd a1, 2044(a0)95; RV64ZDINX-NEXT:    ret96entry:97  %0 = load double, ptr @d, align 898  %add.ptr = getelementptr inbounds i8, ptr %p, i64 204499  store double %0, ptr %add.ptr, align 8100  ret void101}102 103define void @foo4(ptr %p) nounwind {104; RV32ZDINX-LABEL: foo4:105; RV32ZDINX:       # %bb.0: # %entry106; RV32ZDINX-NEXT:    addi sp, sp, -16107; RV32ZDINX-NEXT:    addi a1, a0, 2044108; RV32ZDINX-NEXT:    lw a2, 2044(a0)109; RV32ZDINX-NEXT:    lw a1, 4(a1)110; RV32ZDINX-NEXT:    sw a0, 8(sp)111; RV32ZDINX-NEXT:    lui a0, %hi(d)112; RV32ZDINX-NEXT:    sw a2, %lo(d)(a0)113; RV32ZDINX-NEXT:    sw a1, %lo(d+4)(a0)114; RV32ZDINX-NEXT:    addi sp, sp, 16115; RV32ZDINX-NEXT:    ret116;117; RV32ZDINXUALIGNED-LABEL: foo4:118; RV32ZDINXUALIGNED:       # %bb.0: # %entry119; RV32ZDINXUALIGNED-NEXT:    addi sp, sp, -16120; RV32ZDINXUALIGNED-NEXT:    addi a1, a0, 2044121; RV32ZDINXUALIGNED-NEXT:    lw a2, 2044(a0)122; RV32ZDINXUALIGNED-NEXT:    lw a1, 4(a1)123; RV32ZDINXUALIGNED-NEXT:    sw a0, 8(sp)124; RV32ZDINXUALIGNED-NEXT:    lui a0, %hi(d)125; RV32ZDINXUALIGNED-NEXT:    sw a2, %lo(d)(a0)126; RV32ZDINXUALIGNED-NEXT:    sw a1, %lo(d+4)(a0)127; RV32ZDINXUALIGNED-NEXT:    addi sp, sp, 16128; RV32ZDINXUALIGNED-NEXT:    ret129;130; RV64ZDINX-LABEL: foo4:131; RV64ZDINX:       # %bb.0: # %entry132; RV64ZDINX-NEXT:    addi sp, sp, -16133; RV64ZDINX-NEXT:    ld a1, 2044(a0)134; RV64ZDINX-NEXT:    sd a0, 8(sp)135; RV64ZDINX-NEXT:    lui a0, %hi(d)136; RV64ZDINX-NEXT:    sd a1, %lo(d)(a0)137; RV64ZDINX-NEXT:    addi sp, sp, 16138; RV64ZDINX-NEXT:    ret139entry:140  %p.addr = alloca ptr, align 8141  store ptr %p, ptr %p.addr, align 8142  %0 = load ptr, ptr %p.addr, align 8143  %add.ptr = getelementptr inbounds i8, ptr %0, i64 2044144  %1 = load double, ptr %add.ptr, align 8145  store double %1, ptr @d, align 8146  ret void147}148 149define void @foo5(ptr nocapture %p, double %d) nounwind {150; RV32ZDINX-LABEL: foo5:151; RV32ZDINX:       # %bb.0: # %entry152; RV32ZDINX-NEXT:    addi a3, a0, -2048153; RV32ZDINX-NEXT:    sw a2, -2045(a0)154; RV32ZDINX-NEXT:    sw a1, -1(a3)155; RV32ZDINX-NEXT:    ret156;157; RV32ZDINXUALIGNED-LABEL: foo5:158; RV32ZDINXUALIGNED:       # %bb.0: # %entry159; RV32ZDINXUALIGNED-NEXT:    addi a3, a0, -2048160; RV32ZDINXUALIGNED-NEXT:    sw a2, -2045(a0)161; RV32ZDINXUALIGNED-NEXT:    sw a1, -1(a3)162; RV32ZDINXUALIGNED-NEXT:    ret163;164; RV64ZDINX-LABEL: foo5:165; RV64ZDINX:       # %bb.0: # %entry166; RV64ZDINX-NEXT:    addi a0, a0, -2048167; RV64ZDINX-NEXT:    sd a1, -1(a0)168; RV64ZDINX-NEXT:    ret169entry:170  %add.ptr = getelementptr inbounds i8, ptr %p, i64 -2049171  store double %d, ptr %add.ptr, align 8172  ret void173}174 175define void @foo6(ptr %p, double %d) nounwind {176; RV32ZDINX-LABEL: foo6:177; RV32ZDINX:       # %bb.0: # %entry178; RV32ZDINX-NEXT:    mv a3, a2179; RV32ZDINX-NEXT:    lui a2, %hi(.LCPI5_0)180; RV32ZDINX-NEXT:    lw a4, %lo(.LCPI5_0)(a2)181; RV32ZDINX-NEXT:    addi a2, a2, %lo(.LCPI5_0)182; RV32ZDINX-NEXT:    lw a5, 4(a2)183; RV32ZDINX-NEXT:    mv a2, a1184; RV32ZDINX-NEXT:    addi a1, a0, 2044185; RV32ZDINX-NEXT:    fadd.d a2, a2, a4186; RV32ZDINX-NEXT:    sw a3, 4(a1)187; RV32ZDINX-NEXT:    sw a2, 2044(a0)188; RV32ZDINX-NEXT:    ret189;190; RV32ZDINXUALIGNED-LABEL: foo6:191; RV32ZDINXUALIGNED:       # %bb.0: # %entry192; RV32ZDINXUALIGNED-NEXT:    mv a3, a2193; RV32ZDINXUALIGNED-NEXT:    lui a2, %hi(.LCPI5_0)194; RV32ZDINXUALIGNED-NEXT:    lw a4, %lo(.LCPI5_0)(a2)195; RV32ZDINXUALIGNED-NEXT:    addi a2, a2, %lo(.LCPI5_0)196; RV32ZDINXUALIGNED-NEXT:    lw a5, 4(a2)197; RV32ZDINXUALIGNED-NEXT:    mv a2, a1198; RV32ZDINXUALIGNED-NEXT:    addi a1, a0, 2044199; RV32ZDINXUALIGNED-NEXT:    fadd.d a2, a2, a4200; RV32ZDINXUALIGNED-NEXT:    sw a3, 4(a1)201; RV32ZDINXUALIGNED-NEXT:    sw a2, 2044(a0)202; RV32ZDINXUALIGNED-NEXT:    ret203;204; RV64ZDINX-LABEL: foo6:205; RV64ZDINX:       # %bb.0: # %entry206; RV64ZDINX-NEXT:    lui a2, %hi(.LCPI5_0)207; RV64ZDINX-NEXT:    ld a2, %lo(.LCPI5_0)(a2)208; RV64ZDINX-NEXT:    fadd.d a1, a1, a2209; RV64ZDINX-NEXT:    sd a1, 2044(a0)210; RV64ZDINX-NEXT:    ret211entry:212  %add = fadd double %d, 3.140000e+00213  %add.ptr = getelementptr inbounds i8, ptr %p, i64 2044214  store double %add, ptr %add.ptr, align 8215  ret void216}217 218define void @foo7(ptr nocapture %p) nounwind {219; RV32ZDINX-LABEL: foo7:220; RV32ZDINX:       # %bb.0: # %entry221; RV32ZDINX-NEXT:    lui a1, %hi(d)222; RV32ZDINX-NEXT:    addi a1, a1, %lo(d)223; RV32ZDINX-NEXT:    lw a2, 8(a1)224; RV32ZDINX-NEXT:    lw a1, 4(a1)225; RV32ZDINX-NEXT:    addi a3, a0, 2044226; RV32ZDINX-NEXT:    sw a2, 4(a3)227; RV32ZDINX-NEXT:    sw a1, 2044(a0)228; RV32ZDINX-NEXT:    ret229;230; RV32ZDINXUALIGNED-LABEL: foo7:231; RV32ZDINXUALIGNED:       # %bb.0: # %entry232; RV32ZDINXUALIGNED-NEXT:    lui a1, %hi(d)233; RV32ZDINXUALIGNED-NEXT:    addi a1, a1, %lo(d)234; RV32ZDINXUALIGNED-NEXT:    lw a2, 8(a1)235; RV32ZDINXUALIGNED-NEXT:    lw a1, 4(a1)236; RV32ZDINXUALIGNED-NEXT:    addi a3, a0, 2044237; RV32ZDINXUALIGNED-NEXT:    sw a2, 4(a3)238; RV32ZDINXUALIGNED-NEXT:    sw a1, 2044(a0)239; RV32ZDINXUALIGNED-NEXT:    ret240;241; RV64ZDINX-LABEL: foo7:242; RV64ZDINX:       # %bb.0: # %entry243; RV64ZDINX-NEXT:    lui a1, %hi(d)244; RV64ZDINX-NEXT:    addi a1, a1, %lo(d)245; RV64ZDINX-NEXT:    lw a2, 8(a1)246; RV64ZDINX-NEXT:    lwu a1, 4(a1)247; RV64ZDINX-NEXT:    slli a2, a2, 32248; RV64ZDINX-NEXT:    or a1, a2, a1249; RV64ZDINX-NEXT:    sd a1, 2044(a0)250; RV64ZDINX-NEXT:    ret251entry:252  %p2 = getelementptr inbounds i8, ptr @d, i32 4253  %0 = load double, ptr %p2, align 4254  %add.ptr = getelementptr inbounds i8, ptr %p, i64 2044255  store double %0, ptr %add.ptr, align 8256  ret void257}258 259define void @foo8(ptr %p) nounwind {260; RV32ZDINX-LABEL: foo8:261; RV32ZDINX:       # %bb.0: # %entry262; RV32ZDINX-NEXT:    addi sp, sp, -16263; RV32ZDINX-NEXT:    addi a1, a0, 2044264; RV32ZDINX-NEXT:    lw a2, 2044(a0)265; RV32ZDINX-NEXT:    lw a1, 4(a1)266; RV32ZDINX-NEXT:    sw a0, 8(sp)267; RV32ZDINX-NEXT:    lui a0, %hi(d)268; RV32ZDINX-NEXT:    addi a0, a0, %lo(d)269; RV32ZDINX-NEXT:    sw a2, 4(a0)270; RV32ZDINX-NEXT:    sw a1, 8(a0)271; RV32ZDINX-NEXT:    addi sp, sp, 16272; RV32ZDINX-NEXT:    ret273;274; RV32ZDINXUALIGNED-LABEL: foo8:275; RV32ZDINXUALIGNED:       # %bb.0: # %entry276; RV32ZDINXUALIGNED-NEXT:    addi sp, sp, -16277; RV32ZDINXUALIGNED-NEXT:    addi a1, a0, 2044278; RV32ZDINXUALIGNED-NEXT:    lw a2, 2044(a0)279; RV32ZDINXUALIGNED-NEXT:    lw a1, 4(a1)280; RV32ZDINXUALIGNED-NEXT:    sw a0, 8(sp)281; RV32ZDINXUALIGNED-NEXT:    lui a0, %hi(d)282; RV32ZDINXUALIGNED-NEXT:    addi a0, a0, %lo(d)283; RV32ZDINXUALIGNED-NEXT:    sw a2, 4(a0)284; RV32ZDINXUALIGNED-NEXT:    sw a1, 8(a0)285; RV32ZDINXUALIGNED-NEXT:    addi sp, sp, 16286; RV32ZDINXUALIGNED-NEXT:    ret287;288; RV64ZDINX-LABEL: foo8:289; RV64ZDINX:       # %bb.0: # %entry290; RV64ZDINX-NEXT:    addi sp, sp, -16291; RV64ZDINX-NEXT:    ld a1, 2044(a0)292; RV64ZDINX-NEXT:    sd a0, 8(sp)293; RV64ZDINX-NEXT:    lui a0, %hi(d)294; RV64ZDINX-NEXT:    addi a0, a0, %lo(d)295; RV64ZDINX-NEXT:    srli a2, a1, 32296; RV64ZDINX-NEXT:    sw a1, 4(a0)297; RV64ZDINX-NEXT:    sw a2, 8(a0)298; RV64ZDINX-NEXT:    addi sp, sp, 16299; RV64ZDINX-NEXT:    ret300entry:301  %p.addr = alloca ptr, align 8302  store ptr %p, ptr %p.addr, align 8303  %0 = load ptr, ptr %p.addr, align 8304  %add.ptr = getelementptr inbounds i8, ptr %0, i64 2044305  %1 = load double, ptr %add.ptr, align 8306  %p2 = getelementptr inbounds i8, ptr @d, i32 4307  store double %1, ptr %p2, align 4308  ret void309}310 311@e = global double 4.2, align 4312 313define void @foo9(ptr nocapture %p) nounwind {314; RV32ZDINX-LABEL: foo9:315; RV32ZDINX:       # %bb.0: # %entry316; RV32ZDINX-NEXT:    lui a1, %hi(e)317; RV32ZDINX-NEXT:    addi a1, a1, %lo(e)318; RV32ZDINX-NEXT:    lw a2, 4(a1)319; RV32ZDINX-NEXT:    lw a1, 0(a1)320; RV32ZDINX-NEXT:    addi a3, a0, 2044321; RV32ZDINX-NEXT:    sw a2, 4(a3)322; RV32ZDINX-NEXT:    sw a1, 2044(a0)323; RV32ZDINX-NEXT:    ret324;325; RV32ZDINXUALIGNED-LABEL: foo9:326; RV32ZDINXUALIGNED:       # %bb.0: # %entry327; RV32ZDINXUALIGNED-NEXT:    lui a1, %hi(e)328; RV32ZDINXUALIGNED-NEXT:    addi a1, a1, %lo(e)329; RV32ZDINXUALIGNED-NEXT:    lw a2, 4(a1)330; RV32ZDINXUALIGNED-NEXT:    lw a1, 0(a1)331; RV32ZDINXUALIGNED-NEXT:    addi a3, a0, 2044332; RV32ZDINXUALIGNED-NEXT:    sw a2, 4(a3)333; RV32ZDINXUALIGNED-NEXT:    sw a1, 2044(a0)334; RV32ZDINXUALIGNED-NEXT:    ret335;336; RV64ZDINX-LABEL: foo9:337; RV64ZDINX:       # %bb.0: # %entry338; RV64ZDINX-NEXT:    lui a1, %hi(e)339; RV64ZDINX-NEXT:    addi a1, a1, %lo(e)340; RV64ZDINX-NEXT:    lw a2, 4(a1)341; RV64ZDINX-NEXT:    lwu a1, 0(a1)342; RV64ZDINX-NEXT:    slli a2, a2, 32343; RV64ZDINX-NEXT:    or a1, a2, a1344; RV64ZDINX-NEXT:    sd a1, 2044(a0)345; RV64ZDINX-NEXT:    ret346entry:347  %0 = load double, ptr @e, align 4348  %add.ptr = getelementptr inbounds i8, ptr %p, i64 2044349  store double %0, ptr %add.ptr, align 8350  ret void351}352 353define void @foo10(ptr %p) nounwind {354; RV32ZDINX-LABEL: foo10:355; RV32ZDINX:       # %bb.0: # %entry356; RV32ZDINX-NEXT:    addi sp, sp, -16357; RV32ZDINX-NEXT:    addi a1, a0, 2044358; RV32ZDINX-NEXT:    lw a2, 2044(a0)359; RV32ZDINX-NEXT:    lw a1, 4(a1)360; RV32ZDINX-NEXT:    sw a0, 8(sp)361; RV32ZDINX-NEXT:    lui a0, %hi(e)362; RV32ZDINX-NEXT:    addi a0, a0, %lo(e)363; RV32ZDINX-NEXT:    sw a2, 0(a0)364; RV32ZDINX-NEXT:    sw a1, 4(a0)365; RV32ZDINX-NEXT:    addi sp, sp, 16366; RV32ZDINX-NEXT:    ret367;368; RV32ZDINXUALIGNED-LABEL: foo10:369; RV32ZDINXUALIGNED:       # %bb.0: # %entry370; RV32ZDINXUALIGNED-NEXT:    addi sp, sp, -16371; RV32ZDINXUALIGNED-NEXT:    addi a1, a0, 2044372; RV32ZDINXUALIGNED-NEXT:    lw a2, 2044(a0)373; RV32ZDINXUALIGNED-NEXT:    lw a1, 4(a1)374; RV32ZDINXUALIGNED-NEXT:    sw a0, 8(sp)375; RV32ZDINXUALIGNED-NEXT:    lui a0, %hi(e)376; RV32ZDINXUALIGNED-NEXT:    addi a0, a0, %lo(e)377; RV32ZDINXUALIGNED-NEXT:    sw a2, 0(a0)378; RV32ZDINXUALIGNED-NEXT:    sw a1, 4(a0)379; RV32ZDINXUALIGNED-NEXT:    addi sp, sp, 16380; RV32ZDINXUALIGNED-NEXT:    ret381;382; RV64ZDINX-LABEL: foo10:383; RV64ZDINX:       # %bb.0: # %entry384; RV64ZDINX-NEXT:    addi sp, sp, -16385; RV64ZDINX-NEXT:    ld a1, 2044(a0)386; RV64ZDINX-NEXT:    sd a0, 8(sp)387; RV64ZDINX-NEXT:    lui a0, %hi(e)388; RV64ZDINX-NEXT:    addi a0, a0, %lo(e)389; RV64ZDINX-NEXT:    srli a2, a1, 32390; RV64ZDINX-NEXT:    sw a1, 0(a0)391; RV64ZDINX-NEXT:    sw a2, 4(a0)392; RV64ZDINX-NEXT:    addi sp, sp, 16393; RV64ZDINX-NEXT:    ret394entry:395  %p.addr = alloca ptr, align 8396  store ptr %p, ptr %p.addr, align 8397  %0 = load ptr, ptr %p.addr, align 8398  %add.ptr = getelementptr inbounds i8, ptr %0, i64 2044399  %1 = load double, ptr %add.ptr, align 8400  store double %1, ptr @e, align 4401  ret void402}403 404define void @foo11(ptr nocapture %p, double %d) nounwind {405; RV32ZDINX-LABEL: foo11:406; RV32ZDINX:       # %bb.0: # %entry407; RV32ZDINX-NEXT:    addi a0, a0, 2047408; RV32ZDINX-NEXT:    addi a3, a0, 2045409; RV32ZDINX-NEXT:    sw a1, 2045(a0)410; RV32ZDINX-NEXT:    sw a2, 4(a3)411; RV32ZDINX-NEXT:    ret412;413; RV32ZDINXUALIGNED-LABEL: foo11:414; RV32ZDINXUALIGNED:       # %bb.0: # %entry415; RV32ZDINXUALIGNED-NEXT:    addi a0, a0, 2047416; RV32ZDINXUALIGNED-NEXT:    addi a3, a0, 2045417; RV32ZDINXUALIGNED-NEXT:    sw a1, 2045(a0)418; RV32ZDINXUALIGNED-NEXT:    sw a2, 4(a3)419; RV32ZDINXUALIGNED-NEXT:    ret420;421; RV64ZDINX-LABEL: foo11:422; RV64ZDINX:       # %bb.0: # %entry423; RV64ZDINX-NEXT:    addi a0, a0, 2047424; RV64ZDINX-NEXT:    sd a1, 2045(a0)425; RV64ZDINX-NEXT:    ret426entry:427  %add.ptr = getelementptr inbounds i8, ptr %p, i64 4092428  store double %d, ptr %add.ptr, align 8429  ret void430}431 432define void @foo12(ptr nocapture %p, double %d) nounwind {433; RV32ZDINX-LABEL: foo12:434; RV32ZDINX:       # %bb.0: # %entry435; RV32ZDINX-NEXT:    lui a3, 2436; RV32ZDINX-NEXT:    addi a3, a3, 2047437; RV32ZDINX-NEXT:    add a0, a0, a3438; RV32ZDINX-NEXT:    sw a1, 0(a0)439; RV32ZDINX-NEXT:    sw a2, 4(a0)440; RV32ZDINX-NEXT:    ret441;442; RV32ZDINXUALIGNED-LABEL: foo12:443; RV32ZDINXUALIGNED:       # %bb.0: # %entry444; RV32ZDINXUALIGNED-NEXT:    lui a3, 2445; RV32ZDINXUALIGNED-NEXT:    addi a3, a3, 2047446; RV32ZDINXUALIGNED-NEXT:    add a0, a0, a3447; RV32ZDINXUALIGNED-NEXT:    sw a1, 0(a0)448; RV32ZDINXUALIGNED-NEXT:    sw a2, 4(a0)449; RV32ZDINXUALIGNED-NEXT:    ret450;451; RV64ZDINX-LABEL: foo12:452; RV64ZDINX:       # %bb.0: # %entry453; RV64ZDINX-NEXT:    lui a2, 2454; RV64ZDINX-NEXT:    add a0, a0, a2455; RV64ZDINX-NEXT:    sd a1, 2047(a0)456; RV64ZDINX-NEXT:    ret457entry:458  %add.ptr = getelementptr inbounds i8, ptr %p, i64 10239459  store double %d, ptr %add.ptr, align 8460  ret void461}462 463@f = global double 4.2, align 16464 465define double @foo13(ptr nocapture %p) nounwind {466; RV32ZDINX-LABEL: foo13:467; RV32ZDINX:       # %bb.0: # %entry468; RV32ZDINX-NEXT:    lui a1, %hi(f)469; RV32ZDINX-NEXT:    lw a0, %lo(f+4)(a1)470; RV32ZDINX-NEXT:    lw a1, %lo(f+8)(a1)471; RV32ZDINX-NEXT:    ret472;473; RV32ZDINXUALIGNED-LABEL: foo13:474; RV32ZDINXUALIGNED:       # %bb.0: # %entry475; RV32ZDINXUALIGNED-NEXT:    lui a1, %hi(f)476; RV32ZDINXUALIGNED-NEXT:    lw a0, %lo(f+4)(a1)477; RV32ZDINXUALIGNED-NEXT:    lw a1, %lo(f+8)(a1)478; RV32ZDINXUALIGNED-NEXT:    ret479;480; RV64ZDINX-LABEL: foo13:481; RV64ZDINX:       # %bb.0: # %entry482; RV64ZDINX-NEXT:    lui a0, %hi(f)483; RV64ZDINX-NEXT:    lw a1, %lo(f+8)(a0)484; RV64ZDINX-NEXT:    lwu a0, %lo(f+4)(a0)485; RV64ZDINX-NEXT:    slli a1, a1, 32486; RV64ZDINX-NEXT:    or a0, a1, a0487; RV64ZDINX-NEXT:    ret488entry:489  %add.ptr = getelementptr inbounds i8, ptr @f, i64 4490  %0 = load double, ptr %add.ptr, align 4491  ret double %0492}493 494define double @foo14(ptr nocapture %p) nounwind {495; RV32ZDINX-LABEL: foo14:496; RV32ZDINX:       # %bb.0: # %entry497; RV32ZDINX-NEXT:    lui a1, %hi(f)498; RV32ZDINX-NEXT:    lw a0, %lo(f+8)(a1)499; RV32ZDINX-NEXT:    lw a1, %lo(f+12)(a1)500; RV32ZDINX-NEXT:    ret501;502; RV32ZDINXUALIGNED-LABEL: foo14:503; RV32ZDINXUALIGNED:       # %bb.0: # %entry504; RV32ZDINXUALIGNED-NEXT:    lui a1, %hi(f)505; RV32ZDINXUALIGNED-NEXT:    lw a0, %lo(f+8)(a1)506; RV32ZDINXUALIGNED-NEXT:    lw a1, %lo(f+12)(a1)507; RV32ZDINXUALIGNED-NEXT:    ret508;509; RV64ZDINX-LABEL: foo14:510; RV64ZDINX:       # %bb.0: # %entry511; RV64ZDINX-NEXT:    lui a0, %hi(f)512; RV64ZDINX-NEXT:    ld a0, %lo(f+8)(a0)513; RV64ZDINX-NEXT:    ret514entry:515  %add.ptr = getelementptr inbounds i8, ptr @f, i64 8516  %0 = load double, ptr %add.ptr, align 8517  ret double %0518}519