Reapply r143206, with fixes. Disallow physical register lifetimes
[oota-llvm.git] / test / CodeGen / CellSPU / select_bits.ll
1 ; RUN: llc < %s -march=cellspu > %t1.s
2 ; RUN: grep selb   %t1.s | count 56
3
4 ; CellSPU legalization is over-sensitive to Legalize's traversal order.
5 ; XFAIL: *
6
7 target datalayout = "E-p:32:32:128-f64:64:128-f32:32:128-i64:32:128-i32:32:128-i16:16:128-i8:8:128-i1:8:128-a0:0:128-v128:128:128-s0:128:128"
8 target triple = "spu"
9
10 ;-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
11 ; v2i64
12 ;-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
13
14 ; (or (and rC, rB), (and (not rC), rA))
15 define <2 x i64> @selectbits_v2i64_01(<2 x i64> %rA, <2 x i64> %rB, <2 x i64> %rC) {
16         %C = and <2 x i64> %rC, %rB
17         %A = xor <2 x i64> %rC, < i64 -1, i64 -1 >
18         %B = and <2 x i64> %A, %rA
19         %D = or <2 x i64> %C, %B
20         ret <2 x i64> %D
21 }
22
23 ; (or (and rB, rC), (and (not rC), rA))
24 define <2 x i64> @selectbits_v2i64_02(<2 x i64> %rA, <2 x i64> %rB, <2 x i64> %rC) {
25         %C = and <2 x i64> %rB, %rC
26         %A = xor <2 x i64> %rC, < i64 -1, i64 -1 >
27         %B = and <2 x i64> %A, %rA
28         %D = or <2 x i64> %C, %B
29         ret <2 x i64> %D
30 }
31
32 ; (or (and (not rC), rA), (and rB, rC))
33 define <2 x i64> @selectbits_v2i64_03(<2 x i64> %rA, <2 x i64> %rB, <2 x i64> %rC) {
34         %A = xor <2 x i64> %rC, < i64 -1, i64 -1 >
35         %B = and <2 x i64> %A, %rA
36         %C = and <2 x i64> %rB, %rC
37         %D = or <2 x i64> %C, %B
38         ret <2 x i64> %D
39 }
40
41 ; (or (and (not rC), rA), (and rC, rB))
42 define <2 x i64> @selectbits_v2i64_04(<2 x i64> %rA, <2 x i64> %rB, <2 x i64> %rC) {
43         %A = xor <2 x i64> %rC, < i64 -1, i64 -1 >
44         %B = and <2 x i64> %A, %rA
45         %C = and <2 x i64> %rC, %rB
46         %D = or <2 x i64> %C, %B
47         ret <2 x i64> %D
48 }
49
50 ; (or (and rC, rB), (and rA, (not rC)))
51 define <2 x i64> @selectbits_v2i64_05(<2 x i64> %rA, <2 x i64> %rB, <2 x i64> %rC) {
52         %C = and <2 x i64> %rC, %rB
53         %A = xor <2 x i64> %rC, < i64 -1, i64 -1 >
54         %B = and <2 x i64> %rA, %A
55         %D = or <2 x i64> %C, %B
56         ret <2 x i64> %D
57 }
58
59 ; (or (and rB, rC), (and rA, (not rC)))
60 define <2 x i64> @selectbits_v2i64_06(<2 x i64> %rA, <2 x i64> %rB, <2 x i64> %rC) {
61         %C = and <2 x i64> %rB, %rC
62         %A = xor <2 x i64> %rC, < i64 -1, i64 -1 >
63         %B = and <2 x i64> %rA, %A
64         %D = or <2 x i64> %C, %B
65         ret <2 x i64> %D
66 }
67
68 ; (or (and rA, (not rC)), (and rB, rC))
69 define <2 x i64> @selectbits_v2i64_07(<2 x i64> %rA, <2 x i64> %rB, <2 x i64> %rC) {
70         %A = xor <2 x i64> %rC, < i64 -1, i64 -1 >
71         %B = and <2 x i64> %rA, %A
72         %C = and <2 x i64> %rB, %rC
73         %D = or <2 x i64> %C, %B
74         ret <2 x i64> %D
75 }
76
77 ; (or (and rA, (not rC)), (and rC, rB))
78 define <2 x i64> @selectbits_v2i64_08(<2 x i64> %rA, <2 x i64> %rB, <2 x i64> %rC) {
79         %A = xor <2 x i64> %rC, < i64 -1, i64 -1 >
80         %B = and <2 x i64> %rA, %A
81         %C = and <2 x i64> %rC, %rB
82         %D = or <2 x i64> %C, %B
83         ret <2 x i64> %D
84 }
85
86 ;-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
87 ; v4i32
88 ;-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
89
90 ; (or (and rC, rB), (and (not rC), rA))
91 define <4 x i32> @selectbits_v4i32_01(<4 x i32> %rA, <4 x i32> %rB, <4 x i32> %rC) {
92         %C = and <4 x i32> %rC, %rB
93         %A = xor <4 x i32> %rC, < i32 -1, i32 -1, i32 -1, i32 -1 >
94         %B = and <4 x i32> %A, %rA
95         %D = or <4 x i32> %C, %B
96         ret <4 x i32> %D
97 }
98
99 ; (or (and rB, rC), (and (not rC), rA))
100 define <4 x i32> @selectbits_v4i32_02(<4 x i32> %rA, <4 x i32> %rB, <4 x i32> %rC) {
101         %C = and <4 x i32> %rB, %rC
102         %A = xor <4 x i32> %rC, < i32 -1, i32 -1, i32 -1, i32 -1 >
103         %B = and <4 x i32> %A, %rA
104         %D = or <4 x i32> %C, %B
105         ret <4 x i32> %D
106 }
107
108 ; (or (and (not rC), rA), (and rB, rC))
109 define <4 x i32> @selectbits_v4i32_03(<4 x i32> %rA, <4 x i32> %rB, <4 x i32> %rC) {
110         %A = xor <4 x i32> %rC, < i32 -1, i32 -1, i32 -1, i32 -1 >
111         %B = and <4 x i32> %A, %rA
112         %C = and <4 x i32> %rB, %rC
113         %D = or <4 x i32> %C, %B
114         ret <4 x i32> %D
115 }
116
117 ; (or (and (not rC), rA), (and rC, rB))
118 define <4 x i32> @selectbits_v4i32_04(<4 x i32> %rA, <4 x i32> %rB, <4 x i32> %rC) {
119         %A = xor <4 x i32> %rC, < i32 -1, i32 -1, i32 -1, i32 -1>
120         %B = and <4 x i32> %A, %rA
121         %C = and <4 x i32> %rC, %rB
122         %D = or <4 x i32> %C, %B
123         ret <4 x i32> %D
124 }
125
126 ; (or (and rC, rB), (and rA, (not rC)))
127 define <4 x i32> @selectbits_v4i32_05(<4 x i32> %rA, <4 x i32> %rB, <4 x i32> %rC) {
128         %C = and <4 x i32> %rC, %rB
129         %A = xor <4 x i32> %rC, < i32 -1, i32 -1, i32 -1, i32 -1>
130         %B = and <4 x i32> %rA, %A
131         %D = or <4 x i32> %C, %B
132         ret <4 x i32> %D
133 }
134
135 ; (or (and rB, rC), (and rA, (not rC)))
136 define <4 x i32> @selectbits_v4i32_06(<4 x i32> %rA, <4 x i32> %rB, <4 x i32> %rC) {
137         %C = and <4 x i32> %rB, %rC
138         %A = xor <4 x i32> %rC, < i32 -1, i32 -1, i32 -1, i32 -1>
139         %B = and <4 x i32> %rA, %A
140         %D = or <4 x i32> %C, %B
141         ret <4 x i32> %D
142 }
143
144 ; (or (and rA, (not rC)), (and rB, rC))
145 define <4 x i32> @selectbits_v4i32_07(<4 x i32> %rA, <4 x i32> %rB, <4 x i32> %rC) {
146         %A = xor <4 x i32> %rC, < i32 -1, i32 -1, i32 -1, i32 -1>
147         %B = and <4 x i32> %rA, %A
148         %C = and <4 x i32> %rB, %rC
149         %D = or <4 x i32> %C, %B
150         ret <4 x i32> %D
151 }
152
153 ; (or (and rA, (not rC)), (and rC, rB))
154 define <4 x i32> @selectbits_v4i32_08(<4 x i32> %rA, <4 x i32> %rB, <4 x i32> %rC) {
155         %A = xor <4 x i32> %rC, < i32 -1, i32 -1, i32 -1, i32 -1>
156         %B = and <4 x i32> %rA, %A
157         %C = and <4 x i32> %rC, %rB
158         %D = or <4 x i32> %C, %B
159         ret <4 x i32> %D
160 }
161
162 ;-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
163 ; v8i16
164 ;-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
165
166 ; (or (and rC, rB), (and (not rC), rA))
167 define <8 x i16> @selectbits_v8i16_01(<8 x i16> %rA, <8 x i16> %rB, <8 x i16> %rC) {
168         %C = and <8 x i16> %rC, %rB
169         %A = xor <8 x i16> %rC, < i16 -1, i16 -1, i16 -1, i16 -1,
170                                   i16 -1, i16 -1, i16 -1, i16 -1 >
171         %B = and <8 x i16> %A, %rA
172         %D = or <8 x i16> %C, %B
173         ret <8 x i16> %D
174 }
175
176 ; (or (and rB, rC), (and (not rC), rA))
177 define <8 x i16> @selectbits_v8i16_02(<8 x i16> %rA, <8 x i16> %rB, <8 x i16> %rC) {
178         %C = and <8 x i16> %rB, %rC
179         %A = xor <8 x i16> %rC, < i16 -1, i16 -1, i16 -1, i16 -1,
180                                   i16 -1, i16 -1, i16 -1, i16 -1 >
181         %B = and <8 x i16> %A, %rA
182         %D = or <8 x i16> %C, %B
183         ret <8 x i16> %D
184 }
185
186 ; (or (and (not rC), rA), (and rB, rC))
187 define <8 x i16> @selectbits_v8i16_03(<8 x i16> %rA, <8 x i16> %rB, <8 x i16> %rC) {
188         %A = xor <8 x i16> %rC, < i16 -1, i16 -1, i16 -1, i16 -1,
189                                   i16 -1, i16 -1, i16 -1, i16 -1 >
190         %B = and <8 x i16> %A, %rA
191         %C = and <8 x i16> %rB, %rC
192         %D = or <8 x i16> %C, %B
193         ret <8 x i16> %D
194 }
195
196 ; (or (and (not rC), rA), (and rC, rB))
197 define <8 x i16> @selectbits_v8i16_04(<8 x i16> %rA, <8 x i16> %rB, <8 x i16> %rC) {
198         %A = xor <8 x i16> %rC, < i16 -1, i16 -1, i16 -1, i16 -1,
199                                   i16 -1, i16 -1, i16 -1, i16 -1 >
200         %B = and <8 x i16> %A, %rA
201         %C = and <8 x i16> %rC, %rB
202         %D = or <8 x i16> %C, %B
203         ret <8 x i16> %D
204 }
205
206 ; (or (and rC, rB), (and rA, (not rC)))
207 define <8 x i16> @selectbits_v8i16_05(<8 x i16> %rA, <8 x i16> %rB, <8 x i16> %rC) {
208         %C = and <8 x i16> %rC, %rB
209         %A = xor <8 x i16> %rC, < i16 -1, i16 -1, i16 -1, i16 -1,
210                                   i16 -1, i16 -1, i16 -1, i16 -1 >
211         %B = and <8 x i16> %rA, %A
212         %D = or <8 x i16> %C, %B
213         ret <8 x i16> %D
214 }
215
216 ; (or (and rB, rC), (and rA, (not rC)))
217 define <8 x i16> @selectbits_v8i16_06(<8 x i16> %rA, <8 x i16> %rB, <8 x i16> %rC) {
218         %C = and <8 x i16> %rB, %rC
219         %A = xor <8 x i16> %rC, < i16 -1, i16 -1, i16 -1, i16 -1,
220                                   i16 -1, i16 -1, i16 -1, i16 -1 >
221         %B = and <8 x i16> %rA, %A
222         %D = or <8 x i16> %C, %B
223         ret <8 x i16> %D
224 }
225
226 ; (or (and rA, (not rC)), (and rB, rC))
227 define <8 x i16> @selectbits_v8i16_07(<8 x i16> %rA, <8 x i16> %rB, <8 x i16> %rC) {
228         %A = xor <8 x i16> %rC, < i16 -1, i16 -1, i16 -1, i16 -1,
229                                   i16 -1, i16 -1, i16 -1, i16 -1 >
230         %B = and <8 x i16> %rA, %A
231         %C = and <8 x i16> %rB, %rC
232         %D = or <8 x i16> %C, %B
233         ret <8 x i16> %D
234 }
235
236 ; (or (and rA, (not rC)), (and rC, rB))
237 define <8 x i16> @selectbits_v8i16_08(<8 x i16> %rA, <8 x i16> %rB, <8 x i16> %rC) {
238         %A = xor <8 x i16> %rC, < i16 -1, i16 -1, i16 -1, i16 -1,
239                                   i16 -1, i16 -1, i16 -1, i16 -1 >
240         %B = and <8 x i16> %rA, %A
241         %C = and <8 x i16> %rC, %rB
242         %D = or <8 x i16> %C, %B
243         ret <8 x i16> %D
244 }
245
246 ;-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
247 ; v16i8
248 ;-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
249
250 ; (or (and rC, rB), (and (not rC), rA))
251 define <16 x i8> @selectbits_v16i8_01(<16 x i8> %rA, <16 x i8> %rB, <16 x i8> %rC) {
252         %C = and <16 x i8> %rC, %rB
253         %A = xor <16 x i8> %rC, < i8 -1, i8 -1, i8 -1, i8 -1,
254                                   i8 -1, i8 -1, i8 -1, i8 -1,
255                                   i8 -1, i8 -1, i8 -1, i8 -1,
256                                   i8 -1, i8 -1, i8 -1, i8 -1 >
257         %B = and <16 x i8> %A, %rA
258         %D = or <16 x i8> %C, %B
259         ret <16 x i8> %D
260 }
261
262 ; (or (and rB, rC), (and (not rC), rA))
263 define <16 x i8> @selectbits_v16i8_02(<16 x i8> %rA, <16 x i8> %rB, <16 x i8> %rC) {
264         %C = and <16 x i8> %rB, %rC
265         %A = xor <16 x i8> %rC, < i8 -1, i8 -1, i8 -1, i8 -1,
266                                   i8 -1, i8 -1, i8 -1, i8 -1,
267                                   i8 -1, i8 -1, i8 -1, i8 -1,
268                                   i8 -1, i8 -1, i8 -1, i8 -1 >
269         %B = and <16 x i8> %A, %rA
270         %D = or <16 x i8> %C, %B
271         ret <16 x i8> %D
272 }
273
274 ; (or (and (not rC), rA), (and rB, rC))
275 define <16 x i8> @selectbits_v16i8_03(<16 x i8> %rA, <16 x i8> %rB, <16 x i8> %rC) {
276         %A = xor <16 x i8> %rC, < i8 -1, i8 -1, i8 -1, i8 -1,
277                                   i8 -1, i8 -1, i8 -1, i8 -1,
278                                   i8 -1, i8 -1, i8 -1, i8 -1,
279                                   i8 -1, i8 -1, i8 -1, i8 -1 >
280         %B = and <16 x i8> %A, %rA
281         %C = and <16 x i8> %rB, %rC
282         %D = or <16 x i8> %C, %B
283         ret <16 x i8> %D
284 }
285
286 ; (or (and (not rC), rA), (and rC, rB))
287 define <16 x i8> @selectbits_v16i8_04(<16 x i8> %rA, <16 x i8> %rB, <16 x i8> %rC) {
288         %A = xor <16 x i8> %rC, < i8 -1, i8 -1, i8 -1, i8 -1,
289                                   i8 -1, i8 -1, i8 -1, i8 -1,
290                                   i8 -1, i8 -1, i8 -1, i8 -1,
291                                   i8 -1, i8 -1, i8 -1, i8 -1 >
292         %B = and <16 x i8> %A, %rA
293         %C = and <16 x i8> %rC, %rB
294         %D = or <16 x i8> %C, %B
295         ret <16 x i8> %D
296 }
297
298 ; (or (and rC, rB), (and rA, (not rC)))
299 define <16 x i8> @selectbits_v16i8_05(<16 x i8> %rA, <16 x i8> %rB, <16 x i8> %rC) {
300         %C = and <16 x i8> %rC, %rB
301         %A = xor <16 x i8> %rC, < i8 -1, i8 -1, i8 -1, i8 -1,
302                                   i8 -1, i8 -1, i8 -1, i8 -1,
303                                   i8 -1, i8 -1, i8 -1, i8 -1,
304                                   i8 -1, i8 -1, i8 -1, i8 -1 >
305         %B = and <16 x i8> %rA, %A
306         %D = or <16 x i8> %C, %B
307         ret <16 x i8> %D
308 }
309
310 ; (or (and rB, rC), (and rA, (not rC)))
311 define <16 x i8> @selectbits_v16i8_06(<16 x i8> %rA, <16 x i8> %rB, <16 x i8> %rC) {
312         %C = and <16 x i8> %rB, %rC
313         %A = xor <16 x i8> %rC, < i8 -1, i8 -1, i8 -1, i8 -1,
314                                   i8 -1, i8 -1, i8 -1, i8 -1,
315                                   i8 -1, i8 -1, i8 -1, i8 -1,
316                                   i8 -1, i8 -1, i8 -1, i8 -1 >
317         %B = and <16 x i8> %rA, %A
318         %D = or <16 x i8> %C, %B
319         ret <16 x i8> %D
320 }
321
322 ; (or (and rA, (not rC)), (and rB, rC))
323 define <16 x i8> @selectbits_v16i8_07(<16 x i8> %rA, <16 x i8> %rB, <16 x i8> %rC) {
324         %A = xor <16 x i8> %rC, < i8 -1, i8 -1, i8 -1, i8 -1,
325                                   i8 -1, i8 -1, i8 -1, i8 -1,
326                                   i8 -1, i8 -1, i8 -1, i8 -1,
327                                   i8 -1, i8 -1, i8 -1, i8 -1 >
328         %B = and <16 x i8> %rA, %A
329         %C = and <16 x i8> %rB, %rC
330         %D = or <16 x i8> %C, %B
331         ret <16 x i8> %D
332 }
333
334 ; (or (and rA, (not rC)), (and rC, rB))
335 define <16 x i8> @selectbits_v16i8_08(<16 x i8> %rA, <16 x i8> %rB, <16 x i8> %rC) {
336         %A = xor <16 x i8> %rC, < i8 -1, i8 -1, i8 -1, i8 -1,
337                                   i8 -1, i8 -1, i8 -1, i8 -1,
338                                   i8 -1, i8 -1, i8 -1, i8 -1,
339                                   i8 -1, i8 -1, i8 -1, i8 -1 >
340         %B = and <16 x i8> %rA, %A
341         %C = and <16 x i8> %rC, %rB
342         %D = or <16 x i8> %C, %B
343         ret <16 x i8> %D
344 }
345
346 ;-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
347 ; i32
348 ;-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
349
350 ; (or (and rC, rB), (and (not rC), rA))
351 define i32 @selectbits_i32_01(i32 %rA, i32 %rB, i32 %rC) {
352         %C = and i32 %rC, %rB
353         %A = xor i32 %rC, -1
354         %B = and i32 %A, %rA
355         %D = or i32 %C, %B
356         ret i32 %D
357 }
358
359 ; (or (and rB, rC), (and (not rC), rA))
360 define i32 @selectbits_i32_02(i32 %rA, i32 %rB, i32 %rC) {
361         %C = and i32 %rB, %rC
362         %A = xor i32 %rC, -1
363         %B = and i32 %A, %rA
364         %D = or i32 %C, %B
365         ret i32 %D
366 }
367
368 ; (or (and (not rC), rA), (and rB, rC))
369 define i32 @selectbits_i32_03(i32 %rA, i32 %rB, i32 %rC) {
370         %A = xor i32 %rC, -1
371         %B = and i32 %A, %rA
372         %C = and i32 %rB, %rC
373         %D = or i32 %C, %B
374         ret i32 %D
375 }
376
377 ; (or (and (not rC), rA), (and rC, rB))
378 define i32 @selectbits_i32_04(i32 %rA, i32 %rB, i32 %rC) {
379         %A = xor i32 %rC, -1
380         %B = and i32 %A, %rA
381         %C = and i32 %rC, %rB
382         %D = or i32 %C, %B
383         ret i32 %D
384 }
385
386 ; (or (and rC, rB), (and rA, (not rC)))
387 define i32 @selectbits_i32_05(i32 %rA, i32 %rB, i32 %rC) {
388         %C = and i32 %rC, %rB
389         %A = xor i32 %rC, -1
390         %B = and i32 %rA, %A
391         %D = or i32 %C, %B
392         ret i32 %D
393 }
394
395 ; (or (and rB, rC), (and rA, (not rC)))
396 define i32 @selectbits_i32_06(i32 %rA, i32 %rB, i32 %rC) {
397         %C = and i32 %rB, %rC
398         %A = xor i32 %rC, -1
399         %B = and i32 %rA, %A
400         %D = or i32 %C, %B
401         ret i32 %D
402 }
403
404 ; (or (and rA, (not rC)), (and rB, rC))
405 define i32 @selectbits_i32_07(i32 %rA, i32 %rB, i32 %rC) {
406         %A = xor i32 %rC, -1
407         %B = and i32 %rA, %A
408         %C = and i32 %rB, %rC
409         %D = or i32 %C, %B
410         ret i32 %D
411 }
412
413 ; (or (and rA, (not rC)), (and rC, rB))
414 define i32 @selectbits_i32_08(i32 %rA, i32 %rB, i32 %rC) {
415         %A = xor i32 %rC, -1
416         %B = and i32 %rA, %A
417         %C = and i32 %rC, %rB
418         %D = or i32 %C, %B
419         ret i32 %D
420 }
421
422 ;-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
423 ; i16
424 ;-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
425
426 ; (or (and rC, rB), (and (not rC), rA))
427 define i16 @selectbits_i16_01(i16 %rA, i16 %rB, i16 %rC) {
428         %C = and i16 %rC, %rB
429         %A = xor i16 %rC, -1
430         %B = and i16 %A, %rA
431         %D = or i16 %C, %B
432         ret i16 %D
433 }
434
435 ; (or (and rB, rC), (and (not rC), rA))
436 define i16 @selectbits_i16_02(i16 %rA, i16 %rB, i16 %rC) {
437         %C = and i16 %rB, %rC
438         %A = xor i16 %rC, -1
439         %B = and i16 %A, %rA
440         %D = or i16 %C, %B
441         ret i16 %D
442 }
443
444 ; (or (and (not rC), rA), (and rB, rC))
445 define i16 @selectbits_i16_03(i16 %rA, i16 %rB, i16 %rC) {
446         %A = xor i16 %rC, -1
447         %B = and i16 %A, %rA
448         %C = and i16 %rB, %rC
449         %D = or i16 %C, %B
450         ret i16 %D
451 }
452
453 ; (or (and (not rC), rA), (and rC, rB))
454 define i16 @selectbits_i16_04(i16 %rA, i16 %rB, i16 %rC) {
455         %A = xor i16 %rC, -1
456         %B = and i16 %A, %rA
457         %C = and i16 %rC, %rB
458         %D = or i16 %C, %B
459         ret i16 %D
460 }
461
462 ; (or (and rC, rB), (and rA, (not rC)))
463 define i16 @selectbits_i16_05(i16 %rA, i16 %rB, i16 %rC) {
464         %C = and i16 %rC, %rB
465         %A = xor i16 %rC, -1
466         %B = and i16 %rA, %A
467         %D = or i16 %C, %B
468         ret i16 %D
469 }
470
471 ; (or (and rB, rC), (and rA, (not rC)))
472 define i16 @selectbits_i16_06(i16 %rA, i16 %rB, i16 %rC) {
473         %C = and i16 %rB, %rC
474         %A = xor i16 %rC, -1
475         %B = and i16 %rA, %A
476         %D = or i16 %C, %B
477         ret i16 %D
478 }
479
480 ; (or (and rA, (not rC)), (and rB, rC))
481 define i16 @selectbits_i16_07(i16 %rA, i16 %rB, i16 %rC) {
482         %A = xor i16 %rC, -1
483         %B = and i16 %rA, %A
484         %C = and i16 %rB, %rC
485         %D = or i16 %C, %B
486         ret i16 %D
487 }
488
489 ; (or (and rA, (not rC)), (and rC, rB))
490 define i16 @selectbits_i16_08(i16 %rA, i16 %rB, i16 %rC) {
491         %A = xor i16 %rC, -1
492         %B = and i16 %rA, %A
493         %C = and i16 %rC, %rB
494         %D = or i16 %C, %B
495         ret i16 %D
496 }
497
498 ;-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
499 ; i8
500 ;-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
501
502 ; (or (and rC, rB), (and (not rC), rA))
503 define i8 @selectbits_i8_01(i8 %rA, i8 %rB, i8 %rC) {
504         %C = and i8 %rC, %rB
505         %A = xor i8 %rC, -1
506         %B = and i8 %A, %rA
507         %D = or i8 %C, %B
508         ret i8 %D
509 }
510
511 ; (or (and rB, rC), (and (not rC), rA))
512 define i8 @selectbits_i8_02(i8 %rA, i8 %rB, i8 %rC) {
513         %C = and i8 %rB, %rC
514         %A = xor i8 %rC, -1
515         %B = and i8 %A, %rA
516         %D = or i8 %C, %B
517         ret i8 %D
518 }
519
520 ; (or (and (not rC), rA), (and rB, rC))
521 define i8 @selectbits_i8_03(i8 %rA, i8 %rB, i8 %rC) {
522         %A = xor i8 %rC, -1
523         %B = and i8 %A, %rA
524         %C = and i8 %rB, %rC
525         %D = or i8 %C, %B
526         ret i8 %D
527 }
528
529 ; (or (and (not rC), rA), (and rC, rB))
530 define i8 @selectbits_i8_04(i8 %rA, i8 %rB, i8 %rC) {
531         %A = xor i8 %rC, -1
532         %B = and i8 %A, %rA
533         %C = and i8 %rC, %rB
534         %D = or i8 %C, %B
535         ret i8 %D
536 }
537
538 ; (or (and rC, rB), (and rA, (not rC)))
539 define i8 @selectbits_i8_05(i8 %rA, i8 %rB, i8 %rC) {
540         %C = and i8 %rC, %rB
541         %A = xor i8 %rC, -1
542         %B = and i8 %rA, %A
543         %D = or i8 %C, %B
544         ret i8 %D
545 }
546
547 ; (or (and rB, rC), (and rA, (not rC)))
548 define i8 @selectbits_i8_06(i8 %rA, i8 %rB, i8 %rC) {
549         %C = and i8 %rB, %rC
550         %A = xor i8 %rC, -1
551         %B = and i8 %rA, %A
552         %D = or i8 %C, %B
553         ret i8 %D
554 }
555
556 ; (or (and rA, (not rC)), (and rB, rC))
557 define i8 @selectbits_i8_07(i8 %rA, i8 %rB, i8 %rC) {
558         %A = xor i8 %rC, -1
559         %B = and i8 %rA, %A
560         %C = and i8 %rB, %rC
561         %D = or i8 %C, %B
562         ret i8 %D
563 }
564
565 ; (or (and rA, (not rC)), (and rC, rB))
566 define i8 @selectbits_i8_08(i8 %rA, i8 %rB, i8 %rC) {
567         %A = xor i8 %rC, -1
568         %B = and i8 %rA, %A
569         %C = and i8 %rC, %rB
570         %D = or i8 %C, %B
571         ret i8 %D
572 }