@@ -155,3 +155,115 @@ define <2 x double> @test7f(<2 x double> %a, <2 x double> %b, <2 x double>* %p)
155
155
ret <2 x double > %r
156
156
}
157
157
158
+ define i1 @and (i32 %x , i32 %y , i32 %z , i32 %w ) {
159
+ ; CHECK-LABEL: and:
160
+ ; CHECK: # %bb.0:
161
+ ; CHECK-NEXT: cmpl %esi, %edi
162
+ ; CHECK-NEXT: sete %sil
163
+ ; CHECK-NEXT: cmpl %ecx, %edx
164
+ ; CHECK-NEXT: setg %al
165
+ ; CHECK-NEXT: andb %sil, %al
166
+ ; CHECK-NEXT: retq
167
+ %a = icmp eq i32 %x , %y
168
+ %b = icmp sgt i32 %z , %w
169
+ %s = select i1 %a , i1 %b , i1 false
170
+ ret i1 %s
171
+ }
172
+
173
+ define i1 @or (i32 %x , i32 %y , i32 %z , i32 %w ) {
174
+ ; CHECK-LABEL: or:
175
+ ; CHECK: # %bb.0:
176
+ ; CHECK-NEXT: cmpl %esi, %edi
177
+ ; CHECK-NEXT: sete %sil
178
+ ; CHECK-NEXT: cmpl %ecx, %edx
179
+ ; CHECK-NEXT: setg %al
180
+ ; CHECK-NEXT: orb %sil, %al
181
+ ; CHECK-NEXT: retq
182
+ %a = icmp eq i32 %x , %y
183
+ %b = icmp sgt i32 %z , %w
184
+ %s = select i1 %a , i1 true , i1 %b
185
+ ret i1 %s
186
+ }
187
+
188
+ define i1 @and_not (i32 %x , i32 %y , i32 %z , i32 %w ) {
189
+ ; CHECK-LABEL: and_not:
190
+ ; CHECK: # %bb.0:
191
+ ; CHECK-NEXT: cmpl %esi, %edi
192
+ ; CHECK-NEXT: setne %sil
193
+ ; CHECK-NEXT: cmpl %ecx, %edx
194
+ ; CHECK-NEXT: setg %al
195
+ ; CHECK-NEXT: andb %sil, %al
196
+ ; CHECK-NEXT: retq
197
+ %a = icmp eq i32 %x , %y
198
+ %b = icmp sgt i32 %z , %w
199
+ %s = select i1 %a , i1 false , i1 %b
200
+ ret i1 %s
201
+ }
202
+
203
+ define i1 @or_not (i32 %x , i32 %y , i32 %z , i32 %w ) {
204
+ ; CHECK-LABEL: or_not:
205
+ ; CHECK: # %bb.0:
206
+ ; CHECK-NEXT: cmpl %esi, %edi
207
+ ; CHECK-NEXT: setne %sil
208
+ ; CHECK-NEXT: cmpl %ecx, %edx
209
+ ; CHECK-NEXT: setg %al
210
+ ; CHECK-NEXT: orb %sil, %al
211
+ ; CHECK-NEXT: retq
212
+ %a = icmp eq i32 %x , %y
213
+ %b = icmp sgt i32 %z , %w
214
+ %s = select i1 %a , i1 %b , i1 true
215
+ ret i1 %s
216
+ }
217
+
218
+ define <4 x i1 > @and_vec (<4 x i32 > %x , <4 x i32 > %y , <4 x i32 > %z , <4 x i32 > %w ) {
219
+ ; CHECK-LABEL: and_vec:
220
+ ; CHECK: # %bb.0:
221
+ ; CHECK-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
222
+ ; CHECK-NEXT: vpcmpgtd %xmm3, %xmm2, %xmm1
223
+ ; CHECK-NEXT: vpand %xmm1, %xmm0, %xmm0
224
+ ; CHECK-NEXT: retq
225
+ %a = icmp eq <4 x i32 > %x , %y
226
+ %b = icmp sgt <4 x i32 > %z , %w
227
+ %s = select <4 x i1 > %a , <4 x i1 > %b , <4 x i1 > zeroinitializer
228
+ ret <4 x i1 > %s
229
+ }
230
+
231
+ define <4 x i1 > @or_vec (<4 x i32 > %x , <4 x i32 > %y , <4 x i32 > %z , <4 x i32 > %w ) {
232
+ ; CHECK-LABEL: or_vec:
233
+ ; CHECK: # %bb.0:
234
+ ; CHECK-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
235
+ ; CHECK-NEXT: vpcmpgtd %xmm3, %xmm2, %xmm1
236
+ ; CHECK-NEXT: vblendvps %xmm0, {{.*}}(%rip), %xmm1, %xmm0
237
+ ; CHECK-NEXT: retq
238
+ %a = icmp eq <4 x i32 > %x , %y
239
+ %b = icmp sgt <4 x i32 > %z , %w
240
+ %s = select <4 x i1 > %a , <4 x i1 > <i1 1 , i1 1 , i1 1 , i1 1 >, <4 x i1 > %b
241
+ ret <4 x i1 > %s
242
+ }
243
+
244
+ define <4 x i1 > @and_not_vec (<4 x i32 > %x , <4 x i32 > %y , <4 x i32 > %z , <4 x i32 > %w ) {
245
+ ; CHECK-LABEL: and_not_vec:
246
+ ; CHECK: # %bb.0:
247
+ ; CHECK-NEXT: vpcmpgtd %xmm3, %xmm2, %xmm2
248
+ ; CHECK-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
249
+ ; CHECK-NEXT: vpandn %xmm2, %xmm0, %xmm0
250
+ ; CHECK-NEXT: retq
251
+ %a = icmp eq <4 x i32 > %x , %y
252
+ %b = icmp sgt <4 x i32 > %z , %w
253
+ %s = select <4 x i1 > %a , <4 x i1 > zeroinitializer , <4 x i1 > %b
254
+ ret <4 x i1 > %s
255
+ }
256
+
257
+ define <4 x i1 > @or_not_vec (<4 x i32 > %x , <4 x i32 > %y , <4 x i32 > %z , <4 x i32 > %w ) {
258
+ ; CHECK-LABEL: or_not_vec:
259
+ ; CHECK: # %bb.0:
260
+ ; CHECK-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
261
+ ; CHECK-NEXT: vpcmpgtd %xmm3, %xmm2, %xmm1
262
+ ; CHECK-NEXT: vmovaps {{.*#+}} xmm2 = [1,1,1,1]
263
+ ; CHECK-NEXT: vblendvps %xmm0, %xmm1, %xmm2, %xmm0
264
+ ; CHECK-NEXT: retq
265
+ %a = icmp eq <4 x i32 > %x , %y
266
+ %b = icmp sgt <4 x i32 > %z , %w
267
+ %s = select <4 x i1 > %a , <4 x i1 > %b , <4 x i1 > <i1 1 , i1 1 , i1 1 , i1 1 >
268
+ ret <4 x i1 > %s
269
+ }
0 commit comments