171 lines · plain
1; RUN: llc -mtriple=x86_64-unknown-linux < %s | FileCheck %s2 3@g = external global i84 5declare void @f0()6declare void @f1()7declare void @f2()8declare void @f3()9declare void @f4()10declare void @f5()11declare void @f6()12declare void @f7()13declare void @f8()14declare void @f9()15 16declare void @llvm.icall.branch.funnel(...)17 18define void @jt2(ptr nest, ...) {19 ; CHECK: jt2:20 ; CHECK: leaq g+1(%rip), %r1121 ; CHECK-NEXT: cmpq %r11, %r1022 ; CHECK-NEXT: jae .LBB0_123 ; CHECK-NEXT: #24 ; CHECK-NEXT: jmp f025 ; CHECK-NEXT: .LBB0_1:26 ; CHECK-NEXT: jmp f127 musttail call void (...) @llvm.icall.branch.funnel(28 ptr %0,29 ptr @g, ptr @f0,30 ptr getelementptr (i8, ptr @g, i64 1), ptr @f1,31 ...32 )33 ret void34}35 36define void @jt3(ptr nest, ...) {37 ; CHECK: jt3:38 ; CHECK: leaq g+1(%rip), %r1139 ; CHECK-NEXT: cmpq %r11, %r1040 ; CHECK-NEXT: jae .LBB1_141 ; CHECK-NEXT: #42 ; CHECK-NEXT: jmp f043 ; CHECK-NEXT: .LBB1_1:44 ; CHECK-NEXT: jne .LBB1_245 ; CHECK-NEXT: #46 ; CHECK-NEXT: jmp f147 ; CHECK-NEXT: .LBB1_2:48 ; CHECK-NEXT: jmp f249 musttail call void (...) @llvm.icall.branch.funnel(50 ptr %0,51 ptr @g, ptr @f0,52 ptr getelementptr (i8, ptr @g, i64 2), ptr @f2,53 ptr getelementptr (i8, ptr @g, i64 1), ptr @f1,54 ...55 )56 ret void57}58 59define void @jt7(ptr nest, ...) {60 ; CHECK: jt7:61 ; CHECK: leaq g+3(%rip), %r1162 ; CHECK-NEXT: cmpq %r11, %r1063 ; CHECK-NEXT: jae .LBB2_164 ; CHECK-NEXT: #65 ; CHECK-NEXT: leaq g+1(%rip), %r1166 ; CHECK-NEXT: cmpq %r11, %r1067 ; CHECK-NEXT: jae .LBB2_668 ; CHECK-NEXT: #69 ; CHECK-NEXT: jmp f070 ; CHECK-NEXT: .LBB2_1:71 ; CHECK-NEXT: jne .LBB2_272 ; CHECK-NEXT: #73 ; CHECK-NEXT: jmp f374 ; CHECK-NEXT: .LBB2_6:75 ; CHECK-NEXT: jne .LBB2_776 ; CHECK-NEXT: #77 ; CHECK-NEXT: jmp f178 ; CHECK-NEXT: .LBB2_2:79 ; CHECK-NEXT: leaq g+5(%rip), %r1180 ; CHECK-NEXT: cmpq %r11, %r1081 ; CHECK-NEXT: jae .LBB2_382 ; CHECK-NEXT: #83 ; CHECK-NEXT: jmp f484 ; CHECK-NEXT: .LBB2_7:85 ; CHECK-NEXT: jmp f286 ; CHECK-NEXT: .LBB2_3:87 ; CHECK-NEXT: jne .LBB2_488 ; CHECK-NEXT: #89 ; CHECK-NEXT: jmp f590 ; CHECK-NEXT: .LBB2_4:91 ; CHECK-NEXT: jmp f692 musttail call void (...) @llvm.icall.branch.funnel(93 ptr %0,94 ptr @g, ptr @f0,95 ptr getelementptr (i8, ptr @g, i64 1), ptr @f1,96 ptr getelementptr (i8, ptr @g, i64 2), ptr @f2,97 ptr getelementptr (i8, ptr @g, i64 3), ptr @f3,98 ptr getelementptr (i8, ptr @g, i64 4), ptr @f4,99 ptr getelementptr (i8, ptr @g, i64 5), ptr @f5,100 ptr getelementptr (i8, ptr @g, i64 6), ptr @f6,101 ...102 )103 ret void104}105 106define void @jt10(ptr nest, ...) {107 ; CHECK: jt10:108 ; CHECK: leaq g+5(%rip), %r11109 ; CHECK-NEXT: cmpq %r11, %r10110 ; CHECK-NEXT: jae .LBB3_1111 ; CHECK-NEXT: #112 ; CHECK-NEXT: leaq g+1(%rip), %r11113 ; CHECK-NEXT: cmpq %r11, %r10114 ; CHECK-NEXT: jae .LBB3_7115 ; CHECK-NEXT: #116 ; CHECK-NEXT: jmp f0117 ; CHECK-NEXT: .LBB3_1:118 ; CHECK-NEXT: jne .LBB3_2119 ; CHECK-NEXT: #120 ; CHECK-NEXT: jmp f5121 ; CHECK-NEXT: .LBB3_7:122 ; CHECK-NEXT: jne .LBB3_8123 ; CHECK-NEXT: #124 ; CHECK-NEXT: jmp f1125 ; CHECK-NEXT: .LBB3_2:126 ; CHECK-NEXT: leaq g+7(%rip), %r11127 ; CHECK-NEXT: cmpq %r11, %r10128 ; CHECK-NEXT: jae .LBB3_3129 ; CHECK-NEXT: #130 ; CHECK-NEXT: jmp f6131 ; CHECK-NEXT: .LBB3_8:132 ; CHECK-NEXT: leaq g+3(%rip), %r11133 ; CHECK-NEXT: cmpq %r11, %r10134 ; CHECK-NEXT: jae .LBB3_9135 ; CHECK-NEXT: #136 ; CHECK-NEXT: jmp f2137 ; CHECK-NEXT: .LBB3_3:138 ; CHECK-NEXT: jne .LBB3_4139 ; CHECK-NEXT: #140 ; CHECK-NEXT: jmp f7141 ; CHECK-NEXT: .LBB3_9:142 ; CHECK-NEXT: jne .LBB3_10143 ; CHECK-NEXT: #144 ; CHECK-NEXT: jmp f3145 ; CHECK-NEXT: .LBB3_4:146 ; CHECK-NEXT: leaq g+9(%rip), %r11147 ; CHECK-NEXT: cmpq %r11, %r10148 ; CHECK-NEXT: jae .LBB3_5149 ; CHECK-NEXT: #150 ; CHECK-NEXT: jmp f8151 ; CHECK-NEXT: .LBB3_10:152 ; CHECK-NEXT: jmp f4153 ; CHECK-NEXT: .LBB3_5:154 ; CHECK-NEXT: jmp f9155 musttail call void (...) @llvm.icall.branch.funnel(156 ptr %0,157 ptr @g, ptr @f0,158 ptr getelementptr (i8, ptr @g, i64 1), ptr @f1,159 ptr getelementptr (i8, ptr @g, i64 2), ptr @f2,160 ptr getelementptr (i8, ptr @g, i64 3), ptr @f3,161 ptr getelementptr (i8, ptr @g, i64 4), ptr @f4,162 ptr getelementptr (i8, ptr @g, i64 5), ptr @f5,163 ptr getelementptr (i8, ptr @g, i64 6), ptr @f6,164 ptr getelementptr (i8, ptr @g, i64 7), ptr @f7,165 ptr getelementptr (i8, ptr @g, i64 8), ptr @f8,166 ptr getelementptr (i8, ptr @g, i64 9), ptr @f9,167 ...168 )169 ret void170}171