brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.8 KiB · 9142e71 Raw
478 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --relocation-model=pic \3; RUN:   --verify-machineinstrs < %s | FileCheck -check-prefixes=LA32 %s4; RUN: llc --mtriple=loongarch64 --relocation-model=pic \5; RUN:   --verify-machineinstrs < %s | FileCheck -check-prefixes=LA64 %s6; RUN: llc --mtriple=loongarch64 --relocation-model=pic --code-model=large \7; RUN:   --verify-machineinstrs < %s | FileCheck -check-prefixes=LA64LARGE %s8 9; Verifies that MachineLICM can hoist address generation pseudos out of loops.10 11@l = protected global i32 0, align 412 13define void @test_la_pcrel(i32 signext %n) {14; LA32-LABEL: test_la_pcrel:15; LA32:       # %bb.0: # %entry16; LA32-NEXT:    move $a1, $zero17; LA32-NEXT:    pcalau12i $a2, %pc_hi20(l)18; LA32-NEXT:    .p2align 4, , 1619; LA32-NEXT:  .LBB0_1: # %loop20; LA32-NEXT:    # =>This Inner Loop Header: Depth=121; LA32-NEXT:    ld.w $zero, $a2, %pc_lo12(l)22; LA32-NEXT:    addi.w $a1, $a1, 123; LA32-NEXT:    blt $a1, $a0, .LBB0_124; LA32-NEXT:  # %bb.2: # %ret25; LA32-NEXT:    ret26;27; LA64-LABEL: test_la_pcrel:28; LA64:       # %bb.0: # %entry29; LA64-NEXT:    move $a1, $zero30; LA64-NEXT:    pcalau12i $a2, %pc_hi20(l)31; LA64-NEXT:    .p2align 4, , 1632; LA64-NEXT:  .LBB0_1: # %loop33; LA64-NEXT:    # =>This Inner Loop Header: Depth=134; LA64-NEXT:    ld.w $zero, $a2, %pc_lo12(l)35; LA64-NEXT:    addi.w $a1, $a1, 136; LA64-NEXT:    blt $a1, $a0, .LBB0_137; LA64-NEXT:  # %bb.2: # %ret38; LA64-NEXT:    ret39;40; LA64LARGE-LABEL: test_la_pcrel:41; LA64LARGE:       # %bb.0: # %entry42; LA64LARGE-NEXT:    pcalau12i $a1, %pc_hi20(l)43; LA64LARGE-NEXT:    addi.d $a2, $zero, %pc_lo12(l)44; LA64LARGE-NEXT:    lu32i.d $a2, %pc64_lo20(l)45; LA64LARGE-NEXT:    lu52i.d $a2, $a2, %pc64_hi12(l)46; LA64LARGE-NEXT:    move $a3, $zero47; LA64LARGE-NEXT:    .p2align 4, , 1648; LA64LARGE-NEXT:  .LBB0_1: # %loop49; LA64LARGE-NEXT:    # =>This Inner Loop Header: Depth=150; LA64LARGE-NEXT:    ldx.w $zero, $a2, $a151; LA64LARGE-NEXT:    addi.w $a3, $a3, 152; LA64LARGE-NEXT:    blt $a3, $a0, .LBB0_153; LA64LARGE-NEXT:  # %bb.2: # %ret54; LA64LARGE-NEXT:    ret55entry:56  br label %loop57 58loop:59  %i = phi i32 [ %inc, %loop ], [ 0, %entry ]60  %0 = load volatile i32, ptr @l, align 461  %inc = add nuw nsw i32 %i, 162  %cmp = icmp slt i32 %inc, %n63  br i1 %cmp, label %loop, label %ret64 65ret:66  ret void67}68 69@g = global i32 0, align 470 71define void @test_la_got(i32 signext %n) {72; LA32-LABEL: test_la_got:73; LA32:       # %bb.0: # %entry74; LA32-NEXT:    pcalau12i $a1, %got_pc_hi20(g)75; LA32-NEXT:    ld.w $a1, $a1, %got_pc_lo12(g)76; LA32-NEXT:    move $a2, $zero77; LA32-NEXT:    .p2align 4, , 1678; LA32-NEXT:  .LBB1_1: # %loop79; LA32-NEXT:    # =>This Inner Loop Header: Depth=180; LA32-NEXT:    ld.w $zero, $a1, 081; LA32-NEXT:    addi.w $a2, $a2, 182; LA32-NEXT:    blt $a2, $a0, .LBB1_183; LA32-NEXT:  # %bb.2: # %ret84; LA32-NEXT:    ret85;86; LA64-LABEL: test_la_got:87; LA64:       # %bb.0: # %entry88; LA64-NEXT:    pcalau12i $a1, %got_pc_hi20(g)89; LA64-NEXT:    ld.d $a1, $a1, %got_pc_lo12(g)90; LA64-NEXT:    move $a2, $zero91; LA64-NEXT:    .p2align 4, , 1692; LA64-NEXT:  .LBB1_1: # %loop93; LA64-NEXT:    # =>This Inner Loop Header: Depth=194; LA64-NEXT:    ld.w $zero, $a1, 095; LA64-NEXT:    addi.w $a2, $a2, 196; LA64-NEXT:    blt $a2, $a0, .LBB1_197; LA64-NEXT:  # %bb.2: # %ret98; LA64-NEXT:    ret99;100; LA64LARGE-LABEL: test_la_got:101; LA64LARGE:       # %bb.0: # %entry102; LA64LARGE-NEXT:    pcalau12i $a1, %got_pc_hi20(g)103; LA64LARGE-NEXT:    addi.d $a2, $zero, %got_pc_lo12(g)104; LA64LARGE-NEXT:    lu32i.d $a2, %got64_pc_lo20(g)105; LA64LARGE-NEXT:    lu52i.d $a2, $a2, %got64_pc_hi12(g)106; LA64LARGE-NEXT:    ldx.d $a1, $a2, $a1107; LA64LARGE-NEXT:    move $a2, $zero108; LA64LARGE-NEXT:    .p2align 4, , 16109; LA64LARGE-NEXT:  .LBB1_1: # %loop110; LA64LARGE-NEXT:    # =>This Inner Loop Header: Depth=1111; LA64LARGE-NEXT:    ld.w $zero, $a1, 0112; LA64LARGE-NEXT:    addi.w $a2, $a2, 1113; LA64LARGE-NEXT:    blt $a2, $a0, .LBB1_1114; LA64LARGE-NEXT:  # %bb.2: # %ret115; LA64LARGE-NEXT:    ret116entry:117  br label %loop118 119loop:120  %i = phi i32 [ %inc, %loop ], [ 0, %entry ]121  %0 = load volatile i32, ptr @g, align 4122  %inc = add nuw nsw i32 %i, 1123  %cmp = icmp slt i32 %inc, %n124  br i1 %cmp, label %loop, label %ret125 126ret:127  ret void128}129 130@ie = external thread_local(initialexec) global i32131 132define void @test_la_tls_ie(i32 signext %n) {133; LA32-LABEL: test_la_tls_ie:134; LA32:       # %bb.0: # %entry135; LA32-NEXT:    pcalau12i $a1, %ie_pc_hi20(ie)136; LA32-NEXT:    ld.w $a2, $a1, %ie_pc_lo12(ie)137; LA32-NEXT:    move $a1, $zero138; LA32-NEXT:    add.w $a2, $a2, $tp139; LA32-NEXT:    .p2align 4, , 16140; LA32-NEXT:  .LBB2_1: # %loop141; LA32-NEXT:    # =>This Inner Loop Header: Depth=1142; LA32-NEXT:    ld.w $zero, $a2, 0143; LA32-NEXT:    addi.w $a1, $a1, 1144; LA32-NEXT:    blt $a1, $a0, .LBB2_1145; LA32-NEXT:  # %bb.2: # %ret146; LA32-NEXT:    ret147;148; LA64-LABEL: test_la_tls_ie:149; LA64:       # %bb.0: # %entry150; LA64-NEXT:    pcalau12i $a1, %ie_pc_hi20(ie)151; LA64-NEXT:    ld.d $a1, $a1, %ie_pc_lo12(ie)152; LA64-NEXT:    move $a2, $zero153; LA64-NEXT:    .p2align 4, , 16154; LA64-NEXT:  .LBB2_1: # %loop155; LA64-NEXT:    # =>This Inner Loop Header: Depth=1156; LA64-NEXT:    ldx.w $zero, $a1, $tp157; LA64-NEXT:    addi.w $a2, $a2, 1158; LA64-NEXT:    blt $a2, $a0, .LBB2_1159; LA64-NEXT:  # %bb.2: # %ret160; LA64-NEXT:    ret161;162; LA64LARGE-LABEL: test_la_tls_ie:163; LA64LARGE:       # %bb.0: # %entry164; LA64LARGE-NEXT:    pcalau12i $a1, %ie_pc_hi20(ie)165; LA64LARGE-NEXT:    addi.d $a2, $zero, %ie_pc_lo12(ie)166; LA64LARGE-NEXT:    lu32i.d $a2, %ie64_pc_lo20(ie)167; LA64LARGE-NEXT:    lu52i.d $a2, $a2, %ie64_pc_hi12(ie)168; LA64LARGE-NEXT:    ldx.d $a1, $a2, $a1169; LA64LARGE-NEXT:    move $a2, $zero170; LA64LARGE-NEXT:    .p2align 4, , 16171; LA64LARGE-NEXT:  .LBB2_1: # %loop172; LA64LARGE-NEXT:    # =>This Inner Loop Header: Depth=1173; LA64LARGE-NEXT:    ldx.w $zero, $a1, $tp174; LA64LARGE-NEXT:    addi.w $a2, $a2, 1175; LA64LARGE-NEXT:    blt $a2, $a0, .LBB2_1176; LA64LARGE-NEXT:  # %bb.2: # %ret177; LA64LARGE-NEXT:    ret178entry:179  br label %loop180 181loop:182  %i = phi i32 [ %inc, %loop ], [ 0, %entry ]183  %0 = load volatile i32, ptr @ie, align 4184  %inc = add nuw nsw i32 %i, 1185  %cmp = icmp slt i32 %inc, %n186  br i1 %cmp, label %loop, label %ret187 188ret:189  ret void190}191 192@ld = external thread_local(localdynamic) global i32193 194define void @test_la_tls_ld(i32 signext %n) {195; LA32-LABEL: test_la_tls_ld:196; LA32:       # %bb.0: # %entry197; LA32-NEXT:    addi.w $sp, $sp, -16198; LA32-NEXT:    .cfi_def_cfa_offset 16199; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill200; LA32-NEXT:    st.w $fp, $sp, 8 # 4-byte Folded Spill201; LA32-NEXT:    st.w $s0, $sp, 4 # 4-byte Folded Spill202; LA32-NEXT:    st.w $s1, $sp, 0 # 4-byte Folded Spill203; LA32-NEXT:    .cfi_offset 1, -4204; LA32-NEXT:    .cfi_offset 22, -8205; LA32-NEXT:    .cfi_offset 23, -12206; LA32-NEXT:    .cfi_offset 24, -16207; LA32-NEXT:    move $fp, $a0208; LA32-NEXT:    move $s1, $zero209; LA32-NEXT:    pcalau12i $a0, %ld_pc_hi20(ld)210; LA32-NEXT:    addi.w $s0, $a0, %got_pc_lo12(ld)211; LA32-NEXT:    .p2align 4, , 16212; LA32-NEXT:  .LBB3_1: # %loop213; LA32-NEXT:    # =>This Inner Loop Header: Depth=1214; LA32-NEXT:    move $a0, $s0215; LA32-NEXT:    bl __tls_get_addr216; LA32-NEXT:    ld.w $zero, $a0, 0217; LA32-NEXT:    addi.w $s1, $s1, 1218; LA32-NEXT:    blt $s1, $fp, .LBB3_1219; LA32-NEXT:  # %bb.2: # %ret220; LA32-NEXT:    ld.w $s1, $sp, 0 # 4-byte Folded Reload221; LA32-NEXT:    ld.w $s0, $sp, 4 # 4-byte Folded Reload222; LA32-NEXT:    ld.w $fp, $sp, 8 # 4-byte Folded Reload223; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload224; LA32-NEXT:    addi.w $sp, $sp, 16225; LA32-NEXT:    ret226;227; LA64-LABEL: test_la_tls_ld:228; LA64:       # %bb.0: # %entry229; LA64-NEXT:    addi.d $sp, $sp, -32230; LA64-NEXT:    .cfi_def_cfa_offset 32231; LA64-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill232; LA64-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill233; LA64-NEXT:    st.d $s0, $sp, 8 # 8-byte Folded Spill234; LA64-NEXT:    st.d $s1, $sp, 0 # 8-byte Folded Spill235; LA64-NEXT:    .cfi_offset 1, -8236; LA64-NEXT:    .cfi_offset 22, -16237; LA64-NEXT:    .cfi_offset 23, -24238; LA64-NEXT:    .cfi_offset 24, -32239; LA64-NEXT:    move $fp, $a0240; LA64-NEXT:    move $s1, $zero241; LA64-NEXT:    pcalau12i $a0, %ld_pc_hi20(ld)242; LA64-NEXT:    addi.d $s0, $a0, %got_pc_lo12(ld)243; LA64-NEXT:    .p2align 4, , 16244; LA64-NEXT:  .LBB3_1: # %loop245; LA64-NEXT:    # =>This Inner Loop Header: Depth=1246; LA64-NEXT:    move $a0, $s0247; LA64-NEXT:    pcaddu18i $ra, %call36(__tls_get_addr)248; LA64-NEXT:    jirl $ra, $ra, 0249; LA64-NEXT:    ld.w $zero, $a0, 0250; LA64-NEXT:    addi.w $s1, $s1, 1251; LA64-NEXT:    blt $s1, $fp, .LBB3_1252; LA64-NEXT:  # %bb.2: # %ret253; LA64-NEXT:    ld.d $s1, $sp, 0 # 8-byte Folded Reload254; LA64-NEXT:    ld.d $s0, $sp, 8 # 8-byte Folded Reload255; LA64-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload256; LA64-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload257; LA64-NEXT:    addi.d $sp, $sp, 32258; LA64-NEXT:    ret259;260; LA64LARGE-LABEL: test_la_tls_ld:261; LA64LARGE:       # %bb.0: # %entry262; LA64LARGE-NEXT:    addi.d $sp, $sp, -32263; LA64LARGE-NEXT:    .cfi_def_cfa_offset 32264; LA64LARGE-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill265; LA64LARGE-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill266; LA64LARGE-NEXT:    st.d $s0, $sp, 8 # 8-byte Folded Spill267; LA64LARGE-NEXT:    st.d $s1, $sp, 0 # 8-byte Folded Spill268; LA64LARGE-NEXT:    .cfi_offset 1, -8269; LA64LARGE-NEXT:    .cfi_offset 22, -16270; LA64LARGE-NEXT:    .cfi_offset 23, -24271; LA64LARGE-NEXT:    .cfi_offset 24, -32272; LA64LARGE-NEXT:    move $fp, $a0273; LA64LARGE-NEXT:    pcalau12i $a0, %ld_pc_hi20(ld)274; LA64LARGE-NEXT:    addi.d $a1, $zero, %got_pc_lo12(ld)275; LA64LARGE-NEXT:    lu32i.d $a1, %got64_pc_lo20(ld)276; LA64LARGE-NEXT:    lu52i.d $a1, $a1, %got64_pc_hi12(ld)277; LA64LARGE-NEXT:    move $s1, $zero278; LA64LARGE-NEXT:    add.d $s0, $a1, $a0279; LA64LARGE-NEXT:    .p2align 4, , 16280; LA64LARGE-NEXT:  .LBB3_1: # %loop281; LA64LARGE-NEXT:    # =>This Inner Loop Header: Depth=1282; LA64LARGE-NEXT:    move $a0, $s0283; LA64LARGE-NEXT:    pcalau12i $a1, %got_pc_hi20(__tls_get_addr)284; LA64LARGE-NEXT:    addi.d $ra, $zero, %got_pc_lo12(__tls_get_addr)285; LA64LARGE-NEXT:    lu32i.d $ra, %got64_pc_lo20(__tls_get_addr)286; LA64LARGE-NEXT:    lu52i.d $ra, $ra, %got64_pc_hi12(__tls_get_addr)287; LA64LARGE-NEXT:    ldx.d $ra, $ra, $a1288; LA64LARGE-NEXT:    jirl $ra, $ra, 0289; LA64LARGE-NEXT:    ld.w $zero, $a0, 0290; LA64LARGE-NEXT:    addi.w $s1, $s1, 1291; LA64LARGE-NEXT:    blt $s1, $fp, .LBB3_1292; LA64LARGE-NEXT:  # %bb.2: # %ret293; LA64LARGE-NEXT:    ld.d $s1, $sp, 0 # 8-byte Folded Reload294; LA64LARGE-NEXT:    ld.d $s0, $sp, 8 # 8-byte Folded Reload295; LA64LARGE-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload296; LA64LARGE-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload297; LA64LARGE-NEXT:    addi.d $sp, $sp, 32298; LA64LARGE-NEXT:    ret299entry:300  br label %loop301 302loop:303  %i = phi i32 [ %inc, %loop ], [ 0, %entry ]304  %0 = load volatile i32, ptr @ld, align 4305  %inc = add nuw nsw i32 %i, 1306  %cmp = icmp slt i32 %inc, %n307  br i1 %cmp, label %loop, label %ret308 309ret:310  ret void311}312 313@le = external thread_local(localexec) global i32314 315define void @test_la_tls_le(i32 signext %n) {316; LA32-LABEL: test_la_tls_le:317; LA32:       # %bb.0: # %entry318; LA32-NEXT:    move $a1, $zero319; LA32-NEXT:    lu12i.w $a2, %le_hi20_r(le)320; LA32-NEXT:    add.w $a2, $a2, $tp, %le_add_r(le)321; LA32-NEXT:    .p2align 4, , 16322; LA32-NEXT:  .LBB4_1: # %loop323; LA32-NEXT:    # =>This Inner Loop Header: Depth=1324; LA32-NEXT:    ld.w $zero, $a2, %le_lo12_r(le)325; LA32-NEXT:    addi.w $a1, $a1, 1326; LA32-NEXT:    blt $a1, $a0, .LBB4_1327; LA32-NEXT:  # %bb.2: # %ret328; LA32-NEXT:    ret329;330; LA64-LABEL: test_la_tls_le:331; LA64:       # %bb.0: # %entry332; LA64-NEXT:    move $a1, $zero333; LA64-NEXT:    lu12i.w $a2, %le_hi20_r(le)334; LA64-NEXT:    add.d $a2, $a2, $tp, %le_add_r(le)335; LA64-NEXT:    .p2align 4, , 16336; LA64-NEXT:  .LBB4_1: # %loop337; LA64-NEXT:    # =>This Inner Loop Header: Depth=1338; LA64-NEXT:    ld.w $zero, $a2, %le_lo12_r(le)339; LA64-NEXT:    addi.w $a1, $a1, 1340; LA64-NEXT:    blt $a1, $a0, .LBB4_1341; LA64-NEXT:  # %bb.2: # %ret342; LA64-NEXT:    ret343;344; LA64LARGE-LABEL: test_la_tls_le:345; LA64LARGE:       # %bb.0: # %entry346; LA64LARGE-NEXT:    move $a1, $zero347; LA64LARGE-NEXT:    lu12i.w $a2, %le_hi20(le)348; LA64LARGE-NEXT:    ori $a2, $a2, %le_lo12(le)349; LA64LARGE-NEXT:    lu32i.d $a2, %le64_lo20(le)350; LA64LARGE-NEXT:    lu52i.d $a2, $a2, %le64_hi12(le)351; LA64LARGE-NEXT:    .p2align 4, , 16352; LA64LARGE-NEXT:  .LBB4_1: # %loop353; LA64LARGE-NEXT:    # =>This Inner Loop Header: Depth=1354; LA64LARGE-NEXT:    ldx.w $zero, $a2, $tp355; LA64LARGE-NEXT:    addi.w $a1, $a1, 1356; LA64LARGE-NEXT:    blt $a1, $a0, .LBB4_1357; LA64LARGE-NEXT:  # %bb.2: # %ret358; LA64LARGE-NEXT:    ret359entry:360  br label %loop361 362loop:363  %i = phi i32 [ %inc, %loop ], [ 0, %entry ]364  %0 = load volatile i32, ptr @le, align 4365  %inc = add nuw nsw i32 %i, 1366  %cmp = icmp slt i32 %inc, %n367  br i1 %cmp, label %loop, label %ret368 369ret:370  ret void371}372 373@gd = external thread_local global i32374 375define void @test_la_tls_gd(i32 signext %n) nounwind {376; LA32-LABEL: test_la_tls_gd:377; LA32:       # %bb.0: # %entry378; LA32-NEXT:    addi.w $sp, $sp, -16379; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill380; LA32-NEXT:    st.w $fp, $sp, 8 # 4-byte Folded Spill381; LA32-NEXT:    st.w $s0, $sp, 4 # 4-byte Folded Spill382; LA32-NEXT:    st.w $s1, $sp, 0 # 4-byte Folded Spill383; LA32-NEXT:    move $fp, $a0384; LA32-NEXT:    move $s1, $zero385; LA32-NEXT:    pcalau12i $a0, %gd_pc_hi20(gd)386; LA32-NEXT:    addi.w $s0, $a0, %got_pc_lo12(gd)387; LA32-NEXT:    .p2align 4, , 16388; LA32-NEXT:  .LBB5_1: # %loop389; LA32-NEXT:    # =>This Inner Loop Header: Depth=1390; LA32-NEXT:    move $a0, $s0391; LA32-NEXT:    bl __tls_get_addr392; LA32-NEXT:    ld.w $zero, $a0, 0393; LA32-NEXT:    addi.w $s1, $s1, 1394; LA32-NEXT:    blt $s1, $fp, .LBB5_1395; LA32-NEXT:  # %bb.2: # %ret396; LA32-NEXT:    ld.w $s1, $sp, 0 # 4-byte Folded Reload397; LA32-NEXT:    ld.w $s0, $sp, 4 # 4-byte Folded Reload398; LA32-NEXT:    ld.w $fp, $sp, 8 # 4-byte Folded Reload399; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload400; LA32-NEXT:    addi.w $sp, $sp, 16401; LA32-NEXT:    ret402;403; LA64-LABEL: test_la_tls_gd:404; LA64:       # %bb.0: # %entry405; LA64-NEXT:    addi.d $sp, $sp, -32406; LA64-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill407; LA64-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill408; LA64-NEXT:    st.d $s0, $sp, 8 # 8-byte Folded Spill409; LA64-NEXT:    st.d $s1, $sp, 0 # 8-byte Folded Spill410; LA64-NEXT:    move $fp, $a0411; LA64-NEXT:    move $s1, $zero412; LA64-NEXT:    pcalau12i $a0, %gd_pc_hi20(gd)413; LA64-NEXT:    addi.d $s0, $a0, %got_pc_lo12(gd)414; LA64-NEXT:    .p2align 4, , 16415; LA64-NEXT:  .LBB5_1: # %loop416; LA64-NEXT:    # =>This Inner Loop Header: Depth=1417; LA64-NEXT:    move $a0, $s0418; LA64-NEXT:    pcaddu18i $ra, %call36(__tls_get_addr)419; LA64-NEXT:    jirl $ra, $ra, 0420; LA64-NEXT:    ld.w $zero, $a0, 0421; LA64-NEXT:    addi.w $s1, $s1, 1422; LA64-NEXT:    blt $s1, $fp, .LBB5_1423; LA64-NEXT:  # %bb.2: # %ret424; LA64-NEXT:    ld.d $s1, $sp, 0 # 8-byte Folded Reload425; LA64-NEXT:    ld.d $s0, $sp, 8 # 8-byte Folded Reload426; LA64-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload427; LA64-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload428; LA64-NEXT:    addi.d $sp, $sp, 32429; LA64-NEXT:    ret430;431; LA64LARGE-LABEL: test_la_tls_gd:432; LA64LARGE:       # %bb.0: # %entry433; LA64LARGE-NEXT:    addi.d $sp, $sp, -32434; LA64LARGE-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill435; LA64LARGE-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill436; LA64LARGE-NEXT:    st.d $s0, $sp, 8 # 8-byte Folded Spill437; LA64LARGE-NEXT:    st.d $s1, $sp, 0 # 8-byte Folded Spill438; LA64LARGE-NEXT:    move $fp, $a0439; LA64LARGE-NEXT:    pcalau12i $a0, %gd_pc_hi20(gd)440; LA64LARGE-NEXT:    addi.d $a1, $zero, %got_pc_lo12(gd)441; LA64LARGE-NEXT:    lu32i.d $a1, %got64_pc_lo20(gd)442; LA64LARGE-NEXT:    lu52i.d $a1, $a1, %got64_pc_hi12(gd)443; LA64LARGE-NEXT:    move $s1, $zero444; LA64LARGE-NEXT:    add.d $s0, $a1, $a0445; LA64LARGE-NEXT:    .p2align 4, , 16446; LA64LARGE-NEXT:  .LBB5_1: # %loop447; LA64LARGE-NEXT:    # =>This Inner Loop Header: Depth=1448; LA64LARGE-NEXT:    move $a0, $s0449; LA64LARGE-NEXT:    pcalau12i $a1, %got_pc_hi20(__tls_get_addr)450; LA64LARGE-NEXT:    addi.d $ra, $zero, %got_pc_lo12(__tls_get_addr)451; LA64LARGE-NEXT:    lu32i.d $ra, %got64_pc_lo20(__tls_get_addr)452; LA64LARGE-NEXT:    lu52i.d $ra, $ra, %got64_pc_hi12(__tls_get_addr)453; LA64LARGE-NEXT:    ldx.d $ra, $ra, $a1454; LA64LARGE-NEXT:    jirl $ra, $ra, 0455; LA64LARGE-NEXT:    ld.w $zero, $a0, 0456; LA64LARGE-NEXT:    addi.w $s1, $s1, 1457; LA64LARGE-NEXT:    blt $s1, $fp, .LBB5_1458; LA64LARGE-NEXT:  # %bb.2: # %ret459; LA64LARGE-NEXT:    ld.d $s1, $sp, 0 # 8-byte Folded Reload460; LA64LARGE-NEXT:    ld.d $s0, $sp, 8 # 8-byte Folded Reload461; LA64LARGE-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload462; LA64LARGE-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload463; LA64LARGE-NEXT:    addi.d $sp, $sp, 32464; LA64LARGE-NEXT:    ret465entry:466  br label %loop467 468loop:469  %i = phi i32 [ %inc, %loop ], [ 0, %entry ]470  %0 = load volatile i32, ptr @gd, align 4471  %inc = add nuw nsw i32 %i, 1472  %cmp = icmp slt i32 %inc, %n473  br i1 %cmp, label %loop, label %ret474 475ret:476  ret void477}478