174 lines · plain
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 %s3 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 %s6 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 %s9 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 %s12 13; RUN: llc -mtriple powerpc-ibm-aix-xcoff -ppc-min-jump-table-entries=4 -function-sections < %s | FileCheck \14; RUN: --check-prefix=FUNC-ASM %s15 16; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -ppc-min-jump-table-entries=4 -function-sections < %s | FileCheck \17; RUN: --check-prefix=FUNC-ASM %s18 19define i32 @jump_table(i32 %a) {20entry:21 switch i32 %a, label %sw.epilog [22 i32 1, label %sw.bb23 i32 2, label %sw.bb124 i32 3, label %sw.bb225 i32 4, label %sw.bb326 ]27 28sw.bb:29 tail call void asm sideeffect "", ""()30 br label %sw.epilog31 32sw.bb1:33 tail call void asm sideeffect "", ""()34 br label %sw.epilog35 36sw.bb2:37 tail call void asm sideeffect "", ""()38 br label %sw.epilog39 40sw.bb3:41 tail call void asm sideeffect "", ""()42 br label %sw.epilog43 44sw.epilog:45 ret i32 046}47; 32SMALL-ASM-LABEL: jump_table48; 32SMALL-ASM: .jump_table:49; 32SMALL-ASM: addi 3, 3, -150; 32SMALL-ASM: cmplwi 3, 351; 32SMALL-ASM: bgt 0, L..BB0_352; 32SMALL-ASM: lwz 4, L..C0(2)53; 32SMALL-ASM: slwi 3, 3, 254; 32SMALL-ASM: lwzx 3, 4, 355; 32SMALL-ASM: add 3, 4, 356; 32SMALL-ASM: mtctr 357; 32SMALL-ASM: bctr58; 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, 064; 32SMALL-ASM: blr65; 32SMALL-ASM: .csect .rodata[RO],266; 32SMALL-ASM: .align 267; 32SMALL-ASM: L..JTI0_0:68; 32SMALL-ASM: .vbyte 4, L..BB0_2-L..JTI0_069; 32SMALL-ASM: .vbyte 4, L..BB0_6-L..JTI0_070; 32SMALL-ASM: .vbyte 4, L..BB0_4-L..JTI0_071; 32SMALL-ASM: .vbyte 4, L..BB0_5-L..JTI0_072 73; 32LARGE-ASM-LABEL: jump_table74; 32LARGE-ASM: .jump_table:75; 32LARGE-ASM: addi 3, 3, -176; 32LARGE-ASM: cmplwi 3, 377; 32LARGE-ASM: bgt 0, L..BB0_378; 32LARGE-ASM: addis 4, L..C0@u(2)79; 32LARGE-ASM: slwi 3, 3, 280; 32LARGE-ASM: lwz 4, L..C0@l(4)81; 32LARGE-ASM: lwzx 3, 4, 382; 32LARGE-ASM: add 3, 4, 383; 32LARGE-ASM: mtctr 384; 32LARGE-ASM: bctr85; 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, 091; 32LARGE-ASM: blr92; 32LARGE-ASM: .csect .rodata[RO],293; 32LARGE-ASM: .align 294; 32LARGE-ASM: L..JTI0_0:95; 32LARGE-ASM: .vbyte 4, L..BB0_2-L..JTI0_096; 32LARGE-ASM: .vbyte 4, L..BB0_6-L..JTI0_097; 32LARGE-ASM: .vbyte 4, L..BB0_4-L..JTI0_098; 32LARGE-ASM: .vbyte 4, L..BB0_5-L..JTI0_099 100; 64SMALL-ASM-LABEL: jump_table101; 64SMALL-ASM: .jump_table:102; 64SMALL-ASM: addi 3, 3, -1103; 64SMALL-ASM: cmplwi 3, 3104; 64SMALL-ASM: bgt 0, L..BB0_3105; 64SMALL-ASM: ld 4, L..C0(2)106; 64SMALL-ASM: rldic 3, 3, 2, 30107; 64SMALL-ASM: lwax 3, 4, 3108; 64SMALL-ASM: add 3, 4, 3109; 64SMALL-ASM: mtctr 3110; 64SMALL-ASM: bctr111; 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, 0117; 64SMALL-ASM: blr118; 64SMALL-ASM: .csect .rodata[RO],2119; 64SMALL-ASM: .align 2120; 64SMALL-ASM: L..JTI0_0:121; 64SMALL-ASM: .vbyte 4, L..BB0_2-L..JTI0_0122; 64SMALL-ASM: .vbyte 4, L..BB0_6-L..JTI0_0123; 64SMALL-ASM: .vbyte 4, L..BB0_4-L..JTI0_0124; 64SMALL-ASM: .vbyte 4, L..BB0_5-L..JTI0_0125 126; 64LARGE-ASM-LABEL: jump_table127; 64LARGE-ASM: .jump_table:128; 64LARGE-ASM: addi 3, 3, -1129; 64LARGE-ASM: cmplwi 3, 3130; 64LARGE-ASM: bgt 0, L..BB0_3131; 64LARGE-ASM: addis 4, L..C0@u(2)132; 64LARGE-ASM: rldic 3, 3, 2, 30133; 64LARGE-ASM: ld 4, L..C0@l(4)134; 64LARGE-ASM: lwax 3, 4, 3135; 64LARGE-ASM: add 3, 4, 3136; 64LARGE-ASM: mtctr 3137; 64LARGE-ASM: bctr138; 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, 0144; 64LARGE-ASM: blr145; 64LARGE-ASM: .csect .rodata[RO],2146; 64LARGE-ASM: .align 2147; 64LARGE-ASM: L..JTI0_0:148; 64LARGE-ASM: .vbyte 4, L..BB0_2-L..JTI0_0149; 64LARGE-ASM: .vbyte 4, L..BB0_6-L..JTI0_0150; 64LARGE-ASM: .vbyte 4, L..BB0_4-L..JTI0_0151; 64LARGE-ASM: .vbyte 4, L..BB0_5-L..JTI0_0152 153; FUNC-ASM: .csect .jump_table[PR],5154; 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, 0160; FUNC-ASM: blr161; FUNC-ASM: .csect .rodata.jmp..jump_table[RO],2162; FUNC-ASM: .align 2163; FUNC-ASM: L..JTI0_0:164; FUNC-ASM: .vbyte 4, L..BB0_2-L..JTI0_0165; FUNC-ASM: .vbyte 4, L..BB0_6-L..JTI0_0166; FUNC-ASM: .vbyte 4, L..BB0_4-L..JTI0_0167; FUNC-ASM: .vbyte 4, L..BB0_5-L..JTI0_0168 169; SMALL-ASM: .toc170; SMALL-ASM: .tc L..JTI0_0[TC],L..JTI0_0171 172; LARGE-ASM: .toc173; LARGE-ASM: .tc L..JTI0_0[TE],L..JTI0_0174