• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3
4define <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
13}
14
15define <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
24}
25
26define <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:    vpcmplew %zmm0, %zmm1, %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
35}
36
37define <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
46}
47
48define <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
58}
59
60define <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
70}
71
72define <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
82}
83
84define <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
94}
95
96define <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
108}
109
110define <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:    vpcmpleb %zmm2, %zmm3, %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
122}
123
124define <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
137}
138
139define <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:    vpcmplew %zmm1, %zmm2, %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
152}
153