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