[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / X86 / avx512bw-vec-cmp.ll
blobddf1ba8b8eeff1b52be673e1dae57e8b3c99ac93
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s
4 define <64 x i8> @test1(<64 x i8> %x, <64 x i8> %y) nounwind {
5 ; CHECK-LABEL: test1:
6 ; CHECK:       ## %bb.0:
7 ; CHECK-NEXT:    vpcmpeqb %zmm1, %zmm0, %k1
8 ; CHECK-NEXT:    vpblendmb %zmm0, %zmm1, %zmm0 {%k1}
9 ; CHECK-NEXT:    retq
10   %mask = icmp eq <64 x i8> %x, %y
11   %max = select <64 x i1> %mask, <64 x i8> %x, <64 x i8> %y
12   ret <64 x i8> %max
15 define <64 x i8> @test2(<64 x i8> %x, <64 x i8> %y, <64 x i8> %x1) nounwind {
16 ; CHECK-LABEL: test2:
17 ; CHECK:       ## %bb.0:
18 ; CHECK-NEXT:    vpcmpgtb %zmm1, %zmm0, %k1
19 ; CHECK-NEXT:    vpblendmb %zmm2, %zmm1, %zmm0 {%k1}
20 ; CHECK-NEXT:    retq
21   %mask = icmp sgt <64 x i8> %x, %y
22   %max = select <64 x i1> %mask, <64 x i8> %x1, <64 x i8> %y
23   ret <64 x i8> %max
26 define <32 x i16> @test3(<32 x i16> %x, <32 x i16> %y, <32 x i16> %x1) nounwind {
27 ; CHECK-LABEL: test3:
28 ; CHECK:       ## %bb.0:
29 ; CHECK-NEXT:    vpcmpnltw %zmm1, %zmm0, %k1
30 ; CHECK-NEXT:    vpblendmw %zmm2, %zmm1, %zmm0 {%k1}
31 ; CHECK-NEXT:    retq
32   %mask = icmp sge <32 x i16> %x, %y
33   %max = select <32 x i1> %mask, <32 x i16> %x1, <32 x i16> %y
34   ret <32 x i16> %max
37 define <64 x i8> @test4(<64 x i8> %x, <64 x i8> %y, <64 x i8> %x1) nounwind {
38 ; CHECK-LABEL: test4:
39 ; CHECK:       ## %bb.0:
40 ; CHECK-NEXT:    vpcmpnleub %zmm1, %zmm0, %k1
41 ; CHECK-NEXT:    vpblendmb %zmm2, %zmm1, %zmm0 {%k1}
42 ; CHECK-NEXT:    retq
43   %mask = icmp ugt <64 x i8> %x, %y
44   %max = select <64 x i1> %mask, <64 x i8> %x1, <64 x i8> %y
45   ret <64 x i8> %max
48 define <32 x i16> @test5(<32 x i16> %x, <32 x i16> %x1, <32 x i16>* %yp) nounwind {
49 ; CHECK-LABEL: test5:
50 ; CHECK:       ## %bb.0:
51 ; CHECK-NEXT:    vpcmpeqw (%rdi), %zmm0, %k1
52 ; CHECK-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
53 ; CHECK-NEXT:    retq
54   %y = load <32 x i16>, <32 x i16>* %yp, align 4
55   %mask = icmp eq <32 x i16> %x, %y
56   %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %x1
57   ret <32 x i16> %max
60 define <32 x i16> @test6(<32 x i16> %x, <32 x i16> %x1, <32 x i16>* %y.ptr) nounwind {
61 ; CHECK-LABEL: test6:
62 ; CHECK:       ## %bb.0:
63 ; CHECK-NEXT:    vpcmpgtw (%rdi), %zmm0, %k1
64 ; CHECK-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
65 ; CHECK-NEXT:    retq
66   %y = load <32 x i16>, <32 x i16>* %y.ptr, align 4
67   %mask = icmp sgt <32 x i16> %x, %y
68   %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %x1
69   ret <32 x i16> %max
72 define <32 x i16> @test7(<32 x i16> %x, <32 x i16> %x1, <32 x i16>* %y.ptr) nounwind {
73 ; CHECK-LABEL: test7:
74 ; CHECK:       ## %bb.0:
75 ; CHECK-NEXT:    vpcmplew (%rdi), %zmm0, %k1
76 ; CHECK-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
77 ; CHECK-NEXT:    retq
78   %y = load <32 x i16>, <32 x i16>* %y.ptr, align 4
79   %mask = icmp sle <32 x i16> %x, %y
80   %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %x1
81   ret <32 x i16> %max
84 define <32 x i16> @test8(<32 x i16> %x, <32 x i16> %x1, <32 x i16>* %y.ptr) nounwind {
85 ; CHECK-LABEL: test8:
86 ; CHECK:       ## %bb.0:
87 ; CHECK-NEXT:    vpcmpleuw (%rdi), %zmm0, %k1
88 ; CHECK-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
89 ; CHECK-NEXT:    retq
90   %y = load <32 x i16>, <32 x i16>* %y.ptr, align 4
91   %mask = icmp ule <32 x i16> %x, %y
92   %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %x1
93   ret <32 x i16> %max
96 define <32 x i16> @test9(<32 x i16> %x, <32 x i16> %y, <32 x i16> %x1, <32 x i16> %y1) nounwind {
97 ; CHECK-LABEL: test9:
98 ; CHECK:       ## %bb.0:
99 ; CHECK-NEXT:    vpcmpeqw %zmm1, %zmm0, %k1
100 ; CHECK-NEXT:    vpcmpeqw %zmm3, %zmm2, %k1 {%k1}
101 ; CHECK-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
102 ; CHECK-NEXT:    retq
103   %mask1 = icmp eq <32 x i16> %x1, %y1
104   %mask0 = icmp eq <32 x i16> %x, %y
105   %mask = select <32 x i1> %mask0, <32 x i1> %mask1, <32 x i1> zeroinitializer
106   %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %y
107   ret <32 x i16> %max
110 define <64 x i8> @test10(<64 x i8> %x, <64 x i8> %y, <64 x i8> %x1, <64 x i8> %y1) nounwind {
111 ; CHECK-LABEL: test10:
112 ; CHECK:       ## %bb.0:
113 ; CHECK-NEXT:    vpcmpleb %zmm1, %zmm0, %k1
114 ; CHECK-NEXT:    vpcmpnltb %zmm3, %zmm2, %k1 {%k1}
115 ; CHECK-NEXT:    vpblendmb %zmm0, %zmm2, %zmm0 {%k1}
116 ; CHECK-NEXT:    retq
117   %mask1 = icmp sge <64 x i8> %x1, %y1
118   %mask0 = icmp sle <64 x i8> %x, %y
119   %mask = select <64 x i1> %mask0, <64 x i1> %mask1, <64 x i1> zeroinitializer
120   %max = select <64 x i1> %mask, <64 x i8> %x, <64 x i8> %x1
121   ret <64 x i8> %max
124 define <64 x i8> @test11(<64 x i8> %x, <64 x i8>* %y.ptr, <64 x i8> %x1, <64 x i8> %y1) nounwind {
125 ; CHECK-LABEL: test11:
126 ; CHECK:       ## %bb.0:
127 ; CHECK-NEXT:    vpcmpgtb %zmm2, %zmm1, %k1
128 ; CHECK-NEXT:    vpcmpgtb (%rdi), %zmm0, %k1 {%k1}
129 ; CHECK-NEXT:    vpblendmb %zmm0, %zmm1, %zmm0 {%k1}
130 ; CHECK-NEXT:    retq
131   %mask1 = icmp sgt <64 x i8> %x1, %y1
132   %y = load <64 x i8>, <64 x i8>* %y.ptr, align 4
133   %mask0 = icmp sgt <64 x i8> %x, %y
134   %mask = select <64 x i1> %mask0, <64 x i1> %mask1, <64 x i1> zeroinitializer
135   %max = select <64 x i1> %mask, <64 x i8> %x, <64 x i8> %x1
136   ret <64 x i8> %max
139 define <32 x i16> @test12(<32 x i16> %x, <32 x i16>* %y.ptr, <32 x i16> %x1, <32 x i16> %y1) nounwind {
140 ; CHECK-LABEL: test12:
141 ; CHECK:       ## %bb.0:
142 ; CHECK-NEXT:    vpcmpnltw %zmm2, %zmm1, %k1
143 ; CHECK-NEXT:    vpcmpleuw (%rdi), %zmm0, %k1 {%k1}
144 ; CHECK-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}
145 ; CHECK-NEXT:    retq
146   %mask1 = icmp sge <32 x i16> %x1, %y1
147   %y = load <32 x i16>, <32 x i16>* %y.ptr, align 4
148   %mask0 = icmp ule <32 x i16> %x, %y
149   %mask = select <32 x i1> %mask0, <32 x i1> %mask1, <32 x i1> zeroinitializer
150   %max = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> %x1
151   ret <32 x i16> %max