235 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 22; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \3; RUN: -ppc-min-jump-table-entries=4 -code-model=small -stop-after=machine-cp < %s | FileCheck \4; RUN: --check-prefix=32SMALL-MIR %s5 6; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \7; RUN: -ppc-min-jump-table-entries=4 -code-model=large -stop-after=machine-cp < %s | FileCheck \8; RUN: --check-prefix=32LARGE-MIR %s9 10; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \11; RUN: -ppc-min-jump-table-entries=4 -code-model=small -stop-after=machine-cp < %s | FileCheck \12; RUN: --check-prefix=64SMALL-MIR %s13 14; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \15; RUN: -ppc-min-jump-table-entries=4 -code-model=large -stop-after=machine-cp < %s | FileCheck \16; RUN: --check-prefix=64LARGE-MIR %s17 18define i32 @jump_table(i32 %a) {19 ; 32SMALL-MIR-LABEL: name: jump_table20 ; 32SMALL-MIR: bb.0.entry:21 ; 32SMALL-MIR-NEXT: successors: %bb.6(0x19999998), %bb.1(0x66666668)22 ; 32SMALL-MIR-NEXT: liveins: $r323 ; 32SMALL-MIR-NEXT: {{ $}}24 ; 32SMALL-MIR-NEXT: renamable $r3 = ADDI killed renamable $r3, -125 ; 32SMALL-MIR-NEXT: renamable $cr0 = CMPLWI renamable $r3, 326 ; 32SMALL-MIR-NEXT: BCC 44, killed renamable $cr0, %bb.627 ; 32SMALL-MIR-NEXT: {{ $}}28 ; 32SMALL-MIR-NEXT: bb.1.entry:29 ; 32SMALL-MIR-NEXT: successors: %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000), %bb.5(0x20000000)30 ; 32SMALL-MIR-NEXT: liveins: $r331 ; 32SMALL-MIR-NEXT: {{ $}}32 ; 32SMALL-MIR-NEXT: renamable $r3 = RLWINM killed renamable $r3, 2, 0, 2933 ; 32SMALL-MIR-NEXT: renamable $r4 = LWZtoc %jump-table.0, $r2 :: (load (s32) from got)34 ; 32SMALL-MIR-NEXT: renamable $r3 = LWZX renamable $r4, killed renamable $r3 :: (load (s32) from jump-table)35 ; 32SMALL-MIR-NEXT: renamable $r3 = ADD4 killed renamable $r4, killed renamable $r336 ; 32SMALL-MIR-NEXT: MTCTR killed renamable $r3, implicit-def $ctr37 ; 32SMALL-MIR-NEXT: BCTR implicit $ctr38 ; 32SMALL-MIR-NEXT: {{ $}}39 ; 32SMALL-MIR-NEXT: bb.2.sw.bb:40 ; 32SMALL-MIR-NEXT: successors: %bb.6(0x80000000)41 ; 32SMALL-MIR-NEXT: {{ $}}42 ; 32SMALL-MIR-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */43 ; 32SMALL-MIR-NEXT: B %bb.644 ; 32SMALL-MIR-NEXT: {{ $}}45 ; 32SMALL-MIR-NEXT: bb.3.sw.bb1:46 ; 32SMALL-MIR-NEXT: successors: %bb.6(0x80000000)47 ; 32SMALL-MIR-NEXT: {{ $}}48 ; 32SMALL-MIR-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */49 ; 32SMALL-MIR-NEXT: B %bb.650 ; 32SMALL-MIR-NEXT: {{ $}}51 ; 32SMALL-MIR-NEXT: bb.4.sw.bb2:52 ; 32SMALL-MIR-NEXT: successors: %bb.6(0x80000000)53 ; 32SMALL-MIR-NEXT: {{ $}}54 ; 32SMALL-MIR-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */55 ; 32SMALL-MIR-NEXT: B %bb.656 ; 32SMALL-MIR-NEXT: {{ $}}57 ; 32SMALL-MIR-NEXT: bb.5.sw.bb3:58 ; 32SMALL-MIR-NEXT: successors: %bb.6(0x80000000)59 ; 32SMALL-MIR-NEXT: {{ $}}60 ; 32SMALL-MIR-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */61 ; 32SMALL-MIR-NEXT: {{ $}}62 ; 32SMALL-MIR-NEXT: bb.6.sw.epilog:63 ; 32SMALL-MIR-NEXT: $r3 = LI 064 ; 32SMALL-MIR-NEXT: BLR implicit $lr, implicit $rm, implicit $r365 ;66 ; 32LARGE-MIR-LABEL: name: jump_table67 ; 32LARGE-MIR: bb.0.entry:68 ; 32LARGE-MIR-NEXT: successors: %bb.6(0x19999998), %bb.1(0x66666668)69 ; 32LARGE-MIR-NEXT: liveins: $r370 ; 32LARGE-MIR-NEXT: {{ $}}71 ; 32LARGE-MIR-NEXT: renamable $r3 = ADDI killed renamable $r3, -172 ; 32LARGE-MIR-NEXT: renamable $cr0 = CMPLWI renamable $r3, 373 ; 32LARGE-MIR-NEXT: BCC 44, killed renamable $cr0, %bb.674 ; 32LARGE-MIR-NEXT: {{ $}}75 ; 32LARGE-MIR-NEXT: bb.1.entry:76 ; 32LARGE-MIR-NEXT: successors: %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000), %bb.5(0x20000000)77 ; 32LARGE-MIR-NEXT: liveins: $r378 ; 32LARGE-MIR-NEXT: {{ $}}79 ; 32LARGE-MIR-NEXT: renamable $r3 = RLWINM killed renamable $r3, 2, 0, 2980 ; 32LARGE-MIR-NEXT: renamable $r4 = ADDIStocHA $r2, %jump-table.081 ; 32LARGE-MIR-NEXT: renamable $r4 = LWZtocL %jump-table.0, killed renamable $r4, implicit $r2 :: (load (s32) from got)82 ; 32LARGE-MIR-NEXT: renamable $r3 = LWZX renamable $r4, killed renamable $r3 :: (load (s32) from jump-table)83 ; 32LARGE-MIR-NEXT: renamable $r3 = ADD4 killed renamable $r4, killed renamable $r384 ; 32LARGE-MIR-NEXT: MTCTR killed renamable $r3, implicit-def $ctr85 ; 32LARGE-MIR-NEXT: BCTR implicit $ctr86 ; 32LARGE-MIR-NEXT: {{ $}}87 ; 32LARGE-MIR-NEXT: bb.2.sw.bb:88 ; 32LARGE-MIR-NEXT: successors: %bb.6(0x80000000)89 ; 32LARGE-MIR-NEXT: {{ $}}90 ; 32LARGE-MIR-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */91 ; 32LARGE-MIR-NEXT: B %bb.692 ; 32LARGE-MIR-NEXT: {{ $}}93 ; 32LARGE-MIR-NEXT: bb.3.sw.bb1:94 ; 32LARGE-MIR-NEXT: successors: %bb.6(0x80000000)95 ; 32LARGE-MIR-NEXT: {{ $}}96 ; 32LARGE-MIR-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */97 ; 32LARGE-MIR-NEXT: B %bb.698 ; 32LARGE-MIR-NEXT: {{ $}}99 ; 32LARGE-MIR-NEXT: bb.4.sw.bb2:100 ; 32LARGE-MIR-NEXT: successors: %bb.6(0x80000000)101 ; 32LARGE-MIR-NEXT: {{ $}}102 ; 32LARGE-MIR-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */103 ; 32LARGE-MIR-NEXT: B %bb.6104 ; 32LARGE-MIR-NEXT: {{ $}}105 ; 32LARGE-MIR-NEXT: bb.5.sw.bb3:106 ; 32LARGE-MIR-NEXT: successors: %bb.6(0x80000000)107 ; 32LARGE-MIR-NEXT: {{ $}}108 ; 32LARGE-MIR-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */109 ; 32LARGE-MIR-NEXT: {{ $}}110 ; 32LARGE-MIR-NEXT: bb.6.sw.epilog:111 ; 32LARGE-MIR-NEXT: $r3 = LI 0112 ; 32LARGE-MIR-NEXT: BLR implicit $lr, implicit $rm, implicit $r3113 ;114 ; 64SMALL-MIR-LABEL: name: jump_table115 ; 64SMALL-MIR: bb.0.entry:116 ; 64SMALL-MIR-NEXT: successors: %bb.6(0x19999998), %bb.1(0x66666668)117 ; 64SMALL-MIR-NEXT: liveins: $x3118 ; 64SMALL-MIR-NEXT: {{ $}}119 ; 64SMALL-MIR-NEXT: renamable $r3 = ADDI renamable $r3, -1, implicit killed $x3, implicit-def $x3120 ; 64SMALL-MIR-NEXT: renamable $cr0 = CMPLWI renamable $r3, 3121 ; 64SMALL-MIR-NEXT: BCC 44, killed renamable $cr0, %bb.6122 ; 64SMALL-MIR-NEXT: {{ $}}123 ; 64SMALL-MIR-NEXT: bb.1.entry:124 ; 64SMALL-MIR-NEXT: successors: %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000), %bb.5(0x20000000)125 ; 64SMALL-MIR-NEXT: liveins: $x3126 ; 64SMALL-MIR-NEXT: {{ $}}127 ; 64SMALL-MIR-NEXT: renamable $x3 = RLDIC killed renamable $x3, 2, 30128 ; 64SMALL-MIR-NEXT: renamable $x4 = LDtocJTI %jump-table.0, $x2 :: (load (s64) from got)129 ; 64SMALL-MIR-NEXT: renamable $x3 = LWAX renamable $x4, killed renamable $x3 :: (load (s32) from jump-table)130 ; 64SMALL-MIR-NEXT: renamable $x3 = ADD8 killed renamable $x4, killed renamable $x3131 ; 64SMALL-MIR-NEXT: MTCTR8 killed renamable $x3, implicit-def $ctr8132 ; 64SMALL-MIR-NEXT: BCTR8 implicit $ctr8133 ; 64SMALL-MIR-NEXT: {{ $}}134 ; 64SMALL-MIR-NEXT: bb.2.sw.bb:135 ; 64SMALL-MIR-NEXT: successors: %bb.6(0x80000000)136 ; 64SMALL-MIR-NEXT: {{ $}}137 ; 64SMALL-MIR-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */138 ; 64SMALL-MIR-NEXT: B %bb.6139 ; 64SMALL-MIR-NEXT: {{ $}}140 ; 64SMALL-MIR-NEXT: bb.3.sw.bb1:141 ; 64SMALL-MIR-NEXT: successors: %bb.6(0x80000000)142 ; 64SMALL-MIR-NEXT: {{ $}}143 ; 64SMALL-MIR-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */144 ; 64SMALL-MIR-NEXT: B %bb.6145 ; 64SMALL-MIR-NEXT: {{ $}}146 ; 64SMALL-MIR-NEXT: bb.4.sw.bb2:147 ; 64SMALL-MIR-NEXT: successors: %bb.6(0x80000000)148 ; 64SMALL-MIR-NEXT: {{ $}}149 ; 64SMALL-MIR-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */150 ; 64SMALL-MIR-NEXT: B %bb.6151 ; 64SMALL-MIR-NEXT: {{ $}}152 ; 64SMALL-MIR-NEXT: bb.5.sw.bb3:153 ; 64SMALL-MIR-NEXT: successors: %bb.6(0x80000000)154 ; 64SMALL-MIR-NEXT: {{ $}}155 ; 64SMALL-MIR-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */156 ; 64SMALL-MIR-NEXT: {{ $}}157 ; 64SMALL-MIR-NEXT: bb.6.sw.epilog:158 ; 64SMALL-MIR-NEXT: $x3 = LI8 0159 ; 64SMALL-MIR-NEXT: BLR8 implicit $lr8, implicit $rm, implicit $x3160 ;161 ; 64LARGE-MIR-LABEL: name: jump_table162 ; 64LARGE-MIR: bb.0.entry:163 ; 64LARGE-MIR-NEXT: successors: %bb.6(0x19999998), %bb.1(0x66666668)164 ; 64LARGE-MIR-NEXT: liveins: $x3165 ; 64LARGE-MIR-NEXT: {{ $}}166 ; 64LARGE-MIR-NEXT: renamable $r3 = ADDI renamable $r3, -1, implicit killed $x3, implicit-def $x3167 ; 64LARGE-MIR-NEXT: renamable $cr0 = CMPLWI renamable $r3, 3168 ; 64LARGE-MIR-NEXT: BCC 44, killed renamable $cr0, %bb.6169 ; 64LARGE-MIR-NEXT: {{ $}}170 ; 64LARGE-MIR-NEXT: bb.1.entry:171 ; 64LARGE-MIR-NEXT: successors: %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000), %bb.5(0x20000000)172 ; 64LARGE-MIR-NEXT: liveins: $x3173 ; 64LARGE-MIR-NEXT: {{ $}}174 ; 64LARGE-MIR-NEXT: renamable $x3 = RLDIC killed renamable $x3, 2, 30175 ; 64LARGE-MIR-NEXT: renamable $x4 = ADDIStocHA8 $x2, %jump-table.0176 ; 64LARGE-MIR-NEXT: renamable $x4 = LDtocL %jump-table.0, killed renamable $x4, implicit $x2 :: (load (s64) from got)177 ; 64LARGE-MIR-NEXT: renamable $x3 = LWAX renamable $x4, killed renamable $x3 :: (load (s32) from jump-table)178 ; 64LARGE-MIR-NEXT: renamable $x3 = ADD8 killed renamable $x4, killed renamable $x3179 ; 64LARGE-MIR-NEXT: MTCTR8 killed renamable $x3, implicit-def $ctr8180 ; 64LARGE-MIR-NEXT: BCTR8 implicit $ctr8181 ; 64LARGE-MIR-NEXT: {{ $}}182 ; 64LARGE-MIR-NEXT: bb.2.sw.bb:183 ; 64LARGE-MIR-NEXT: successors: %bb.6(0x80000000)184 ; 64LARGE-MIR-NEXT: {{ $}}185 ; 64LARGE-MIR-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */186 ; 64LARGE-MIR-NEXT: B %bb.6187 ; 64LARGE-MIR-NEXT: {{ $}}188 ; 64LARGE-MIR-NEXT: bb.3.sw.bb1:189 ; 64LARGE-MIR-NEXT: successors: %bb.6(0x80000000)190 ; 64LARGE-MIR-NEXT: {{ $}}191 ; 64LARGE-MIR-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */192 ; 64LARGE-MIR-NEXT: B %bb.6193 ; 64LARGE-MIR-NEXT: {{ $}}194 ; 64LARGE-MIR-NEXT: bb.4.sw.bb2:195 ; 64LARGE-MIR-NEXT: successors: %bb.6(0x80000000)196 ; 64LARGE-MIR-NEXT: {{ $}}197 ; 64LARGE-MIR-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */198 ; 64LARGE-MIR-NEXT: B %bb.6199 ; 64LARGE-MIR-NEXT: {{ $}}200 ; 64LARGE-MIR-NEXT: bb.5.sw.bb3:201 ; 64LARGE-MIR-NEXT: successors: %bb.6(0x80000000)202 ; 64LARGE-MIR-NEXT: {{ $}}203 ; 64LARGE-MIR-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */204 ; 64LARGE-MIR-NEXT: {{ $}}205 ; 64LARGE-MIR-NEXT: bb.6.sw.epilog:206 ; 64LARGE-MIR-NEXT: $x3 = LI8 0207 ; 64LARGE-MIR-NEXT: BLR8 implicit $lr8, implicit $rm, implicit $x3208entry:209 switch i32 %a, label %sw.epilog [210 i32 1, label %sw.bb211 i32 2, label %sw.bb1212 i32 3, label %sw.bb2213 i32 4, label %sw.bb3214 ]215 216sw.bb:217 tail call void asm sideeffect "", ""()218 br label %sw.epilog219 220sw.bb1:221 tail call void asm sideeffect "", ""()222 br label %sw.epilog223 224sw.bb2:225 tail call void asm sideeffect "", ""()226 br label %sw.epilog227 228sw.bb3:229 tail call void asm sideeffect "", ""()230 br label %sw.epilog231 232sw.epilog:233 ret i32 0234}235