aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2021-03-01 14:05:16 -0500
committerSanjay Patel <spatel@rotateright.com>2021-03-01 15:01:45 -0500
commitbcd504d8a3ba9ca4a490420a96aa94326070190d (patch)
treea2b9fd34447f088111c168970a538a44bbd05d8a
parenta0f4526836a76a5e2f56d25c7e35cfd89b2d0908 (diff)
downloadllvm-bcd504d8a3ba9ca4a490420a96aa94326070190d.zip
llvm-bcd504d8a3ba9ca4a490420a96aa94326070190d.tar.gz
llvm-bcd504d8a3ba9ca4a490420a96aa94326070190d.tar.bz2
[x86] add tests for select-of-bools; NFC
-rw-r--r--llvm/test/CodeGen/X86/select-with-and-or.ll112
1 files changed, 112 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/select-with-and-or.ll b/llvm/test/CodeGen/X86/select-with-and-or.ll
index f710a5c..4c05445 100644
--- a/llvm/test/CodeGen/X86/select-with-and-or.ll
+++ b/llvm/test/CodeGen/X86/select-with-and-or.ll
@@ -155,3 +155,115 @@ define <2 x double> @test7f(<2 x double> %a, <2 x double> %b, <2 x double>* %p)
ret <2 x double> %r
}
+define i1 @and(i32 %x, i32 %y, i32 %z, i32 %w) {
+; CHECK-LABEL: and:
+; CHECK: # %bb.0:
+; CHECK-NEXT: cmpl %esi, %edi
+; CHECK-NEXT: sete %sil
+; CHECK-NEXT: cmpl %ecx, %edx
+; CHECK-NEXT: setg %al
+; CHECK-NEXT: andb %sil, %al
+; CHECK-NEXT: retq
+ %a = icmp eq i32 %x, %y
+ %b = icmp sgt i32 %z, %w
+ %s = select i1 %a, i1 %b, i1 false
+ ret i1 %s
+}
+
+define i1 @or(i32 %x, i32 %y, i32 %z, i32 %w) {
+; CHECK-LABEL: or:
+; CHECK: # %bb.0:
+; CHECK-NEXT: cmpl %esi, %edi
+; CHECK-NEXT: sete %sil
+; CHECK-NEXT: cmpl %ecx, %edx
+; CHECK-NEXT: setg %al
+; CHECK-NEXT: orb %sil, %al
+; CHECK-NEXT: retq
+ %a = icmp eq i32 %x, %y
+ %b = icmp sgt i32 %z, %w
+ %s = select i1 %a, i1 true, i1 %b
+ ret i1 %s
+}
+
+define i1 @and_not(i32 %x, i32 %y, i32 %z, i32 %w) {
+; CHECK-LABEL: and_not:
+; CHECK: # %bb.0:
+; CHECK-NEXT: cmpl %esi, %edi
+; CHECK-NEXT: setne %sil
+; CHECK-NEXT: cmpl %ecx, %edx
+; CHECK-NEXT: setg %al
+; CHECK-NEXT: andb %sil, %al
+; CHECK-NEXT: retq
+ %a = icmp eq i32 %x, %y
+ %b = icmp sgt i32 %z, %w
+ %s = select i1 %a, i1 false, i1 %b
+ ret i1 %s
+}
+
+define i1 @or_not(i32 %x, i32 %y, i32 %z, i32 %w) {
+; CHECK-LABEL: or_not:
+; CHECK: # %bb.0:
+; CHECK-NEXT: cmpl %esi, %edi
+; CHECK-NEXT: setne %sil
+; CHECK-NEXT: cmpl %ecx, %edx
+; CHECK-NEXT: setg %al
+; CHECK-NEXT: orb %sil, %al
+; CHECK-NEXT: retq
+ %a = icmp eq i32 %x, %y
+ %b = icmp sgt i32 %z, %w
+ %s = select i1 %a, i1 %b, i1 true
+ ret i1 %s
+}
+
+define <4 x i1> @and_vec(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z, <4 x i32> %w) {
+; CHECK-LABEL: and_vec:
+; CHECK: # %bb.0:
+; CHECK-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
+; CHECK-NEXT: vpcmpgtd %xmm3, %xmm2, %xmm1
+; CHECK-NEXT: vpand %xmm1, %xmm0, %xmm0
+; CHECK-NEXT: retq
+ %a = icmp eq <4 x i32> %x, %y
+ %b = icmp sgt <4 x i32> %z, %w
+ %s = select <4 x i1> %a, <4 x i1> %b, <4 x i1> zeroinitializer
+ ret <4 x i1> %s
+}
+
+define <4 x i1> @or_vec(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z, <4 x i32> %w) {
+; CHECK-LABEL: or_vec:
+; CHECK: # %bb.0:
+; CHECK-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
+; CHECK-NEXT: vpcmpgtd %xmm3, %xmm2, %xmm1
+; CHECK-NEXT: vblendvps %xmm0, {{.*}}(%rip), %xmm1, %xmm0
+; CHECK-NEXT: retq
+ %a = icmp eq <4 x i32> %x, %y
+ %b = icmp sgt <4 x i32> %z, %w
+ %s = select <4 x i1> %a, <4 x i1> <i1 1, i1 1, i1 1, i1 1>, <4 x i1> %b
+ ret <4 x i1> %s
+}
+
+define <4 x i1> @and_not_vec(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z, <4 x i32> %w) {
+; CHECK-LABEL: and_not_vec:
+; CHECK: # %bb.0:
+; CHECK-NEXT: vpcmpgtd %xmm3, %xmm2, %xmm2
+; CHECK-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
+; CHECK-NEXT: vpandn %xmm2, %xmm0, %xmm0
+; CHECK-NEXT: retq
+ %a = icmp eq <4 x i32> %x, %y
+ %b = icmp sgt <4 x i32> %z, %w
+ %s = select <4 x i1> %a, <4 x i1> zeroinitializer, <4 x i1> %b
+ ret <4 x i1> %s
+}
+
+define <4 x i1> @or_not_vec(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z, <4 x i32> %w) {
+; CHECK-LABEL: or_not_vec:
+; CHECK: # %bb.0:
+; CHECK-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
+; CHECK-NEXT: vpcmpgtd %xmm3, %xmm2, %xmm1
+; CHECK-NEXT: vmovaps {{.*#+}} xmm2 = [1,1,1,1]
+; CHECK-NEXT: vblendvps %xmm0, %xmm1, %xmm2, %xmm0
+; CHECK-NEXT: retq
+ %a = icmp eq <4 x i32> %x, %y
+ %b = icmp sgt <4 x i32> %z, %w
+ %s = select <4 x i1> %a, <4 x i1> %b, <4 x i1> <i1 1, i1 1, i1 1, i1 1>
+ ret <4 x i1> %s
+}