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
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
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
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
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
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
19 define i32 @jump_table(i32 %a) {
21 switch i32 %a, label %sw.epilog [
29 tail call void asm sideeffect "", ""()
33 tail call void asm sideeffect "", ""()
37 tail call void asm sideeffect "", ""()
41 tail call void asm sideeffect "", ""()
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
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
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
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
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
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
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
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
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
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
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
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
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:
161 ; FUNC-ASM: .csect .rodata.jmp..jump_table[RO],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
170 ; SMALL-ASM: .tc L..JTI0_0[TC],L..JTI0_0
173 ; LARGE-ASM: .tc L..JTI0_0[TE],L..JTI0_0