Skip to content

Commit bcd504d

Browse files
committed
[x86] add tests for select-of-bools; NFC
1 parent a0f4526 commit bcd504d

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed

llvm/test/CodeGen/X86/select-with-and-or.ll

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,3 +155,115 @@ define <2 x double> @test7f(<2 x double> %a, <2 x double> %b, <2 x double>* %p)
155155
ret <2 x double> %r
156156
}
157157

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

Comments
 (0)