1*9e6afbedSKrzysztof Parzyszek; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9e6afbedSKrzysztof Parzyszek; RUN: llc -march=hexagon -mattr=+hvxv69,+hvx-length128b,+hvx-qfloat < %s | FileCheck %s
3*9e6afbedSKrzysztof Parzyszek; RUN: llc -march=hexagon -mattr=+hvxv69,+hvx-length128b,+hvx-ieee-fp < %s | FileCheck %s
4*9e6afbedSKrzysztof Parzyszek
5*9e6afbedSKrzysztof Parzyszek; --- Half
6*9e6afbedSKrzysztof Parzyszek
7*9e6afbedSKrzysztof Parzyszekdefine <64 x half> @test_00(<64 x half> %v0, <64 x half> %v1, <64 x half> %v2) #0 {
8*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_00:
9*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
10*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
11*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vcmp.eq(v0.h,v1.h)
12*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
13*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
14*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v1,v2)
15*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
16*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
17*9e6afbedSKrzysztof Parzyszek  %t0 = fcmp oeq <64 x half> %v0, %v1
18*9e6afbedSKrzysztof Parzyszek  %t1 = select <64 x i1> %t0, <64 x half> %v1, <64 x half> %v2
19*9e6afbedSKrzysztof Parzyszek  ret <64 x half> %t1
20*9e6afbedSKrzysztof Parzyszek}
21*9e6afbedSKrzysztof Parzyszek
22*9e6afbedSKrzysztof Parzyszekdefine <64 x half> @test_01(<64 x half> %v0, <64 x half> %v1, <64 x half> %v2) #0 {
23*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_01:
24*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
25*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
26*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vcmp.eq(v0.h,v1.h)
27*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
28*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
29*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v2,v1)
30*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
31*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
32*9e6afbedSKrzysztof Parzyszek  %t0 = fcmp one <64 x half> %v0, %v1
33*9e6afbedSKrzysztof Parzyszek  %t1 = select <64 x i1> %t0, <64 x half> %v1, <64 x half> %v2
34*9e6afbedSKrzysztof Parzyszek  ret <64 x half> %t1
35*9e6afbedSKrzysztof Parzyszek}
36*9e6afbedSKrzysztof Parzyszek
37*9e6afbedSKrzysztof Parzyszekdefine <64 x half> @test_02(<64 x half> %v0, <64 x half> %v1, <64 x half> %v2) #0 {
38*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_02:
39*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
40*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
41*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vcmp.gt(v1.hf,v0.hf)
42*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
43*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
44*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v1,v2)
45*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
46*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
47*9e6afbedSKrzysztof Parzyszek  %t0 = fcmp olt <64 x half> %v0, %v1
48*9e6afbedSKrzysztof Parzyszek  %t1 = select <64 x i1> %t0, <64 x half> %v1, <64 x half> %v2
49*9e6afbedSKrzysztof Parzyszek  ret <64 x half> %t1
50*9e6afbedSKrzysztof Parzyszek}
51*9e6afbedSKrzysztof Parzyszek
52*9e6afbedSKrzysztof Parzyszekdefine <64 x half> @test_03(<64 x half> %v0, <64 x half> %v1, <64 x half> %v2) #0 {
53*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_03:
54*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
55*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
56*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vcmp.gt(v0.hf,v1.hf)
57*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
58*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
59*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v2,v1)
60*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
61*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
62*9e6afbedSKrzysztof Parzyszek  %t0 = fcmp ole <64 x half> %v0, %v1
63*9e6afbedSKrzysztof Parzyszek  %t1 = select <64 x i1> %t0, <64 x half> %v1, <64 x half> %v2
64*9e6afbedSKrzysztof Parzyszek  ret <64 x half> %t1
65*9e6afbedSKrzysztof Parzyszek}
66*9e6afbedSKrzysztof Parzyszek
67*9e6afbedSKrzysztof Parzyszekdefine <64 x half> @test_04(<64 x half> %v0, <64 x half> %v1, <64 x half> %v2) #0 {
68*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_04:
69*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
70*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
71*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vcmp.gt(v0.hf,v1.hf)
72*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
73*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
74*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v1,v2)
75*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
76*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
77*9e6afbedSKrzysztof Parzyszek  %t0 = fcmp ogt <64 x half> %v0, %v1
78*9e6afbedSKrzysztof Parzyszek  %t1 = select <64 x i1> %t0, <64 x half> %v1, <64 x half> %v2
79*9e6afbedSKrzysztof Parzyszek  ret <64 x half> %t1
80*9e6afbedSKrzysztof Parzyszek}
81*9e6afbedSKrzysztof Parzyszek
82*9e6afbedSKrzysztof Parzyszekdefine <64 x half> @test_05(<64 x half> %v0, <64 x half> %v1, <64 x half> %v2) #0 {
83*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_05:
84*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
85*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
86*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vcmp.gt(v1.hf,v0.hf)
87*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
88*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
89*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v2,v1)
90*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
91*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
92*9e6afbedSKrzysztof Parzyszek  %t0 = fcmp oge <64 x half> %v0, %v1
93*9e6afbedSKrzysztof Parzyszek  %t1 = select <64 x i1> %t0, <64 x half> %v1, <64 x half> %v2
94*9e6afbedSKrzysztof Parzyszek  ret <64 x half> %t1
95*9e6afbedSKrzysztof Parzyszek}
96*9e6afbedSKrzysztof Parzyszek
97*9e6afbedSKrzysztof Parzyszekdefine <64 x half> @test_0a(<64 x half> %v0, <64 x half> %v1, <64 x i16> %v2) #0 {
98*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_0a:
99*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
100*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
101*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     r0 = ##16843009
102*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
103*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
104*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vand(v2,r0)
105*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
106*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
107*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 &= vcmp.eq(v0.h,v1.h)
108*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
109*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
110*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v0,v1)
111*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
112*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
113*9e6afbedSKrzysztof Parzyszek  %q0 = fcmp oeq <64 x half> %v0, %v1
114*9e6afbedSKrzysztof Parzyszek  %q1 = trunc <64 x i16> %v2 to <64 x i1>
115*9e6afbedSKrzysztof Parzyszek  %q2 = and <64 x i1> %q0, %q1
116*9e6afbedSKrzysztof Parzyszek  %t1 = select <64 x i1> %q2, <64 x half> %v0, <64 x half> %v1
117*9e6afbedSKrzysztof Parzyszek  ret <64 x half> %t1
118*9e6afbedSKrzysztof Parzyszek}
119*9e6afbedSKrzysztof Parzyszek
120*9e6afbedSKrzysztof Parzyszekdefine <64 x half> @test_0b(<64 x half> %v0, <64 x half> %v1, <64 x i16> %v2) #0 {
121*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_0b:
122*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
123*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
124*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     r0 = ##16843009
125*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
126*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
127*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vand(v2,r0)
128*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
129*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
130*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 |= vcmp.eq(v0.h,v1.h)
131*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
132*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
133*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v0,v1)
134*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
135*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
136*9e6afbedSKrzysztof Parzyszek  %q0 = fcmp oeq <64 x half> %v0, %v1
137*9e6afbedSKrzysztof Parzyszek  %q1 = trunc <64 x i16> %v2 to <64 x i1>
138*9e6afbedSKrzysztof Parzyszek  %q2 = or <64 x i1> %q0, %q1
139*9e6afbedSKrzysztof Parzyszek  %t1 = select <64 x i1> %q2, <64 x half> %v0, <64 x half> %v1
140*9e6afbedSKrzysztof Parzyszek  ret <64 x half> %t1
141*9e6afbedSKrzysztof Parzyszek}
142*9e6afbedSKrzysztof Parzyszek
143*9e6afbedSKrzysztof Parzyszekdefine <64 x half> @test_0c(<64 x half> %v0, <64 x half> %v1, <64 x i16> %v2) #0 {
144*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_0c:
145*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
146*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
147*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     r0 = ##16843009
148*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
149*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
150*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vand(v2,r0)
151*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
152*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
153*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 ^= vcmp.eq(v0.h,v1.h)
154*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
155*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
156*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v0,v1)
157*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
158*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
159*9e6afbedSKrzysztof Parzyszek  %q0 = fcmp oeq <64 x half> %v0, %v1
160*9e6afbedSKrzysztof Parzyszek  %q1 = trunc <64 x i16> %v2 to <64 x i1>
161*9e6afbedSKrzysztof Parzyszek  %q2 = xor <64 x i1> %q0, %q1
162*9e6afbedSKrzysztof Parzyszek  %t1 = select <64 x i1> %q2, <64 x half> %v0, <64 x half> %v1
163*9e6afbedSKrzysztof Parzyszek  ret <64 x half> %t1
164*9e6afbedSKrzysztof Parzyszek}
165*9e6afbedSKrzysztof Parzyszek
166*9e6afbedSKrzysztof Parzyszekdefine <64 x half> @test_0d(<64 x half> %v0, <64 x half> %v1, <64 x i16> %v2) #0 {
167*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_0d:
168*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
169*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
170*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     r0 = ##16843009
171*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
172*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
173*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vand(v2,r0)
174*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
175*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
176*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 &= vcmp.gt(v0.hf,v1.hf)
177*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
178*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
179*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v0,v1)
180*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
181*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
182*9e6afbedSKrzysztof Parzyszek  %q0 = fcmp ogt <64 x half> %v0, %v1
183*9e6afbedSKrzysztof Parzyszek  %q1 = trunc <64 x i16> %v2 to <64 x i1>
184*9e6afbedSKrzysztof Parzyszek  %q2 = and <64 x i1> %q0, %q1
185*9e6afbedSKrzysztof Parzyszek  %t1 = select <64 x i1> %q2, <64 x half> %v0, <64 x half> %v1
186*9e6afbedSKrzysztof Parzyszek  ret <64 x half> %t1
187*9e6afbedSKrzysztof Parzyszek}
188*9e6afbedSKrzysztof Parzyszek
189*9e6afbedSKrzysztof Parzyszekdefine <64 x half> @test_0e(<64 x half> %v0, <64 x half> %v1, <64 x i16> %v2) #0 {
190*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_0e:
191*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
192*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
193*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     r0 = ##16843009
194*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
195*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
196*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vand(v2,r0)
197*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
198*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
199*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 |= vcmp.gt(v0.hf,v1.hf)
200*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
201*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
202*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v0,v1)
203*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
204*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
205*9e6afbedSKrzysztof Parzyszek  %q0 = fcmp ogt <64 x half> %v0, %v1
206*9e6afbedSKrzysztof Parzyszek  %q1 = trunc <64 x i16> %v2 to <64 x i1>
207*9e6afbedSKrzysztof Parzyszek  %q2 = or <64 x i1> %q0, %q1
208*9e6afbedSKrzysztof Parzyszek  %t1 = select <64 x i1> %q2, <64 x half> %v0, <64 x half> %v1
209*9e6afbedSKrzysztof Parzyszek  ret <64 x half> %t1
210*9e6afbedSKrzysztof Parzyszek}
211*9e6afbedSKrzysztof Parzyszek
212*9e6afbedSKrzysztof Parzyszekdefine <64 x half> @test_0f(<64 x half> %v0, <64 x half> %v1, <64 x i16> %v2) #0 {
213*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_0f:
214*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
215*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
216*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     r0 = ##16843009
217*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
218*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
219*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vand(v2,r0)
220*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
221*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
222*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 ^= vcmp.gt(v0.hf,v1.hf)
223*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
224*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
225*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v0,v1)
226*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
227*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
228*9e6afbedSKrzysztof Parzyszek  %q0 = fcmp ogt <64 x half> %v0, %v1
229*9e6afbedSKrzysztof Parzyszek  %q1 = trunc <64 x i16> %v2 to <64 x i1>
230*9e6afbedSKrzysztof Parzyszek  %q2 = xor <64 x i1> %q0, %q1
231*9e6afbedSKrzysztof Parzyszek  %t1 = select <64 x i1> %q2, <64 x half> %v0, <64 x half> %v1
232*9e6afbedSKrzysztof Parzyszek  ret <64 x half> %t1
233*9e6afbedSKrzysztof Parzyszek}
234*9e6afbedSKrzysztof Parzyszek
235*9e6afbedSKrzysztof Parzyszek
236*9e6afbedSKrzysztof Parzyszek; --- Single
237*9e6afbedSKrzysztof Parzyszek
238*9e6afbedSKrzysztof Parzyszekdefine <32 x float> @test_10(<32 x float> %v0, <32 x float> %v1, <32 x float> %v2) #0 {
239*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_10:
240*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
241*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
242*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vcmp.eq(v0.w,v1.w)
243*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
244*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
245*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v1,v2)
246*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
247*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
248*9e6afbedSKrzysztof Parzyszek  %t0 = fcmp oeq <32 x float> %v0, %v1
249*9e6afbedSKrzysztof Parzyszek  %t1 = select <32 x i1> %t0, <32 x float> %v1, <32 x float> %v2
250*9e6afbedSKrzysztof Parzyszek  ret <32 x float> %t1
251*9e6afbedSKrzysztof Parzyszek}
252*9e6afbedSKrzysztof Parzyszek
253*9e6afbedSKrzysztof Parzyszekdefine <32 x float> @test_11(<32 x float> %v0, <32 x float> %v1, <32 x float> %v2) #0 {
254*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_11:
255*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
256*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
257*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vcmp.eq(v0.w,v1.w)
258*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
259*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
260*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v2,v1)
261*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
262*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
263*9e6afbedSKrzysztof Parzyszek  %t0 = fcmp one <32 x float> %v0, %v1
264*9e6afbedSKrzysztof Parzyszek  %t1 = select <32 x i1> %t0, <32 x float> %v1, <32 x float> %v2
265*9e6afbedSKrzysztof Parzyszek  ret <32 x float> %t1
266*9e6afbedSKrzysztof Parzyszek}
267*9e6afbedSKrzysztof Parzyszek
268*9e6afbedSKrzysztof Parzyszekdefine <32 x float> @test_12(<32 x float> %v0, <32 x float> %v1, <32 x float> %v2) #0 {
269*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_12:
270*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
271*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
272*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vcmp.gt(v1.sf,v0.sf)
273*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
274*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
275*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v1,v2)
276*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
277*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
278*9e6afbedSKrzysztof Parzyszek  %t0 = fcmp olt <32 x float> %v0, %v1
279*9e6afbedSKrzysztof Parzyszek  %t1 = select <32 x i1> %t0, <32 x float> %v1, <32 x float> %v2
280*9e6afbedSKrzysztof Parzyszek  ret <32 x float> %t1
281*9e6afbedSKrzysztof Parzyszek}
282*9e6afbedSKrzysztof Parzyszek
283*9e6afbedSKrzysztof Parzyszekdefine <32 x float> @test_13(<32 x float> %v0, <32 x float> %v1, <32 x float> %v2) #0 {
284*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_13:
285*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
286*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
287*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vcmp.gt(v0.sf,v1.sf)
288*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
289*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
290*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v2,v1)
291*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
292*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
293*9e6afbedSKrzysztof Parzyszek  %t0 = fcmp ole <32 x float> %v0, %v1
294*9e6afbedSKrzysztof Parzyszek  %t1 = select <32 x i1> %t0, <32 x float> %v1, <32 x float> %v2
295*9e6afbedSKrzysztof Parzyszek  ret <32 x float> %t1
296*9e6afbedSKrzysztof Parzyszek}
297*9e6afbedSKrzysztof Parzyszek
298*9e6afbedSKrzysztof Parzyszekdefine <32 x float> @test_14(<32 x float> %v0, <32 x float> %v1, <32 x float> %v2) #0 {
299*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_14:
300*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
301*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
302*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vcmp.gt(v0.sf,v1.sf)
303*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
304*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
305*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v1,v2)
306*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
307*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
308*9e6afbedSKrzysztof Parzyszek  %t0 = fcmp ogt <32 x float> %v0, %v1
309*9e6afbedSKrzysztof Parzyszek  %t1 = select <32 x i1> %t0, <32 x float> %v1, <32 x float> %v2
310*9e6afbedSKrzysztof Parzyszek  ret <32 x float> %t1
311*9e6afbedSKrzysztof Parzyszek}
312*9e6afbedSKrzysztof Parzyszek
313*9e6afbedSKrzysztof Parzyszekdefine <32 x float> @test_15(<32 x float> %v0, <32 x float> %v1, <32 x float> %v2) #0 {
314*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_15:
315*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
316*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
317*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vcmp.gt(v1.sf,v0.sf)
318*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
319*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
320*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v2,v1)
321*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
322*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
323*9e6afbedSKrzysztof Parzyszek  %t0 = fcmp oge <32 x float> %v0, %v1
324*9e6afbedSKrzysztof Parzyszek  %t1 = select <32 x i1> %t0, <32 x float> %v1, <32 x float> %v2
325*9e6afbedSKrzysztof Parzyszek  ret <32 x float> %t1
326*9e6afbedSKrzysztof Parzyszek}
327*9e6afbedSKrzysztof Parzyszek
328*9e6afbedSKrzysztof Parzyszekdefine <32 x float> @test_1a(<32 x float> %v0, <32 x float> %v1, <32 x i32> %v2) #0 {
329*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_1a:
330*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
331*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
332*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     r0 = ##16843009
333*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
334*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
335*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vand(v2,r0)
336*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
337*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
338*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 &= vcmp.eq(v0.w,v1.w)
339*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
340*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
341*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v0,v1)
342*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
343*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
344*9e6afbedSKrzysztof Parzyszek  %q0 = fcmp oeq <32 x float> %v0, %v1
345*9e6afbedSKrzysztof Parzyszek  %q1 = trunc <32 x i32> %v2 to <32 x i1>
346*9e6afbedSKrzysztof Parzyszek  %q2 = and <32 x i1> %q0, %q1
347*9e6afbedSKrzysztof Parzyszek  %t1 = select <32 x i1> %q2, <32 x float> %v0, <32 x float> %v1
348*9e6afbedSKrzysztof Parzyszek  ret <32 x float> %t1
349*9e6afbedSKrzysztof Parzyszek}
350*9e6afbedSKrzysztof Parzyszek
351*9e6afbedSKrzysztof Parzyszekdefine <32 x float> @test_1b(<32 x float> %v0, <32 x float> %v1, <32 x i32> %v2) #0 {
352*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_1b:
353*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
354*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
355*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     r0 = ##16843009
356*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
357*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
358*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vand(v2,r0)
359*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
360*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
361*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 |= vcmp.eq(v0.w,v1.w)
362*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
363*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
364*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v0,v1)
365*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
366*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
367*9e6afbedSKrzysztof Parzyszek  %q0 = fcmp oeq <32 x float> %v0, %v1
368*9e6afbedSKrzysztof Parzyszek  %q1 = trunc <32 x i32> %v2 to <32 x i1>
369*9e6afbedSKrzysztof Parzyszek  %q2 = or <32 x i1> %q0, %q1
370*9e6afbedSKrzysztof Parzyszek  %t1 = select <32 x i1> %q2, <32 x float> %v0, <32 x float> %v1
371*9e6afbedSKrzysztof Parzyszek  ret <32 x float> %t1
372*9e6afbedSKrzysztof Parzyszek}
373*9e6afbedSKrzysztof Parzyszek
374*9e6afbedSKrzysztof Parzyszekdefine <32 x float> @test_1c(<32 x float> %v0, <32 x float> %v1, <32 x i32> %v2) #0 {
375*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_1c:
376*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
377*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
378*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     r0 = ##16843009
379*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
380*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
381*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vand(v2,r0)
382*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
383*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
384*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 ^= vcmp.eq(v0.w,v1.w)
385*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
386*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
387*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v0,v1)
388*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
389*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
390*9e6afbedSKrzysztof Parzyszek  %q0 = fcmp oeq <32 x float> %v0, %v1
391*9e6afbedSKrzysztof Parzyszek  %q1 = trunc <32 x i32> %v2 to <32 x i1>
392*9e6afbedSKrzysztof Parzyszek  %q2 = xor <32 x i1> %q0, %q1
393*9e6afbedSKrzysztof Parzyszek  %t1 = select <32 x i1> %q2, <32 x float> %v0, <32 x float> %v1
394*9e6afbedSKrzysztof Parzyszek  ret <32 x float> %t1
395*9e6afbedSKrzysztof Parzyszek}
396*9e6afbedSKrzysztof Parzyszek
397*9e6afbedSKrzysztof Parzyszekdefine <32 x float> @test_1d(<32 x float> %v0, <32 x float> %v1, <32 x i32> %v2) #0 {
398*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_1d:
399*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
400*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
401*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     r0 = ##16843009
402*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
403*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
404*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vand(v2,r0)
405*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
406*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
407*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 &= vcmp.gt(v0.sf,v1.sf)
408*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
409*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
410*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v0,v1)
411*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
412*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
413*9e6afbedSKrzysztof Parzyszek  %q0 = fcmp ogt <32 x float> %v0, %v1
414*9e6afbedSKrzysztof Parzyszek  %q1 = trunc <32 x i32> %v2 to <32 x i1>
415*9e6afbedSKrzysztof Parzyszek  %q2 = and <32 x i1> %q0, %q1
416*9e6afbedSKrzysztof Parzyszek  %t1 = select <32 x i1> %q2, <32 x float> %v0, <32 x float> %v1
417*9e6afbedSKrzysztof Parzyszek  ret <32 x float> %t1
418*9e6afbedSKrzysztof Parzyszek}
419*9e6afbedSKrzysztof Parzyszek
420*9e6afbedSKrzysztof Parzyszekdefine <32 x float> @test_1e(<32 x float> %v0, <32 x float> %v1, <32 x i32> %v2) #0 {
421*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_1e:
422*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
423*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
424*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     r0 = ##16843009
425*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
426*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
427*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vand(v2,r0)
428*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
429*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
430*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 |= vcmp.gt(v0.sf,v1.sf)
431*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
432*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
433*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v0,v1)
434*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
435*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
436*9e6afbedSKrzysztof Parzyszek  %q0 = fcmp ogt <32 x float> %v0, %v1
437*9e6afbedSKrzysztof Parzyszek  %q1 = trunc <32 x i32> %v2 to <32 x i1>
438*9e6afbedSKrzysztof Parzyszek  %q2 = or <32 x i1> %q0, %q1
439*9e6afbedSKrzysztof Parzyszek  %t1 = select <32 x i1> %q2, <32 x float> %v0, <32 x float> %v1
440*9e6afbedSKrzysztof Parzyszek  ret <32 x float> %t1
441*9e6afbedSKrzysztof Parzyszek}
442*9e6afbedSKrzysztof Parzyszek
443*9e6afbedSKrzysztof Parzyszekdefine <32 x float> @test_1f(<32 x float> %v0, <32 x float> %v1, <32 x i32> %v2) #0 {
444*9e6afbedSKrzysztof Parzyszek; CHECK-LABEL: test_1f:
445*9e6afbedSKrzysztof Parzyszek; CHECK:       // %bb.0:
446*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
447*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     r0 = ##16843009
448*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
449*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
450*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 = vand(v2,r0)
451*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
452*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
453*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     q0 ^= vcmp.gt(v0.sf,v1.sf)
454*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
455*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    {
456*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     v0 = vmux(q0,v0,v1)
457*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:     jumpr r31
458*9e6afbedSKrzysztof Parzyszek; CHECK-NEXT:    }
459*9e6afbedSKrzysztof Parzyszek  %q0 = fcmp ogt <32 x float> %v0, %v1
460*9e6afbedSKrzysztof Parzyszek  %q1 = trunc <32 x i32> %v2 to <32 x i1>
461*9e6afbedSKrzysztof Parzyszek  %q2 = xor <32 x i1> %q0, %q1
462*9e6afbedSKrzysztof Parzyszek  %t1 = select <32 x i1> %q2, <32 x float> %v0, <32 x float> %v1
463*9e6afbedSKrzysztof Parzyszek  ret <32 x float> %t1
464*9e6afbedSKrzysztof Parzyszek}
465*9e6afbedSKrzysztof Parzyszek
466*9e6afbedSKrzysztof Parzyszekattributes #0 = { nounwind readnone "target-cpu"="hexagonv69" }
467