• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
7target 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"
8target triple = "spu"
9
10;-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
11; v2i64
12;-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
13
14; (or (and rC, rB), (and (not rC), rA))
15define <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))
24define <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))
33define <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))
42define <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)))
51define <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)))
60define <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))
69define <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))
78define <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))
91define <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))
100define <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))
109define <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))
118define <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)))
127define <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)))
136define <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))
145define <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))
154define <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))
167define <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))
177define <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))
187define <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))
197define <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)))
207define <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)))
217define <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))
227define <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))
237define <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))
251define <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))
263define <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))
275define <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))
287define <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)))
299define <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)))
311define <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))
323define <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))
335define <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))
351define 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))
360define 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))
369define 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))
378define 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)))
387define 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)))
396define 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))
405define 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))
414define 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))
427define 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))
436define 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))
445define 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))
454define 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)))
463define 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)))
472define 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))
481define 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))
490define 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))
503define 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))
512define 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))
521define 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))
530define 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)))
539define 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)))
548define 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))
557define 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))
566define 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}
573