266 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s3 4;; Check the `jr` instruction does not use `ra` register.5;; Ensure that this function has only one `ret` instruction.6;; ret = jr $ra7 8define void @jr_without_ra(ptr %rtwdev, ptr %chan, ptr %h2c, i8 %.pre, i1 %cmp.i, ptr %tssi_trim.i, i64 %indvars.iv, ptr %arrayidx14.i, i8 %0, ptr %curr_tssi_trim_de, ptr %arrayidx, ptr %switch.gep, ptr %tssi_cck, i64 %switch.load, ptr %curr_tssi_cck_de, ptr %arrayidx14, ptr %curr_tssi_cck_de_20m, ptr %tssi_trim_6g.i, i64 %indvars.iv14, ptr %tssi_mcs.i) nounwind {9; CHECK-LABEL: jr_without_ra:10; CHECK: # %bb.0: # %entry11; CHECK-NEXT: addi.d $sp, $sp, -9612; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill13; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill14; CHECK-NEXT: st.d $s0, $sp, 72 # 8-byte Folded Spill15; CHECK-NEXT: st.d $s1, $sp, 64 # 8-byte Folded Spill16; CHECK-NEXT: st.d $s2, $sp, 56 # 8-byte Folded Spill17; CHECK-NEXT: st.d $s3, $sp, 48 # 8-byte Folded Spill18; CHECK-NEXT: st.d $s4, $sp, 40 # 8-byte Folded Spill19; CHECK-NEXT: st.d $s5, $sp, 32 # 8-byte Folded Spill20; CHECK-NEXT: st.d $s6, $sp, 24 # 8-byte Folded Spill21; CHECK-NEXT: st.d $s7, $sp, 16 # 8-byte Folded Spill22; CHECK-NEXT: st.d $s8, $sp, 8 # 8-byte Folded Spill23; CHECK-NEXT: move $s7, $zero24; CHECK-NEXT: move $s0, $zero25; CHECK-NEXT: ld.d $t0, $sp, 18426; CHECK-NEXT: ld.d $s2, $sp, 17627; CHECK-NEXT: ld.d $s1, $sp, 16828; CHECK-NEXT: ld.d $t1, $sp, 16029; CHECK-NEXT: ld.d $t2, $sp, 15230; CHECK-NEXT: ld.d $t3, $sp, 14431; CHECK-NEXT: ld.d $t4, $sp, 13632; CHECK-NEXT: ld.d $t5, $sp, 12833; CHECK-NEXT: ld.d $t6, $sp, 12034; CHECK-NEXT: ld.d $t7, $sp, 11235; CHECK-NEXT: ld.d $t8, $sp, 10436; CHECK-NEXT: ld.d $fp, $sp, 9637; CHECK-NEXT: andi $a4, $a4, 138; CHECK-NEXT: alsl.d $a6, $a6, $s1, 439; CHECK-NEXT: pcalau12i $s1, %pc_hi20(.LJTI0_0)40; CHECK-NEXT: addi.d $s1, $s1, %pc_lo12(.LJTI0_0)41; CHECK-NEXT: slli.d $s3, $s2, 242; CHECK-NEXT: alsl.d $s2, $s2, $s3, 143; CHECK-NEXT: add.d $s2, $t5, $s244; CHECK-NEXT: addi.w $s4, $zero, -4145; CHECK-NEXT: ori $s3, $zero, 146; CHECK-NEXT: slli.d $s4, $s4, 347; CHECK-NEXT: ori $s6, $zero, 348; CHECK-NEXT: lu32i.d $s6, 26214449; CHECK-NEXT: b .LBB0_450; CHECK-NEXT: .p2align 4, , 1651; CHECK-NEXT: .LBB0_1: # %sw.bb27.i.i52; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=153; CHECK-NEXT: ori $s8, $zero, 154; CHECK-NEXT: .LBB0_2: # %if.else.i10655; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=156; CHECK-NEXT: alsl.d $s5, $s0, $s0, 357; CHECK-NEXT: alsl.d $s0, $s5, $s0, 158; CHECK-NEXT: add.d $s0, $t0, $s059; CHECK-NEXT: ldx.bu $s8, $s0, $s860; CHECK-NEXT: .LBB0_3: # %phy_tssi_get_ofdm_de.exit61; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=162; CHECK-NEXT: st.b $zero, $t5, 063; CHECK-NEXT: st.b $s7, $t3, 064; CHECK-NEXT: st.b $zero, $t8, 065; CHECK-NEXT: st.b $zero, $t1, 066; CHECK-NEXT: st.b $zero, $a1, 067; CHECK-NEXT: st.b $zero, $t2, 068; CHECK-NEXT: st.b $s8, $a5, 069; CHECK-NEXT: ori $s0, $zero, 170; CHECK-NEXT: move $s7, $a371; CHECK-NEXT: .LBB0_4: # %for.body72; CHECK-NEXT: # =>This Inner Loop Header: Depth=173; CHECK-NEXT: beqz $a4, .LBB0_974; CHECK-NEXT: # %bb.5: # %calc_6g.i75; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=176; CHECK-NEXT: move $s7, $zero77; CHECK-NEXT: bnez $zero, .LBB0_878; CHECK-NEXT: # %bb.6: # %calc_6g.i79; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=180; CHECK-NEXT: slli.d $s8, $zero, 381; CHECK-NEXT: ldx.d $s8, $s1, $s882; CHECK-NEXT: jr $s883; CHECK-NEXT: .LBB0_7: # %sw.bb12.i.i84; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=185; CHECK-NEXT: ori $s7, $zero, 186; CHECK-NEXT: .LBB0_8: # %if.else58.i87; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=188; CHECK-NEXT: ldx.bu $s7, $a6, $s789; CHECK-NEXT: b .LBB0_1190; CHECK-NEXT: .p2align 4, , 1691; CHECK-NEXT: .LBB0_9: # %if.end.i92; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=193; CHECK-NEXT: andi $s7, $s7, 25594; CHECK-NEXT: ori $s5, $zero, 5095; CHECK-NEXT: bltu $s5, $s7, .LBB0_1596; CHECK-NEXT: # %bb.10: # %if.end.i97; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=198; CHECK-NEXT: sll.d $s7, $s3, $s799; CHECK-NEXT: and $s8, $s7, $s6100; CHECK-NEXT: move $s7, $fp101; CHECK-NEXT: beqz $s8, .LBB0_15102; CHECK-NEXT: .LBB0_11: # %phy_tssi_get_ofdm_trim_de.exit103; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=1104; CHECK-NEXT: move $s8, $zero105; CHECK-NEXT: st.b $zero, $t7, 0106; CHECK-NEXT: ldx.b $ra, $s2, $t4107; CHECK-NEXT: st.b $zero, $a2, 0108; CHECK-NEXT: st.b $zero, $a7, 0109; CHECK-NEXT: st.b $zero, $t6, 0110; CHECK-NEXT: st.b $ra, $a0, 0111; CHECK-NEXT: bnez $s3, .LBB0_13112; CHECK-NEXT: # %bb.12: # %phy_tssi_get_ofdm_trim_de.exit113; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=1114; CHECK-NEXT: pcalau12i $ra, %pc_hi20(.LJTI0_1)115; CHECK-NEXT: addi.d $ra, $ra, %pc_lo12(.LJTI0_1)116; CHECK-NEXT: ldx.d $s5, $ra, $s4117; CHECK-NEXT: jr $s5118; CHECK-NEXT: .LBB0_13: # %phy_tssi_get_ofdm_trim_de.exit119; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=1120; CHECK-NEXT: bnez $s3, .LBB0_1121; CHECK-NEXT: # %bb.14: # %phy_tssi_get_ofdm_trim_de.exit122; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=1123; CHECK-NEXT: bnez $zero, .LBB0_3124; CHECK-NEXT: b .LBB0_2125; CHECK-NEXT: .LBB0_15: # %sw.bb9.i.i126; CHECK-NEXT: ld.d $s8, $sp, 8 # 8-byte Folded Reload127; CHECK-NEXT: ld.d $s7, $sp, 16 # 8-byte Folded Reload128; CHECK-NEXT: ld.d $s6, $sp, 24 # 8-byte Folded Reload129; CHECK-NEXT: ld.d $s5, $sp, 32 # 8-byte Folded Reload130; CHECK-NEXT: ld.d $s4, $sp, 40 # 8-byte Folded Reload131; CHECK-NEXT: ld.d $s3, $sp, 48 # 8-byte Folded Reload132; CHECK-NEXT: ld.d $s2, $sp, 56 # 8-byte Folded Reload133; CHECK-NEXT: ld.d $s1, $sp, 64 # 8-byte Folded Reload134; CHECK-NEXT: ld.d $s0, $sp, 72 # 8-byte Folded Reload135; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload136; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload137; CHECK-NEXT: addi.d $sp, $sp, 96138; CHECK-NEXT: ret139entry:140 br label %for.body141 142for.body:143 %1 = phi i8 [ 0, %entry ], [ %.pre, %phy_tssi_get_ofdm_de.exit ]144 %indvars.iv143 = phi i64 [ 0, %entry ], [ 1, %phy_tssi_get_ofdm_de.exit ]145 br i1 %cmp.i, label %calc_6g.i, label %if.end.i146 147if.end.i:148 switch i8 %1, label %sw.bb9.i.i [149 i8 1, label %phy_tssi_get_ofdm_trim_de.exit150 i8 50, label %phy_tssi_get_ofdm_trim_de.exit151 i8 0, label %phy_tssi_get_ofdm_trim_de.exit152 ]153 154sw.bb9.i.i:155 ret void156 157calc_6g.i:158 switch i8 1, label %if.else58.i [159 i8 55, label %sw.bb5.i125.i160 i8 54, label %sw.bb5.i125.i161 i8 53, label %sw.bb5.i125.i162 i8 52, label %sw.bb5.i125.i163 i8 51, label %sw.bb5.i125.i164 i8 50, label %sw.bb5.i125.i165 i8 49, label %sw.bb5.i125.i166 i8 56, label %sw.bb5.i125.i167 i8 57, label %sw.bb5.i125.i168 i8 58, label %sw.bb5.i125.i169 i8 59, label %sw.bb5.i125.i170 i8 60, label %sw.bb5.i125.i171 i8 61, label %sw.bb5.i125.i172 i8 -115, label %sw.bb12.i.i173 i8 -116, label %sw.bb12.i.i174 i8 -117, label %sw.bb12.i.i175 i8 -118, label %sw.bb12.i.i176 i8 -119, label %sw.bb12.i.i177 i8 -120, label %sw.bb12.i.i178 i8 -121, label %sw.bb12.i.i179 i8 -122, label %sw.bb12.i.i180 i8 -123, label %sw.bb12.i.i181 i8 -124, label %sw.bb12.i.i182 i8 -125, label %sw.bb12.i.i183 i8 -126, label %sw.bb12.i.i184 i8 -127, label %sw.bb12.i.i185 i8 77, label %sw.bb6.i124.i186 i8 76, label %sw.bb6.i124.i187 i8 75, label %sw.bb6.i124.i188 i8 74, label %sw.bb6.i124.i189 i8 73, label %sw.bb6.i124.i190 i8 72, label %sw.bb6.i124.i191 i8 71, label %sw.bb6.i124.i192 i8 1, label %sw.bb6.i124.i193 i8 69, label %sw.bb6.i124.i194 i8 68, label %sw.bb6.i124.i195 i8 67, label %sw.bb6.i124.i196 i8 66, label %sw.bb6.i124.i197 i8 65, label %sw.bb6.i124.i198 ]199 200sw.bb5.i125.i:201 br label %if.else58.i202 203sw.bb6.i124.i:204 br label %if.else58.i205 206sw.bb12.i.i:207 br label %if.else58.i208 209if.else58.i:210 %retval.0.i120.ph.i = phi i64 [ 0, %calc_6g.i ], [ 1, %sw.bb5.i125.i ], [ 1, %sw.bb6.i124.i ], [ 1, %sw.bb12.i.i ]211 %arrayidx63.i = getelementptr [4 x [16 x i8]], ptr %tssi_trim_6g.i, i64 0, i64 %indvars.iv, i64 %retval.0.i120.ph.i212 %2 = load i8, ptr %arrayidx63.i, align 1213 br label %phy_tssi_get_ofdm_trim_de.exit214 215phy_tssi_get_ofdm_trim_de.exit:216 %retval.0.i = phi i8 [ %2, %if.else58.i ], [ %0, %if.end.i ], [ %0, %if.end.i ], [ %0, %if.end.i ]217 store i8 0, ptr %arrayidx, align 1218 %arrayidx8 = getelementptr [4 x [6 x i8]], ptr %tssi_cck, i64 0, i64 %indvars.iv14, i64 %switch.load219 %3 = load i8, ptr %arrayidx8, align 1220 store i8 0, ptr %h2c, align 1221 store i8 0, ptr %arrayidx14.i, align 1222 store i8 0, ptr %switch.gep, align 1223 store i8 %3, ptr %rtwdev, align 1224 switch i8 0, label %if.else.i106 [225 i8 -87, label %sw.bb27.i.i226 i8 0, label %sw.bb27.i.i227 i8 -89, label %sw.bb27.i.i228 i8 -90, label %sw.bb27.i.i229 i8 -91, label %sw.bb27.i.i230 i8 -92, label %phy_tssi_get_ofdm_de.exit231 i8 -93, label %phy_tssi_get_ofdm_de.exit232 i8 1, label %phy_tssi_get_ofdm_de.exit233 i8 -95, label %sw.bb25.i.i234 i8 -96, label %sw.bb25.i.i235 i8 -97, label %sw.bb25.i.i236 i8 -98, label %sw.bb25.i.i237 i8 -99, label %sw.bb25.i.i238 i8 43, label %phy_tssi_get_ofdm_de.exit239 i8 42, label %phy_tssi_get_ofdm_de.exit240 i8 41, label %phy_tssi_get_ofdm_de.exit241 ]242 243sw.bb25.i.i:244 br label %if.else.i106245 246sw.bb27.i.i:247 br label %if.else.i106248 249if.else.i106:250 %retval.0.i.ph.i107 = phi i64 [ 0, %phy_tssi_get_ofdm_trim_de.exit ], [ 1, %sw.bb25.i.i ], [ 1, %sw.bb27.i.i ]251 %arrayidx26.i109 = getelementptr [4 x [19 x i8]], ptr %tssi_mcs.i, i64 0, i64 %indvars.iv143, i64 %retval.0.i.ph.i107252 %4 = load i8, ptr %arrayidx26.i109, align 1253 br label %phy_tssi_get_ofdm_de.exit254 255phy_tssi_get_ofdm_de.exit:256 %retval.0.i110 = phi i8 [ %4, %if.else.i106 ], [ 0, %phy_tssi_get_ofdm_trim_de.exit ], [ 0, %phy_tssi_get_ofdm_trim_de.exit ], [ 0, %phy_tssi_get_ofdm_trim_de.exit ], [ 0, %phy_tssi_get_ofdm_trim_de.exit ], [ 0, %phy_tssi_get_ofdm_trim_de.exit ], [ 0, %phy_tssi_get_ofdm_trim_de.exit ]257 store i8 0, ptr %tssi_cck, align 1258 store i8 %retval.0.i, ptr %curr_tssi_cck_de, align 1259 store i8 0, ptr %curr_tssi_trim_de, align 1260 store i8 0, ptr %curr_tssi_cck_de_20m, align 1261 store i8 0, ptr %chan, align 1262 store i8 0, ptr %arrayidx14, align 1263 store i8 %retval.0.i110, ptr %tssi_trim.i, align 1264 br label %for.body265}266