736 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc < %s -mtriple=ve | FileCheck %s3; RUN: llc < %s -mtriple=ve -relocation-model=pic \4; RUN: | FileCheck %s -check-prefix=PIC5 6@switch.table.br_jt4 = private unnamed_addr constant [4 x i32] [i32 3, i32 0, i32 4, i32 7], align 47@switch.table.br_jt7 = private unnamed_addr constant [9 x i32] [i32 3, i32 0, i32 4, i32 7, i32 3, i32 3, i32 5, i32 11, i32 10], align 48@switch.table.br_jt8 = private unnamed_addr constant [9 x i32] [i32 3, i32 0, i32 4, i32 7, i32 3, i32 1, i32 5, i32 11, i32 10], align 49 10; Function Attrs: norecurse nounwind readnone11define signext i32 @br_jt3(i32 signext %0) {12; CHECK-LABEL: br_jt3:13; CHECK: # %bb.0:14; CHECK-NEXT: and %s0, %s0, (32)015; CHECK-NEXT: breq.w 1, %s0, .LBB0_116; CHECK-NEXT: # %bb.2:17; CHECK-NEXT: breq.w 4, %s0, .LBB0_518; CHECK-NEXT: # %bb.3:19; CHECK-NEXT: brne.w 2, %s0, .LBB0_620; CHECK-NEXT: # %bb.4:21; CHECK-NEXT: or %s0, 0, (0)122; CHECK-NEXT: adds.w.sx %s0, %s0, (0)123; CHECK-NEXT: b.l.t (, %s10)24; CHECK-NEXT: .LBB0_5:25; CHECK-NEXT: or %s0, 7, (0)126; CHECK-NEXT: .LBB0_6:27; CHECK-NEXT: adds.w.sx %s0, %s0, (0)128; CHECK-NEXT: b.l.t (, %s10)29; CHECK-NEXT: .LBB0_1:30; CHECK-NEXT: or %s0, 3, (0)131; CHECK-NEXT: adds.w.sx %s0, %s0, (0)132; CHECK-NEXT: b.l.t (, %s10)33;34; PIC-LABEL: br_jt3:35; PIC: # %bb.0:36; PIC-NEXT: and %s0, %s0, (32)037; PIC-NEXT: breq.w 1, %s0, .LBB0_138; PIC-NEXT: # %bb.2:39; PIC-NEXT: breq.w 4, %s0, .LBB0_540; PIC-NEXT: # %bb.3:41; PIC-NEXT: brne.w 2, %s0, .LBB0_642; PIC-NEXT: # %bb.4:43; PIC-NEXT: or %s0, 0, (0)144; PIC-NEXT: adds.w.sx %s0, %s0, (0)145; PIC-NEXT: b.l.t (, %s10)46; PIC-NEXT: .LBB0_5:47; PIC-NEXT: or %s0, 7, (0)148; PIC-NEXT: .LBB0_6:49; PIC-NEXT: adds.w.sx %s0, %s0, (0)150; PIC-NEXT: b.l.t (, %s10)51; PIC-NEXT: .LBB0_1:52; PIC-NEXT: or %s0, 3, (0)153; PIC-NEXT: adds.w.sx %s0, %s0, (0)154; PIC-NEXT: b.l.t (, %s10)55 switch i32 %0, label %4 [56 i32 1, label %557 i32 2, label %258 i32 4, label %359 ]60 612: ; preds = %162 br label %563 643: ; preds = %165 br label %566 674: ; preds = %168 br label %569 705: ; preds = %1, %4, %3, %271 %6 = phi i32 [ %0, %4 ], [ 7, %3 ], [ 0, %2 ], [ 3, %1 ]72 ret i32 %673}74 75; Function Attrs: norecurse nounwind readnone76define signext i32 @br_jt4(i32 signext %0) {77; CHECK-LABEL: br_jt4:78; CHECK: # %bb.0:79; CHECK-NEXT: and %s0, %s0, (32)080; CHECK-NEXT: adds.w.sx %s1, -1, %s081; CHECK-NEXT: cmpu.w %s2, 3, %s182; CHECK-NEXT: brgt.w 0, %s2, .LBB1_283; CHECK-NEXT: # %bb.1:84; CHECK-NEXT: adds.w.sx %s0, %s1, (0)185; CHECK-NEXT: sll %s0, %s0, 286; CHECK-NEXT: lea %s1, .Lswitch.table.br_jt4@lo87; CHECK-NEXT: and %s1, %s1, (32)088; CHECK-NEXT: lea.sl %s1, .Lswitch.table.br_jt4@hi(, %s1)89; CHECK-NEXT: ldl.sx %s0, (%s0, %s1)90; CHECK-NEXT: b.l.t (, %s10)91; CHECK-NEXT: .LBB1_2:92; CHECK-NEXT: adds.w.sx %s0, %s0, (0)193; CHECK-NEXT: b.l.t (, %s10)94;95; PIC-LABEL: br_jt4:96; PIC: # %bb.0:97; PIC-NEXT: st %s15, 24(, %s11)98; PIC-NEXT: st %s16, 32(, %s11)99; PIC-NEXT: and %s0, %s0, (32)0100; PIC-NEXT: adds.w.sx %s1, -1, %s0101; PIC-NEXT: cmpu.w %s2, 3, %s1102; PIC-NEXT: lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)103; PIC-NEXT: and %s15, %s15, (32)0104; PIC-NEXT: sic %s16105; PIC-NEXT: lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)106; PIC-NEXT: brgt.w 0, %s2, .LBB1_2107; PIC-NEXT: # %bb.1:108; PIC-NEXT: adds.w.sx %s0, %s1, (0)1109; PIC-NEXT: sll %s0, %s0, 2110; PIC-NEXT: lea %s1, .Lswitch.table.br_jt4@gotoff_lo111; PIC-NEXT: and %s1, %s1, (32)0112; PIC-NEXT: lea.sl %s1, .Lswitch.table.br_jt4@gotoff_hi(%s1, %s15)113; PIC-NEXT: ldl.sx %s0, (%s0, %s1)114; PIC-NEXT: br.l.t .LBB1_3115; PIC-NEXT: .LBB1_2:116; PIC-NEXT: adds.w.sx %s0, %s0, (0)1117; PIC-NEXT: .LBB1_3:118; PIC-NEXT: ld %s16, 32(, %s11)119; PIC-NEXT: ld %s15, 24(, %s11)120; PIC-NEXT: b.l.t (, %s10)121 %2 = add i32 %0, -1122 %3 = icmp ult i32 %2, 4123 br i1 %3, label %4, label %8124 1254: ; preds = %1126 %5 = sext i32 %2 to i64127 %6 = getelementptr inbounds [4 x i32], ptr @switch.table.br_jt4, i64 0, i64 %5128 %7 = load i32, ptr %6, align 4129 ret i32 %7130 1318: ; preds = %1132 ret i32 %0133}134 135; Function Attrs: norecurse nounwind readnone136define signext i32 @br_jt7(i32 signext %0) {137; CHECK-LABEL: br_jt7:138; CHECK: # %bb.0:139; CHECK-NEXT: and %s0, %s0, (32)0140; CHECK-NEXT: adds.w.sx %s1, -1, %s0141; CHECK-NEXT: cmpu.w %s2, 8, %s1142; CHECK-NEXT: brgt.w 0, %s2, .LBB2_3143; CHECK-NEXT: # %bb.1:144; CHECK-NEXT: and %s2, %s1, (48)0145; CHECK-NEXT: lea %s3, 463146; CHECK-NEXT: and %s3, %s3, (32)0147; CHECK-NEXT: srl %s2, %s3, %s2148; CHECK-NEXT: and %s2, 1, %s2149; CHECK-NEXT: brne.w 0, %s2, .LBB2_2150; CHECK-NEXT: .LBB2_3:151; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1152; CHECK-NEXT: b.l.t (, %s10)153; CHECK-NEXT: .LBB2_2:154; CHECK-NEXT: adds.w.sx %s0, %s1, (0)1155; CHECK-NEXT: sll %s0, %s0, 2156; CHECK-NEXT: lea %s1, .Lswitch.table.br_jt7@lo157; CHECK-NEXT: and %s1, %s1, (32)0158; CHECK-NEXT: lea.sl %s1, .Lswitch.table.br_jt7@hi(, %s1)159; CHECK-NEXT: ldl.sx %s0, (%s0, %s1)160; CHECK-NEXT: b.l.t (, %s10)161;162; PIC-LABEL: br_jt7:163; PIC: # %bb.0:164; PIC-NEXT: st %s15, 24(, %s11)165; PIC-NEXT: st %s16, 32(, %s11)166; PIC-NEXT: and %s0, %s0, (32)0167; PIC-NEXT: adds.w.sx %s1, -1, %s0168; PIC-NEXT: cmpu.w %s2, 8, %s1169; PIC-NEXT: lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)170; PIC-NEXT: and %s15, %s15, (32)0171; PIC-NEXT: sic %s16172; PIC-NEXT: lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)173; PIC-NEXT: brgt.w 0, %s2, .LBB2_3174; PIC-NEXT: # %bb.1:175; PIC-NEXT: and %s2, %s1, (48)0176; PIC-NEXT: lea %s3, 463177; PIC-NEXT: and %s3, %s3, (32)0178; PIC-NEXT: srl %s2, %s3, %s2179; PIC-NEXT: and %s2, 1, %s2180; PIC-NEXT: brne.w 0, %s2, .LBB2_2181; PIC-NEXT: .LBB2_3:182; PIC-NEXT: adds.w.sx %s0, %s0, (0)1183; PIC-NEXT: br.l.t .LBB2_4184; PIC-NEXT: .LBB2_2:185; PIC-NEXT: adds.w.sx %s0, %s1, (0)1186; PIC-NEXT: sll %s0, %s0, 2187; PIC-NEXT: lea %s1, .Lswitch.table.br_jt7@gotoff_lo188; PIC-NEXT: and %s1, %s1, (32)0189; PIC-NEXT: lea.sl %s1, .Lswitch.table.br_jt7@gotoff_hi(%s1, %s15)190; PIC-NEXT: ldl.sx %s0, (%s0, %s1)191; PIC-NEXT: .LBB2_4:192; PIC-NEXT: ld %s16, 32(, %s11)193; PIC-NEXT: ld %s15, 24(, %s11)194; PIC-NEXT: b.l.t (, %s10)195 %2 = add i32 %0, -1196 %3 = icmp ult i32 %2, 9197 br i1 %3, label %4, label %13198 1994: ; preds = %1200 %5 = trunc i32 %2 to i16201 %6 = lshr i16 463, %5202 %7 = and i16 %6, 1203 %8 = icmp eq i16 %7, 0204 br i1 %8, label %13, label %9205 2069: ; preds = %4207 %10 = sext i32 %2 to i64208 %11 = getelementptr inbounds [9 x i32], ptr @switch.table.br_jt7, i64 0, i64 %10209 %12 = load i32, ptr %11, align 4210 ret i32 %12211 21213: ; preds = %1, %4213 ret i32 %0214}215 216; Function Attrs: norecurse nounwind readnone217define signext i32 @br_jt8(i32 signext %0) {218; CHECK-LABEL: br_jt8:219; CHECK: # %bb.0:220; CHECK-NEXT: and %s0, %s0, (32)0221; CHECK-NEXT: adds.w.sx %s1, -1, %s0222; CHECK-NEXT: cmpu.w %s2, 8, %s1223; CHECK-NEXT: brgt.w 0, %s2, .LBB3_3224; CHECK-NEXT: # %bb.1:225; CHECK-NEXT: and %s2, %s1, (48)0226; CHECK-NEXT: lea %s3, 495227; CHECK-NEXT: and %s3, %s3, (32)0228; CHECK-NEXT: srl %s2, %s3, %s2229; CHECK-NEXT: and %s2, 1, %s2230; CHECK-NEXT: brne.w 0, %s2, .LBB3_2231; CHECK-NEXT: .LBB3_3:232; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1233; CHECK-NEXT: b.l.t (, %s10)234; CHECK-NEXT: .LBB3_2:235; CHECK-NEXT: adds.w.sx %s0, %s1, (0)1236; CHECK-NEXT: sll %s0, %s0, 2237; CHECK-NEXT: lea %s1, .Lswitch.table.br_jt8@lo238; CHECK-NEXT: and %s1, %s1, (32)0239; CHECK-NEXT: lea.sl %s1, .Lswitch.table.br_jt8@hi(, %s1)240; CHECK-NEXT: ldl.sx %s0, (%s0, %s1)241; CHECK-NEXT: b.l.t (, %s10)242;243; PIC-LABEL: br_jt8:244; PIC: # %bb.0:245; PIC-NEXT: st %s15, 24(, %s11)246; PIC-NEXT: st %s16, 32(, %s11)247; PIC-NEXT: and %s0, %s0, (32)0248; PIC-NEXT: adds.w.sx %s1, -1, %s0249; PIC-NEXT: cmpu.w %s2, 8, %s1250; PIC-NEXT: lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)251; PIC-NEXT: and %s15, %s15, (32)0252; PIC-NEXT: sic %s16253; PIC-NEXT: lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)254; PIC-NEXT: brgt.w 0, %s2, .LBB3_3255; PIC-NEXT: # %bb.1:256; PIC-NEXT: and %s2, %s1, (48)0257; PIC-NEXT: lea %s3, 495258; PIC-NEXT: and %s3, %s3, (32)0259; PIC-NEXT: srl %s2, %s3, %s2260; PIC-NEXT: and %s2, 1, %s2261; PIC-NEXT: brne.w 0, %s2, .LBB3_2262; PIC-NEXT: .LBB3_3:263; PIC-NEXT: adds.w.sx %s0, %s0, (0)1264; PIC-NEXT: br.l.t .LBB3_4265; PIC-NEXT: .LBB3_2:266; PIC-NEXT: adds.w.sx %s0, %s1, (0)1267; PIC-NEXT: sll %s0, %s0, 2268; PIC-NEXT: lea %s1, .Lswitch.table.br_jt8@gotoff_lo269; PIC-NEXT: and %s1, %s1, (32)0270; PIC-NEXT: lea.sl %s1, .Lswitch.table.br_jt8@gotoff_hi(%s1, %s15)271; PIC-NEXT: ldl.sx %s0, (%s0, %s1)272; PIC-NEXT: .LBB3_4:273; PIC-NEXT: ld %s16, 32(, %s11)274; PIC-NEXT: ld %s15, 24(, %s11)275; PIC-NEXT: b.l.t (, %s10)276 %2 = add i32 %0, -1277 %3 = icmp ult i32 %2, 9278 br i1 %3, label %4, label %13279 2804: ; preds = %1281 %5 = trunc i32 %2 to i16282 %6 = lshr i16 495, %5283 %7 = and i16 %6, 1284 %8 = icmp eq i16 %7, 0285 br i1 %8, label %13, label %9286 2879: ; preds = %4288 %10 = sext i32 %2 to i64289 %11 = getelementptr inbounds [9 x i32], ptr @switch.table.br_jt8, i64 0, i64 %10290 %12 = load i32, ptr %11, align 4291 ret i32 %12292 29313: ; preds = %1, %4294 ret i32 %0295}296 297; Function Attrs: norecurse nounwind readnone298define signext i32 @br_jt3_m(i32 signext %0, i32 signext %1) {299; CHECK-LABEL: br_jt3_m:300; CHECK: # %bb.0:301; CHECK-NEXT: and %s0, %s0, (32)0302; CHECK-NEXT: breq.w 1, %s0, .LBB4_1303; CHECK-NEXT: # %bb.2:304; CHECK-NEXT: breq.w 4, %s0, .LBB4_5305; CHECK-NEXT: # %bb.3:306; CHECK-NEXT: brne.w 2, %s0, .LBB4_6307; CHECK-NEXT: # %bb.4:308; CHECK-NEXT: or %s0, 0, (0)1309; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1310; CHECK-NEXT: b.l.t (, %s10)311; CHECK-NEXT: .LBB4_5:312; CHECK-NEXT: and %s0, %s1, (32)0313; CHECK-NEXT: adds.w.sx %s0, 3, %s0314; CHECK-NEXT: .LBB4_6:315; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1316; CHECK-NEXT: b.l.t (, %s10)317; CHECK-NEXT: .LBB4_1:318; CHECK-NEXT: or %s0, 3, (0)1319; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1320; CHECK-NEXT: b.l.t (, %s10)321;322; PIC-LABEL: br_jt3_m:323; PIC: # %bb.0:324; PIC-NEXT: and %s0, %s0, (32)0325; PIC-NEXT: breq.w 1, %s0, .LBB4_1326; PIC-NEXT: # %bb.2:327; PIC-NEXT: breq.w 4, %s0, .LBB4_5328; PIC-NEXT: # %bb.3:329; PIC-NEXT: brne.w 2, %s0, .LBB4_6330; PIC-NEXT: # %bb.4:331; PIC-NEXT: or %s0, 0, (0)1332; PIC-NEXT: adds.w.sx %s0, %s0, (0)1333; PIC-NEXT: b.l.t (, %s10)334; PIC-NEXT: .LBB4_5:335; PIC-NEXT: and %s0, %s1, (32)0336; PIC-NEXT: adds.w.sx %s0, 3, %s0337; PIC-NEXT: .LBB4_6:338; PIC-NEXT: adds.w.sx %s0, %s0, (0)1339; PIC-NEXT: b.l.t (, %s10)340; PIC-NEXT: .LBB4_1:341; PIC-NEXT: or %s0, 3, (0)1342; PIC-NEXT: adds.w.sx %s0, %s0, (0)1343; PIC-NEXT: b.l.t (, %s10)344 switch i32 %0, label %6 [345 i32 1, label %7346 i32 2, label %3347 i32 4, label %4348 ]349 3503: ; preds = %2351 br label %7352 3534: ; preds = %2354 %5 = add nsw i32 %1, 3355 br label %7356 3576: ; preds = %2358 br label %7359 3607: ; preds = %2, %6, %4, %3361 %8 = phi i32 [ %0, %6 ], [ %5, %4 ], [ 0, %3 ], [ 3, %2 ]362 ret i32 %8363}364 365; Function Attrs: norecurse nounwind readnone366define signext i32 @br_jt4_m(i32 signext %0, i32 signext %1) {367; CHECK-LABEL: br_jt4_m:368; CHECK: # %bb.0:369; CHECK-NEXT: and %s0, %s0, (32)0370; CHECK-NEXT: adds.w.sx %s2, -1, %s0371; CHECK-NEXT: cmpu.w %s3, 3, %s2372; CHECK-NEXT: brgt.w 0, %s3, .LBB5_5373; CHECK-NEXT: # %bb.1:374; CHECK-NEXT: adds.w.zx %s0, %s2, (0)1375; CHECK-NEXT: sll %s0, %s0, 3376; CHECK-NEXT: lea %s2, .LJTI5_0@lo377; CHECK-NEXT: and %s2, %s2, (32)0378; CHECK-NEXT: lea.sl %s2, .LJTI5_0@hi(, %s2)379; CHECK-NEXT: ld %s2, (%s0, %s2)380; CHECK-NEXT: or %s0, 3, (0)1381; CHECK-NEXT: b.l.t (, %s2)382; CHECK-NEXT: .LBB5_2:383; CHECK-NEXT: or %s0, 0, (0)1384; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1385; CHECK-NEXT: b.l.t (, %s10)386; CHECK-NEXT: .LBB5_3:387; CHECK-NEXT: or %s0, 4, (0)1388; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1389; CHECK-NEXT: b.l.t (, %s10)390; CHECK-NEXT: .LBB5_4:391; CHECK-NEXT: and %s0, %s1, (32)0392; CHECK-NEXT: adds.w.sx %s0, 3, %s0393; CHECK-NEXT: .LBB5_5:394; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1395; CHECK-NEXT: b.l.t (, %s10)396;397; PIC-LABEL: br_jt4_m:398; PIC: # %bb.0:399; PIC-NEXT: and %s0, %s0, (32)0400; PIC-NEXT: brlt.w 2, %s0, .LBB5_4401; PIC-NEXT: # %bb.1:402; PIC-NEXT: breq.w 1, %s0, .LBB5_8403; PIC-NEXT: # %bb.2:404; PIC-NEXT: brne.w 2, %s0, .LBB5_7405; PIC-NEXT: # %bb.3:406; PIC-NEXT: or %s0, 0, (0)1407; PIC-NEXT: adds.w.sx %s0, %s0, (0)1408; PIC-NEXT: b.l.t (, %s10)409; PIC-NEXT: .LBB5_4:410; PIC-NEXT: breq.w 3, %s0, .LBB5_9411; PIC-NEXT: # %bb.5:412; PIC-NEXT: brne.w 4, %s0, .LBB5_7413; PIC-NEXT: # %bb.6:414; PIC-NEXT: and %s0, %s1, (32)0415; PIC-NEXT: adds.w.sx %s0, 3, %s0416; PIC-NEXT: .LBB5_7:417; PIC-NEXT: adds.w.sx %s0, %s0, (0)1418; PIC-NEXT: b.l.t (, %s10)419; PIC-NEXT: .LBB5_8:420; PIC-NEXT: or %s0, 3, (0)1421; PIC-NEXT: adds.w.sx %s0, %s0, (0)1422; PIC-NEXT: b.l.t (, %s10)423; PIC-NEXT: .LBB5_9:424; PIC-NEXT: or %s0, 4, (0)1425; PIC-NEXT: adds.w.sx %s0, %s0, (0)1426; PIC-NEXT: b.l.t (, %s10)427 switch i32 %0, label %7 [428 i32 1, label %8429 i32 2, label %3430 i32 3, label %4431 i32 4, label %5432 ]433 4343: ; preds = %2435 br label %8436 4374: ; preds = %2438 br label %8439 4405: ; preds = %2441 %6 = add nsw i32 %1, 3442 br label %8443 4447: ; preds = %2445 br label %8446 4478: ; preds = %2, %7, %5, %4, %3448 %9 = phi i32 [ %0, %7 ], [ %6, %5 ], [ 4, %4 ], [ 0, %3 ], [ 3, %2 ]449 ret i32 %9450}451 452; Function Attrs: norecurse nounwind readnone453define signext i32 @br_jt7_m(i32 signext %0, i32 signext %1) {454; CHECK-LABEL: br_jt7_m:455; CHECK: # %bb.0:456; CHECK-NEXT: and %s2, %s0, (32)0457; CHECK-NEXT: adds.w.sx %s0, -1, %s2458; CHECK-NEXT: cmpu.w %s3, 8, %s0459; CHECK-NEXT: brgt.w 0, %s3, .LBB6_8460; CHECK-NEXT: # %bb.1:461; CHECK-NEXT: adds.w.zx %s0, %s0, (0)1462; CHECK-NEXT: sll %s0, %s0, 3463; CHECK-NEXT: lea %s3, .LJTI6_0@lo464; CHECK-NEXT: and %s3, %s3, (32)0465; CHECK-NEXT: lea.sl %s3, .LJTI6_0@hi(, %s3)466; CHECK-NEXT: ld %s3, (%s0, %s3)467; CHECK-NEXT: and %s1, %s1, (32)0468; CHECK-NEXT: or %s0, 3, (0)1469; CHECK-NEXT: b.l.t (, %s3)470; CHECK-NEXT: .LBB6_2:471; CHECK-NEXT: or %s0, 0, (0)1472; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1473; CHECK-NEXT: b.l.t (, %s10)474; CHECK-NEXT: .LBB6_8:475; CHECK-NEXT: or %s0, 0, %s2476; CHECK-NEXT: .LBB6_9:477; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1478; CHECK-NEXT: b.l.t (, %s10)479; CHECK-NEXT: .LBB6_7:480; CHECK-NEXT: or %s0, 11, (0)1481; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1482; CHECK-NEXT: b.l.t (, %s10)483; CHECK-NEXT: .LBB6_6:484; CHECK-NEXT: or %s0, 10, (0)1485; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1486; CHECK-NEXT: b.l.t (, %s10)487; CHECK-NEXT: .LBB6_3:488; CHECK-NEXT: or %s0, 4, (0)1489; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1490; CHECK-NEXT: b.l.t (, %s10)491; CHECK-NEXT: .LBB6_4:492; CHECK-NEXT: adds.w.sx %s0, 3, %s1493; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1494; CHECK-NEXT: b.l.t (, %s10)495; CHECK-NEXT: .LBB6_5:496; CHECK-NEXT: adds.w.sx %s0, -2, %s1497; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1498; CHECK-NEXT: b.l.t (, %s10)499;500; PIC-LABEL: br_jt7_m:501; PIC: # %bb.0:502; PIC-NEXT: and %s0, %s0, (32)0503; PIC-NEXT: brge.w 3, %s0, .LBB6_1504; PIC-NEXT: # %bb.6:505; PIC-NEXT: brlt.w 7, %s0, .LBB6_10506; PIC-NEXT: # %bb.7:507; PIC-NEXT: and %s1, %s1, (32)0508; PIC-NEXT: breq.w 4, %s0, .LBB6_14509; PIC-NEXT: # %bb.8:510; PIC-NEXT: brne.w 7, %s0, .LBB6_16511; PIC-NEXT: # %bb.9:512; PIC-NEXT: adds.w.sx %s0, -2, %s1513; PIC-NEXT: adds.w.sx %s0, %s0, (0)1514; PIC-NEXT: b.l.t (, %s10)515; PIC-NEXT: .LBB6_1:516; PIC-NEXT: breq.w 1, %s0, .LBB6_2517; PIC-NEXT: # %bb.3:518; PIC-NEXT: breq.w 2, %s0, .LBB6_13519; PIC-NEXT: # %bb.4:520; PIC-NEXT: brne.w 3, %s0, .LBB6_16521; PIC-NEXT: # %bb.5:522; PIC-NEXT: or %s0, 4, (0)1523; PIC-NEXT: adds.w.sx %s0, %s0, (0)1524; PIC-NEXT: b.l.t (, %s10)525; PIC-NEXT: .LBB6_10:526; PIC-NEXT: breq.w 8, %s0, .LBB6_15527; PIC-NEXT: # %bb.11:528; PIC-NEXT: brne.w 9, %s0, .LBB6_16529; PIC-NEXT: # %bb.12:530; PIC-NEXT: or %s0, 10, (0)1531; PIC-NEXT: adds.w.sx %s0, %s0, (0)1532; PIC-NEXT: b.l.t (, %s10)533; PIC-NEXT: .LBB6_2:534; PIC-NEXT: or %s0, 3, (0)1535; PIC-NEXT: adds.w.sx %s0, %s0, (0)1536; PIC-NEXT: b.l.t (, %s10)537; PIC-NEXT: .LBB6_14:538; PIC-NEXT: adds.w.sx %s0, 3, %s1539; PIC-NEXT: adds.w.sx %s0, %s0, (0)1540; PIC-NEXT: b.l.t (, %s10)541; PIC-NEXT: .LBB6_15:542; PIC-NEXT: or %s0, 11, (0)1543; PIC-NEXT: .LBB6_16:544; PIC-NEXT: adds.w.sx %s0, %s0, (0)1545; PIC-NEXT: b.l.t (, %s10)546; PIC-NEXT: .LBB6_13:547; PIC-NEXT: or %s0, 0, (0)1548; PIC-NEXT: adds.w.sx %s0, %s0, (0)1549; PIC-NEXT: b.l.t (, %s10)550 switch i32 %0, label %11 [551 i32 1, label %12552 i32 2, label %3553 i32 3, label %4554 i32 4, label %5555 i32 7, label %7556 i32 9, label %9557 i32 8, label %10558 ]559 5603: ; preds = %2561 br label %12562 5634: ; preds = %2564 br label %12565 5665: ; preds = %2567 %6 = add nsw i32 %1, 3568 br label %12569 5707: ; preds = %2571 %8 = add nsw i32 %1, -2572 br label %12573 5749: ; preds = %2575 br label %12576 57710: ; preds = %2578 br label %12579 58011: ; preds = %2581 br label %12582 58312: ; preds = %2, %11, %10, %9, %7, %5, %4, %3584 %13 = phi i32 [ %0, %11 ], [ 11, %10 ], [ 10, %9 ], [ %8, %7 ], [ %6, %5 ], [ 4, %4 ], [ 0, %3 ], [ 3, %2 ]585 ret i32 %13586}587 588; Function Attrs: norecurse nounwind readnone589define signext i32 @br_jt8_m(i32 signext %0, i32 signext %1) {590; CHECK-LABEL: br_jt8_m:591; CHECK: # %bb.0:592; CHECK-NEXT: and %s2, %s0, (32)0593; CHECK-NEXT: adds.w.sx %s0, -1, %s2594; CHECK-NEXT: cmpu.w %s3, 8, %s0595; CHECK-NEXT: brgt.w 0, %s3, .LBB7_9596; CHECK-NEXT: # %bb.1:597; CHECK-NEXT: adds.w.zx %s0, %s0, (0)1598; CHECK-NEXT: sll %s0, %s0, 3599; CHECK-NEXT: lea %s3, .LJTI7_0@lo600; CHECK-NEXT: and %s3, %s3, (32)0601; CHECK-NEXT: lea.sl %s3, .LJTI7_0@hi(, %s3)602; CHECK-NEXT: ld %s3, (%s0, %s3)603; CHECK-NEXT: and %s1, %s1, (32)0604; CHECK-NEXT: or %s0, 3, (0)1605; CHECK-NEXT: b.l.t (, %s3)606; CHECK-NEXT: .LBB7_2:607; CHECK-NEXT: or %s0, 0, (0)1608; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1609; CHECK-NEXT: b.l.t (, %s10)610; CHECK-NEXT: .LBB7_9:611; CHECK-NEXT: or %s0, 0, %s2612; CHECK-NEXT: .LBB7_10:613; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1614; CHECK-NEXT: b.l.t (, %s10)615; CHECK-NEXT: .LBB7_6:616; CHECK-NEXT: adds.w.sx %s0, -2, %s1617; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1618; CHECK-NEXT: b.l.t (, %s10)619; CHECK-NEXT: .LBB7_8:620; CHECK-NEXT: or %s0, 11, (0)1621; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1622; CHECK-NEXT: b.l.t (, %s10)623; CHECK-NEXT: .LBB7_7:624; CHECK-NEXT: or %s0, 10, (0)1625; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1626; CHECK-NEXT: b.l.t (, %s10)627; CHECK-NEXT: .LBB7_3:628; CHECK-NEXT: or %s0, 4, (0)1629; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1630; CHECK-NEXT: b.l.t (, %s10)631; CHECK-NEXT: .LBB7_4:632; CHECK-NEXT: adds.w.sx %s0, 3, %s1633; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1634; CHECK-NEXT: b.l.t (, %s10)635; CHECK-NEXT: .LBB7_5:636; CHECK-NEXT: adds.w.sx %s0, -5, %s1637; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1638; CHECK-NEXT: b.l.t (, %s10)639;640; PIC-LABEL: br_jt8_m:641; PIC: # %bb.0:642; PIC-NEXT: st %s15, 24(, %s11)643; PIC-NEXT: st %s16, 32(, %s11)644; PIC-NEXT: and %s2, %s0, (32)0645; PIC-NEXT: adds.w.sx %s0, -1, %s2646; PIC-NEXT: cmpu.w %s3, 8, %s0647; PIC-NEXT: lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)648; PIC-NEXT: and %s15, %s15, (32)0649; PIC-NEXT: sic %s16650; PIC-NEXT: lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)651; PIC-NEXT: brgt.w 0, %s3, .LBB7_9652; PIC-NEXT: # %bb.1:653; PIC-NEXT: and %s1, %s1, (32)0654; PIC-NEXT: adds.w.zx %s0, %s0, (0)1655; PIC-NEXT: sll %s0, %s0, 2656; PIC-NEXT: lea %s3, .LJTI7_0@gotoff_lo657; PIC-NEXT: and %s3, %s3, (32)0658; PIC-NEXT: lea.sl %s3, .LJTI7_0@gotoff_hi(%s3, %s15)659; PIC-NEXT: ldl.sx %s0, (%s0, %s3)660; PIC-NEXT: lea %s3, br_jt8_m@gotoff_lo661; PIC-NEXT: and %s3, %s3, (32)0662; PIC-NEXT: lea.sl %s3, br_jt8_m@gotoff_hi(%s3, %s15)663; PIC-NEXT: adds.l %s3, %s3, %s0664; PIC-NEXT: or %s0, 3, (0)1665; PIC-NEXT: b.l.t (, %s3)666; PIC-NEXT: .LBB7_2:667; PIC-NEXT: or %s0, 0, (0)1668; PIC-NEXT: br.l.t .LBB7_10669; PIC-NEXT: .LBB7_9:670; PIC-NEXT: or %s0, 0, %s2671; PIC-NEXT: br.l.t .LBB7_10672; PIC-NEXT: .LBB7_6:673; PIC-NEXT: adds.w.sx %s0, -2, %s1674; PIC-NEXT: br.l.t .LBB7_10675; PIC-NEXT: .LBB7_8:676; PIC-NEXT: or %s0, 11, (0)1677; PIC-NEXT: br.l.t .LBB7_10678; PIC-NEXT: .LBB7_7:679; PIC-NEXT: or %s0, 10, (0)1680; PIC-NEXT: br.l.t .LBB7_10681; PIC-NEXT: .LBB7_3:682; PIC-NEXT: or %s0, 4, (0)1683; PIC-NEXT: br.l.t .LBB7_10684; PIC-NEXT: .LBB7_4:685; PIC-NEXT: adds.w.sx %s0, 3, %s1686; PIC-NEXT: br.l.t .LBB7_10687; PIC-NEXT: .LBB7_5:688; PIC-NEXT: adds.w.sx %s0, -5, %s1689; PIC-NEXT: .LBB7_10:690; PIC-NEXT: adds.w.sx %s0, %s0, (0)1691; PIC-NEXT: ld %s16, 32(, %s11)692; PIC-NEXT: ld %s15, 24(, %s11)693; PIC-NEXT: b.l.t (, %s10)694 switch i32 %0, label %13 [695 i32 1, label %14696 i32 2, label %3697 i32 3, label %4698 i32 4, label %5699 i32 6, label %7700 i32 7, label %9701 i32 9, label %11702 i32 8, label %12703 ]704 7053: ; preds = %2706 br label %14707 7084: ; preds = %2709 br label %14710 7115: ; preds = %2712 %6 = add nsw i32 %1, 3713 br label %14714 7157: ; preds = %2716 %8 = add nsw i32 %1, -5717 br label %14718 7199: ; preds = %2720 %10 = add nsw i32 %1, -2721 br label %14722 72311: ; preds = %2724 br label %14725 72612: ; preds = %2727 br label %14728 72913: ; preds = %2730 br label %14731 73214: ; preds = %2, %13, %12, %11, %9, %7, %5, %4, %3733 %15 = phi i32 [ %0, %13 ], [ 11, %12 ], [ 10, %11 ], [ %10, %9 ], [ %8, %7 ], [ %6, %5 ], [ 4, %4 ], [ 0, %3 ], [ 3, %2 ]734 ret i32 %15735}736