221 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s3define ptr @large_loop_switch(ptr %p) {4; CHECK-LABEL: large_loop_switch:5; CHECK: # %bb.0: # %entry6; CHECK-NEXT: pushq %rbx7; CHECK-NEXT: .cfi_def_cfa_offset 168; CHECK-NEXT: .cfi_offset %rbx, -169; CHECK-NEXT: movq %rdi, %rax10; CHECK-NEXT: movl $6, %ebx11; CHECK-NEXT: movl %ebx, %ecx12; CHECK-NEXT: jmpq *.LJTI0_0(,%rcx,8)13; CHECK-NEXT: .LBB0_1: # %for.cond.cleanup14; CHECK-NEXT: movl $530, %edi # imm = 0x21215; CHECK-NEXT: movq %rax, %rsi16; CHECK-NEXT: popq %rbx17; CHECK-NEXT: .cfi_def_cfa_offset 818; CHECK-NEXT: jmp ccc@PLT # TAILCALL19; CHECK-NEXT: .p2align 420; CHECK-NEXT: .LBB0_2: # %sw.bb121; CHECK-NEXT: # =>This Inner Loop Header: Depth=122; CHECK-NEXT: .cfi_def_cfa_offset 1623; CHECK-NEXT: movl $531, %edi # imm = 0x21324; CHECK-NEXT: movq %rax, %rsi25; CHECK-NEXT: callq ccc@PLT26; CHECK-NEXT: decl %ebx27; CHECK-NEXT: movl %ebx, %ecx28; CHECK-NEXT: jmpq *.LJTI0_0(,%rcx,8)29; CHECK-NEXT: .p2align 430; CHECK-NEXT: .LBB0_3: # %sw.bb331; CHECK-NEXT: # =>This Inner Loop Header: Depth=132; CHECK-NEXT: movl $532, %edi # imm = 0x21433; CHECK-NEXT: movq %rax, %rsi34; CHECK-NEXT: callq bbb@PLT35; CHECK-NEXT: decl %ebx36; CHECK-NEXT: movl %ebx, %ecx37; CHECK-NEXT: jmpq *.LJTI0_0(,%rcx,8)38; CHECK-NEXT: .p2align 439; CHECK-NEXT: .LBB0_4: # %sw.bb540; CHECK-NEXT: # =>This Inner Loop Header: Depth=141; CHECK-NEXT: movl $533, %edi # imm = 0x21542; CHECK-NEXT: movq %rax, %rsi43; CHECK-NEXT: callq bbb@PLT44; CHECK-NEXT: decl %ebx45; CHECK-NEXT: movl %ebx, %ecx46; CHECK-NEXT: jmpq *.LJTI0_0(,%rcx,8)47; CHECK-NEXT: .p2align 448; CHECK-NEXT: .LBB0_5: # %sw.bb749; CHECK-NEXT: # =>This Inner Loop Header: Depth=150; CHECK-NEXT: movl $535, %edi # imm = 0x21751; CHECK-NEXT: movq %rax, %rsi52; CHECK-NEXT: callq bbb@PLT53; CHECK-NEXT: decl %ebx54; CHECK-NEXT: movl %ebx, %ecx55; CHECK-NEXT: jmpq *.LJTI0_0(,%rcx,8)56; CHECK-NEXT: .p2align 457; CHECK-NEXT: .LBB0_6: # %sw.bb958; CHECK-NEXT: # =>This Inner Loop Header: Depth=159; CHECK-NEXT: movl $536, %edi # imm = 0x21860; CHECK-NEXT: movq %rax, %rsi61; CHECK-NEXT: callq ccc@PLT62; CHECK-NEXT: decl %ebx63; CHECK-NEXT: movl %ebx, %ecx64; CHECK-NEXT: jmpq *.LJTI0_0(,%rcx,8)65; CHECK-NEXT: .p2align 466; CHECK-NEXT: .LBB0_7: # %sw.bb1167; CHECK-NEXT: # =>This Inner Loop Header: Depth=168; CHECK-NEXT: movl $658, %edi # imm = 0x29269; CHECK-NEXT: movq %rax, %rsi70; CHECK-NEXT: callq bbb@PLT71; CHECK-NEXT: decl %ebx72; CHECK-NEXT: movl %ebx, %ecx73; CHECK-NEXT: jmpq *.LJTI0_0(,%rcx,8)74entry:75 br label %for.body76 77for.cond.cleanup: ; preds = %for.body78 %call = tail call ptr @ccc(i32 signext 530, ptr %p.addr.03006)79 ret ptr %call80 81for.body: ; preds = %for.inc, %entry82 %i.03007 = phi i32 [ 6, %entry ], [ %dec, %for.inc ]83 %p.addr.03006 = phi ptr [ %p, %entry ], [ %p.addr.1, %for.inc ]84 switch i32 %i.03007, label %for.body.unreachabledefault [85 i32 0, label %for.cond.cleanup86 i32 1, label %sw.bb187 i32 2, label %sw.bb388 i32 3, label %sw.bb589 i32 4, label %sw.bb790 i32 5, label %sw.bb991 i32 6, label %sw.bb1192 ]93 94sw.bb1: ; preds = %for.body95 %call2 = tail call ptr @ccc(i32 signext 531, ptr %p.addr.03006)96 br label %for.inc97 98sw.bb3: ; preds = %for.body99 %call4 = tail call ptr @bbb(i32 signext 532, ptr %p.addr.03006)100 br label %for.inc101 102sw.bb5: ; preds = %for.body103 %call6 = tail call ptr @bbb(i32 signext 533, ptr %p.addr.03006)104 br label %for.inc105 106sw.bb7: ; preds = %for.body107 %call8 = tail call ptr @bbb(i32 signext 535, ptr %p.addr.03006)108 br label %for.inc109 110sw.bb9: ; preds = %for.body111 %call10 = tail call ptr @ccc(i32 signext 536, ptr %p.addr.03006)112 br label %for.inc113 114sw.bb11: ; preds = %for.body115 %call12 = tail call ptr @bbb(i32 signext 658, ptr %p.addr.03006)116 br label %for.inc117 118for.body.unreachabledefault: ; preds = %for.body119 unreachable120 121for.inc: ; preds = %sw.bb1, %sw.bb3, %sw.bb5, %sw.bb7, %sw.bb9, %sw.bb11122 %p.addr.1 = phi ptr [ %call12, %sw.bb11 ], [ %call10, %sw.bb9 ], [ %call8, %sw.bb7 ], [ %call6, %sw.bb5 ], [ %call4, %sw.bb3 ], [ %call2, %sw.bb1 ]123 %dec = add nsw i32 %i.03007, -1124 br label %for.body125}126 127declare ptr @bbb(i32 signext, ptr)128declare ptr @ccc(i32 signext, ptr)129 130 131define i32 @interp_switch(ptr nocapture readonly %0, i32 %1) {132; CHECK-LABEL: interp_switch:133; CHECK: # %bb.0:134; CHECK-NEXT: movl %esi, %eax135; CHECK-NEXT: jmp .LBB1_1136; CHECK-NEXT: .LBB1_7: # in Loop: Header=BB1_1 Depth=1137; CHECK-NEXT: addl $7, %eax138; CHECK-NEXT: incq %rdi139; CHECK-NEXT: .p2align 4140; CHECK-NEXT: .LBB1_1: # =>This Inner Loop Header: Depth=1141; CHECK-NEXT: movzbl (%rdi), %ecx142; CHECK-NEXT: decl %ecx143; CHECK-NEXT: cmpl $5, %ecx144; CHECK-NEXT: ja .LBB1_9145; CHECK-NEXT: # %bb.2: # in Loop: Header=BB1_1 Depth=1146; CHECK-NEXT: jmpq *.LJTI1_0(,%rcx,8)147; CHECK-NEXT: .LBB1_3: # in Loop: Header=BB1_1 Depth=1148; CHECK-NEXT: incl %eax149; CHECK-NEXT: incq %rdi150; CHECK-NEXT: jmp .LBB1_1151; CHECK-NEXT: .LBB1_5: # in Loop: Header=BB1_1 Depth=1152; CHECK-NEXT: addl %eax, %eax153; CHECK-NEXT: incq %rdi154; CHECK-NEXT: jmp .LBB1_1155; CHECK-NEXT: .LBB1_6: # in Loop: Header=BB1_1 Depth=1156; CHECK-NEXT: movl %eax, %ecx157; CHECK-NEXT: shrl $31, %ecx158; CHECK-NEXT: addl %eax, %ecx159; CHECK-NEXT: sarl %ecx160; CHECK-NEXT: incq %rdi161; CHECK-NEXT: movl %ecx, %eax162; CHECK-NEXT: jmp .LBB1_1163; CHECK-NEXT: .LBB1_4: # in Loop: Header=BB1_1 Depth=1164; CHECK-NEXT: decl %eax165; CHECK-NEXT: incq %rdi166; CHECK-NEXT: jmp .LBB1_1167; CHECK-NEXT: .LBB1_8: # in Loop: Header=BB1_1 Depth=1168; CHECK-NEXT: negl %eax169; CHECK-NEXT: incq %rdi170; CHECK-NEXT: jmp .LBB1_1171; CHECK-NEXT: .LBB1_9:172; CHECK-NEXT: retq173 br label %3174 1753: ; preds = %21, %2176 %4 = phi i64 [ 0, %2 ], [ %6, %21 ]177 %5 = phi i32 [ %1, %2 ], [ %22, %21 ]178 %6 = add nuw i64 %4, 1179 %7 = getelementptr inbounds i8, ptr %0, i64 %4180 %8 = load i8, ptr %7, align 1181 switch i8 %8, label %23 [182 i8 6, label %19183 i8 1, label %9184 i8 2, label %11185 i8 3, label %13186 i8 4, label %15187 i8 5, label %17188 ]189 1909: ; preds = %3191 %10 = add nsw i32 %5, 1192 br label %21193 19411: ; preds = %3195 %12 = add nsw i32 %5, -1196 br label %21197 19813: ; preds = %3199 %14 = shl nsw i32 %5, 1200 br label %21201 20215: ; preds = %3203 %16 = sdiv i32 %5, 2204 br label %21205 20617: ; preds = %3207 %18 = add nsw i32 %5, 7208 br label %21209 21019: ; preds = %3211 %20 = sub nsw i32 0, %5212 br label %21213 21421: ; preds = %19, %17, %15, %13, %11, %9215 %22 = phi i32 [ %20, %19 ], [ %18, %17 ], [ %16, %15 ], [ %14, %13 ], [ %12, %11 ], [ %10, %9 ]216 br label %3217 21823: ; preds = %3219 ret i32 %5220}221