1; RUN: llc -mtriple powerpc-ibm-aix-xcoff -ppc-min-jump-table-entries=4 -code-model=small < %s | FileCheck \ 2; RUN: --check-prefixes=32SMALL-ASM,SMALL-ASM %s 3 4; RUN: llc -mtriple powerpc-ibm-aix-xcoff -ppc-min-jump-table-entries=4 -code-model=large < %s | FileCheck \ 5; RUN: --check-prefixes=32LARGE-ASM,LARGE-ASM %s 6 7; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -ppc-min-jump-table-entries=4 -code-model=small < %s | FileCheck \ 8; RUN: --check-prefixes=64SMALL-ASM,SMALL-ASM %s 9 10; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -ppc-min-jump-table-entries=4 -code-model=large < %s | FileCheck \ 11; RUN: --check-prefixes=64LARGE-ASM,LARGE-ASM %s 12 13; RUN: llc -mtriple powerpc-ibm-aix-xcoff -ppc-min-jump-table-entries=4 -function-sections < %s | FileCheck \ 14; RUN: --check-prefix=FUNC-ASM %s 15 16; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -ppc-min-jump-table-entries=4 -function-sections < %s | FileCheck \ 17; RUN: --check-prefix=FUNC-ASM %s 18 19define i32 @jump_table(i32 %a) { 20entry: 21 switch i32 %a, label %sw.epilog [ 22 i32 1, label %sw.bb 23 i32 2, label %sw.bb1 24 i32 3, label %sw.bb2 25 i32 4, label %sw.bb3 26 ] 27 28sw.bb: 29 tail call void asm sideeffect "", ""() 30 br label %sw.epilog 31 32sw.bb1: 33 tail call void asm sideeffect "", ""() 34 br label %sw.epilog 35 36sw.bb2: 37 tail call void asm sideeffect "", ""() 38 br label %sw.epilog 39 40sw.bb3: 41 tail call void asm sideeffect "", ""() 42 br label %sw.epilog 43 44sw.epilog: 45 ret i32 0 46} 47; 32SMALL-ASM-LABEL: jump_table 48; 32SMALL-ASM: .jump_table: 49; 32SMALL-ASM: addi 3, 3, -1 50; 32SMALL-ASM: cmplwi 3, 3 51; 32SMALL-ASM: bgt 0, L..BB0_3 52; 32SMALL-ASM: lwz 4, L..C0(2) 53; 32SMALL-ASM: slwi 3, 3, 2 54; 32SMALL-ASM: lwzx 3, 3, 4 55; 32SMALL-ASM: add 3, 3, 4 56; 32SMALL-ASM: mtctr 3 57; 32SMALL-ASM: bctr 58; 32SMALL-ASM: L..BB0_2: 59; 32SMALL-ASM: L..BB0_3: 60; 32SMALL-ASM: L..BB0_4: 61; 32SMALL-ASM: L..BB0_5: 62; 32SMALL-ASM: L..BB0_6: 63; 32SMALL-ASM: li 3, 0 64; 32SMALL-ASM: blr 65; 32SMALL-ASM: .csect .rodata[RO],2 66; 32SMALL-ASM: .align 2 67; 32SMALL-ASM: L..JTI0_0: 68; 32SMALL-ASM: .vbyte 4, L..BB0_2-L..JTI0_0 69; 32SMALL-ASM: .vbyte 4, L..BB0_6-L..JTI0_0 70; 32SMALL-ASM: .vbyte 4, L..BB0_4-L..JTI0_0 71; 32SMALL-ASM: .vbyte 4, L..BB0_5-L..JTI0_0 72 73; 32LARGE-ASM-LABEL: jump_table 74; 32LARGE-ASM: .jump_table: 75; 32LARGE-ASM: addi 3, 3, -1 76; 32LARGE-ASM: cmplwi 3, 3 77; 32LARGE-ASM: bgt 0, L..BB0_3 78; 32LARGE-ASM: addis 4, L..C0@u(2) 79; 32LARGE-ASM: slwi 3, 3, 2 80; 32LARGE-ASM: lwz 4, L..C0@l(4) 81; 32LARGE-ASM: lwzx 3, 3, 4 82; 32LARGE-ASM: add 3, 3, 4 83; 32LARGE-ASM: mtctr 3 84; 32LARGE-ASM: bctr 85; 32LARGE-ASM: L..BB0_2: 86; 32LARGE-ASM: L..BB0_3: 87; 32LARGE-ASM: L..BB0_4: 88; 32LARGE-ASM: L..BB0_5: 89; 32LARGE-ASM: L..BB0_6: 90; 32LARGE-ASM: li 3, 0 91; 32LARGE-ASM: blr 92; 32LARGE-ASM: .csect .rodata[RO],2 93; 32LARGE-ASM: .align 2 94; 32LARGE-ASM: L..JTI0_0: 95; 32LARGE-ASM: .vbyte 4, L..BB0_2-L..JTI0_0 96; 32LARGE-ASM: .vbyte 4, L..BB0_6-L..JTI0_0 97; 32LARGE-ASM: .vbyte 4, L..BB0_4-L..JTI0_0 98; 32LARGE-ASM: .vbyte 4, L..BB0_5-L..JTI0_0 99 100; 64SMALL-ASM-LABEL: jump_table 101; 64SMALL-ASM: .jump_table: 102; 64SMALL-ASM: addi 3, 3, -1 103; 64SMALL-ASM: cmplwi 3, 3 104; 64SMALL-ASM: bgt 0, L..BB0_3 105; 64SMALL-ASM: ld 4, L..C0(2) 106; 64SMALL-ASM: rldic 3, 3, 2, 30 107; 64SMALL-ASM: lwax 3, 3, 4 108; 64SMALL-ASM: add 3, 3, 4 109; 64SMALL-ASM: mtctr 3 110; 64SMALL-ASM: bctr 111; 64SMALL-ASM: L..BB0_2: 112; 64SMALL-ASM: L..BB0_3: 113; 64SMALL-ASM: L..BB0_4: 114; 64SMALL-ASM: L..BB0_5: 115; 64SMALL-ASM: L..BB0_6: 116; 64SMALL-ASM: li 3, 0 117; 64SMALL-ASM: blr 118; 64SMALL-ASM: .csect .rodata[RO],2 119; 64SMALL-ASM: .align 2 120; 64SMALL-ASM: L..JTI0_0: 121; 64SMALL-ASM: .vbyte 4, L..BB0_2-L..JTI0_0 122; 64SMALL-ASM: .vbyte 4, L..BB0_6-L..JTI0_0 123; 64SMALL-ASM: .vbyte 4, L..BB0_4-L..JTI0_0 124; 64SMALL-ASM: .vbyte 4, L..BB0_5-L..JTI0_0 125 126; 64LARGE-ASM-LABEL: jump_table 127; 64LARGE-ASM: .jump_table: 128; 64LARGE-ASM: addi 3, 3, -1 129; 64LARGE-ASM: cmplwi 3, 3 130; 64LARGE-ASM: bgt 0, L..BB0_3 131; 64LARGE-ASM: addis 4, L..C0@u(2) 132; 64LARGE-ASM: rldic 3, 3, 2, 30 133; 64LARGE-ASM: ld 4, L..C0@l(4) 134; 64LARGE-ASM: lwax 3, 3, 4 135; 64LARGE-ASM: add 3, 3, 4 136; 64LARGE-ASM: mtctr 3 137; 64LARGE-ASM: bctr 138; 64LARGE-ASM: L..BB0_2: 139; 64LARGE-ASM: L..BB0_3: 140; 64LARGE-ASM: L..BB0_4: 141; 64LARGE-ASM: L..BB0_5: 142; 64LARGE-ASM: L..BB0_6: 143; 64LARGE-ASM: li 3, 0 144; 64LARGE-ASM: blr 145; 64LARGE-ASM: .csect .rodata[RO],2 146; 64LARGE-ASM: .align 2 147; 64LARGE-ASM: L..JTI0_0: 148; 64LARGE-ASM: .vbyte 4, L..BB0_2-L..JTI0_0 149; 64LARGE-ASM: .vbyte 4, L..BB0_6-L..JTI0_0 150; 64LARGE-ASM: .vbyte 4, L..BB0_4-L..JTI0_0 151; 64LARGE-ASM: .vbyte 4, L..BB0_5-L..JTI0_0 152 153; FUNC-ASM: .csect .jump_table[PR],5 154; FUNC-ASM: L..BB0_2: 155; FUNC-ASM: L..BB0_3: 156; FUNC-ASM: L..BB0_4: 157; FUNC-ASM: L..BB0_5: 158; FUNC-ASM: L..BB0_6: 159; FUNC-ASM: li 3, 0 160; FUNC-ASM: blr 161; FUNC-ASM: .csect .rodata.jmp..jump_table[RO],2 162; FUNC-ASM: .align 2 163; FUNC-ASM: L..JTI0_0: 164; FUNC-ASM: .vbyte 4, L..BB0_2-L..JTI0_0 165; FUNC-ASM: .vbyte 4, L..BB0_6-L..JTI0_0 166; FUNC-ASM: .vbyte 4, L..BB0_4-L..JTI0_0 167; FUNC-ASM: .vbyte 4, L..BB0_5-L..JTI0_0 168 169; SMALL-ASM: .toc 170; SMALL-ASM: .tc L..JTI0_0[TC],L..JTI0_0 171 172; LARGE-ASM: .toc 173; LARGE-ASM: .tc L..JTI0_0[TE],L..JTI0_0 174