Two more test cases: or_ops.ll (arithmetic or operations) and vecinsert.ll
[oota-llvm.git] / test / CodeGen / CellSPU / or_ops.ll
1 ; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s
2 ; RUN: grep and    %t1.s | count 2
3 ; RUN: grep orc    %t1.s | count 85
4 ; RUN: grep ori    %t1.s | count 30
5 ; RUN: grep orhi   %t1.s | count 30
6 ; RUN: grep orbi   %t1.s | count 15
7
8 ; OR instruction generation:
9 define <4 x i32> @or_v4i32_1(<4 x i32> %arg1, <4 x i32> %arg2) {
10         %A = or <4 x i32> %arg1, %arg2
11         ret <4 x i32> %A
12 }
13
14 define <4 x i32> @or_v4i32_2(<4 x i32> %arg1, <4 x i32> %arg2) {
15         %A = or <4 x i32> %arg2, %arg1
16         ret <4 x i32> %A
17 }
18
19 define <8 x i16> @or_v8i16_1(<8 x i16> %arg1, <8 x i16> %arg2) {
20         %A = or <8 x i16> %arg1, %arg2
21         ret <8 x i16> %A
22 }
23
24 define <8 x i16> @or_v8i16_2(<8 x i16> %arg1, <8 x i16> %arg2) {
25         %A = or <8 x i16> %arg2, %arg1
26         ret <8 x i16> %A
27 }
28
29 define <16 x i8> @or_v16i8_1(<16 x i8> %arg1, <16 x i8> %arg2) {
30         %A = or <16 x i8> %arg2, %arg1
31         ret <16 x i8> %A
32 }
33
34 define <16 x i8> @or_v16i8_2(<16 x i8> %arg1, <16 x i8> %arg2) {
35         %A = or <16 x i8> %arg1, %arg2
36         ret <16 x i8> %A
37 }
38
39 define i32 @or_i32_1(i32 %arg1, i32 %arg2) {
40         %A = or i32 %arg2, %arg1
41         ret i32 %A
42 }
43
44 define i32 @or_i32_2(i32 %arg1, i32 %arg2) {
45         %A = or i32 %arg1, %arg2
46         ret i32 %A
47 }
48
49 define i16 @or_i16_1(i16 %arg1, i16 %arg2) {
50         %A = or i16 %arg2, %arg1
51         ret i16 %A
52 }
53
54 define i16 @or_i16_2(i16 %arg1, i16 %arg2) {
55         %A = or i16 %arg1, %arg2
56         ret i16 %A
57 }
58
59 define i8 @or_i8_1(i8 %arg1, i8 %arg2) {
60         %A = or i8 %arg2, %arg1
61         ret i8 %A
62 }
63
64 define i8 @or_i8_2(i8 %arg1, i8 %arg2) {
65         %A = or i8 %arg1, %arg2
66         ret i8 %A
67 }
68
69 ; ORC instruction generation:
70 define <4 x i32> @orc_v4i32_1(<4 x i32> %arg1, <4 x i32> %arg2) {
71         %A = xor <4 x i32> %arg2, < i32 -1, i32 -1, i32 -1, i32 -1 >
72         %B = or <4 x i32> %arg1, %A
73         ret <4 x i32> %B
74 }
75
76 define <4 x i32> @orc_v4i32_2(<4 x i32> %arg1, <4 x i32> %arg2) {
77         %A = xor <4 x i32> %arg1, < i32 -1, i32 -1, i32 -1, i32 -1 >
78         %B = or <4 x i32> %arg2, %A
79         ret <4 x i32> %B
80 }
81
82 define <4 x i32> @orc_v4i32_3(<4 x i32> %arg1, <4 x i32> %arg2) {
83         %A = xor <4 x i32> %arg1, < i32 -1, i32 -1, i32 -1, i32 -1 >
84         %B = or <4 x i32> %A, %arg2
85         ret <4 x i32> %B
86 }
87
88 define <8 x i16> @orc_v8i16_1(<8 x i16> %arg1, <8 x i16> %arg2) {
89         %A = xor <8 x i16> %arg2, < i16 -1, i16 -1, i16 -1, i16 -1,
90                                     i16 -1, i16 -1, i16 -1, i16 -1 >
91         %B = or <8 x i16> %arg1, %A
92         ret <8 x i16> %B
93 }
94
95 define <8 x i16> @orc_v8i16_2(<8 x i16> %arg1, <8 x i16> %arg2) {
96         %A = xor <8 x i16> %arg1, < i16 -1, i16 -1, i16 -1, i16 -1,
97                                     i16 -1, i16 -1, i16 -1, i16 -1 >
98         %B = or <8 x i16> %arg2, %A
99         ret <8 x i16> %B
100 }
101
102 define <16 x i8> @orc_v16i8_1(<16 x i8> %arg1, <16 x i8> %arg2) {
103         %A = xor <16 x i8> %arg1, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
104                                     i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
105                                     i8 -1, i8 -1, i8 -1, i8 -1 >
106         %B = or <16 x i8> %arg2, %A
107         ret <16 x i8> %B
108 }
109
110 define <16 x i8> @orc_v16i8_2(<16 x i8> %arg1, <16 x i8> %arg2) {
111         %A = xor <16 x i8> %arg2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
112                                     i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
113                                     i8 -1, i8 -1, i8 -1, i8 -1 >
114         %B = or <16 x i8> %arg1, %A
115         ret <16 x i8> %B
116 }
117
118 define <16 x i8> @orc_v16i8_3(<16 x i8> %arg1, <16 x i8> %arg2) {
119         %A = xor <16 x i8> %arg2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
120                                     i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
121                                     i8 -1, i8 -1, i8 -1, i8 -1 >
122         %B = or <16 x i8> %A, %arg1
123         ret <16 x i8> %B
124 }
125
126 define i32 @orc_i32_1(i32 %arg1, i32 %arg2) {
127         %A = xor i32 %arg2, -1
128         %B = or i32 %A, %arg1
129         ret i32 %B
130 }
131
132 define i32 @orc_i32_2(i32 %arg1, i32 %arg2) {
133         %A = xor i32 %arg1, -1
134         %B = or i32 %A, %arg2
135         ret i32 %B
136 }
137
138 define i32 @orc_i32_3(i32 %arg1, i32 %arg2) {
139         %A = xor i32 %arg2, -1
140         %B = or i32 %arg1, %A
141         ret i32 %B
142 }
143
144 define i16 @orc_i16_1(i16 %arg1, i16 %arg2) {
145         %A = xor i16 %arg2, -1
146         %B = or i16 %A, %arg1
147         ret i16 %B
148 }
149
150 define i16 @orc_i16_2(i16 %arg1, i16 %arg2) {
151         %A = xor i16 %arg1, -1
152         %B = or i16 %A, %arg2
153         ret i16 %B
154 }
155
156 define i16 @orc_i16_3(i16 %arg1, i16 %arg2) {
157         %A = xor i16 %arg2, -1
158         %B = or i16 %arg1, %A
159         ret i16 %B
160 }
161
162 define i8 @orc_i8_1(i8 %arg1, i8 %arg2) {
163         %A = xor i8 %arg2, -1
164         %B = or i8 %A, %arg1
165         ret i8 %B
166 }
167
168 define i8 @orc_i8_2(i8 %arg1, i8 %arg2) {
169         %A = xor i8 %arg1, -1
170         %B = or i8 %A, %arg2
171         ret i8 %B
172 }
173
174 define i8 @orc_i8_3(i8 %arg1, i8 %arg2) {
175         %A = xor i8 %arg2, -1
176         %B = or i8 %arg1, %A
177         ret i8 %B
178 }
179
180 ; ORI instruction generation (i32 data type):
181 define <4 x i32> @ori_v4i32_1(<4 x i32> %in) {
182         %tmp2 = or <4 x i32> %in, < i32 511, i32 511, i32 511, i32 511 >
183         ret <4 x i32> %tmp2
184 }
185
186 define <4 x i32> @ori_v4i32_2(<4 x i32> %in) {
187         %tmp2 = or <4 x i32> %in, < i32 510, i32 510, i32 510, i32 510 >
188         ret <4 x i32> %tmp2
189 }
190
191 define <4 x i32> @ori_v4i32_3(<4 x i32> %in) {
192         %tmp2 = or <4 x i32> %in, < i32 -1, i32 -1, i32 -1, i32 -1 >
193         ret <4 x i32> %tmp2
194 }
195
196 define <4 x i32> @ori_v4i32_4(<4 x i32> %in) {
197         %tmp2 = or <4 x i32> %in, < i32 -512, i32 -512, i32 -512, i32 -512 >
198         ret <4 x i32> %tmp2
199 }
200
201 define i32 @ori_u32(i32 zeroext  %in) zeroext  {
202         %tmp37 = or i32 %in, 37         ; <i32> [#uses=1]
203         ret i32 %tmp37
204 }
205
206 define i32 @ori_i32(i32 signext  %in) signext  {
207         %tmp38 = or i32 %in, 37         ; <i32> [#uses=1]
208         ret i32 %tmp38
209 }
210
211 ; ORHI instruction generation (i16 data type):
212 define <8 x i16> @orhi_v8i16_1(<8 x i16> %in) {
213         %tmp2 = or <8 x i16> %in, < i16 511, i16 511, i16 511, i16 511,
214                                     i16 511, i16 511, i16 511, i16 511 >
215         ret <8 x i16> %tmp2
216 }
217
218 define <8 x i16> @orhi_v8i16_2(<8 x i16> %in) {
219         %tmp2 = or <8 x i16> %in, < i16 510, i16 510, i16 510, i16 510,
220                                     i16 510, i16 510, i16 510, i16 510 >
221         ret <8 x i16> %tmp2
222 }
223
224 define <8 x i16> @orhi_v8i16_3(<8 x i16> %in) {
225         %tmp2 = or <8 x i16> %in, < i16 -1, i16 -1, i16 -1, i16 -1, i16 -1,
226                                     i16 -1, i16 -1, i16 -1 >
227         ret <8 x i16> %tmp2
228 }
229
230 define <8 x i16> @orhi_v8i16_4(<8 x i16> %in) {
231         %tmp2 = or <8 x i16> %in, < i16 -512, i16 -512, i16 -512, i16 -512,
232                                     i16 -512, i16 -512, i16 -512, i16 -512 >
233         ret <8 x i16> %tmp2
234 }
235
236 define i16 @orhi_u16(i16 zeroext  %in) zeroext  {
237         %tmp37 = or i16 %in, 37         ; <i16> [#uses=1]
238         ret i16 %tmp37
239 }
240
241 define i16 @orhi_i16(i16 signext  %in) signext  {
242         %tmp38 = or i16 %in, 37         ; <i16> [#uses=1]
243         ret i16 %tmp38
244 }
245
246 ; ORBI instruction generation (i8 data type):
247 define <16 x i8> @orbi_v16i8(<16 x i8> %in) {
248         %tmp2 = or <16 x i8> %in, < i8 42, i8 42, i8 42, i8 42, i8 42, i8 42,
249                                     i8 42, i8 42, i8 42, i8 42, i8 42, i8 42,
250                                     i8 42, i8 42, i8 42, i8 42 >
251         ret <16 x i8> %tmp2
252 }
253
254 define i8 @orbi_u8(i8 zeroext  %in) zeroext  {
255         %tmp37 = or i8 %in, 37         ; <i8> [#uses=1]
256         ret i8 %tmp37
257 }
258
259 define i8 @orbi_i8(i8 signext  %in) signext  {
260         %tmp38 = or i8 %in, 37         ; <i8> [#uses=1]
261         ret i8 %tmp38
262 }