xref: /aosp_15_r20/external/llvm/test/CodeGen/SystemZ/vec-cmp-06.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Test f64 and v2f64 comparisons.
2*9880d681SAndroid Build Coastguard Worker;
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; Test oeq.
6*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f1(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {
7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1:
8*9880d681SAndroid Build Coastguard Worker; CHECK: vfcedb %v24, %v26, %v28
9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
10*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oeq <2 x double> %val1, %val2
11*9880d681SAndroid Build Coastguard Worker  %ret = sext <2 x i1> %cmp to <2 x i64>
12*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
13*9880d681SAndroid Build Coastguard Worker}
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker; Test one.
16*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f2(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {
17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2:
18*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v28, %v26
19*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG2:%v[0-9]+]], %v26, %v28
20*9880d681SAndroid Build Coastguard Worker; CHECK: vo %v24, [[REG1]], [[REG2]]
21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
22*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp one <2 x double> %val1, %val2
23*9880d681SAndroid Build Coastguard Worker  %ret = sext <2 x i1> %cmp to <2 x i64>
24*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker; Test ogt.
28*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f3(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {
29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3:
30*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdb %v24, %v26, %v28
31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
32*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ogt <2 x double> %val1, %val2
33*9880d681SAndroid Build Coastguard Worker  %ret = sext <2 x i1> %cmp to <2 x i64>
34*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; Test oge.
38*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f4(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {
39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4:
40*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedb %v24, %v26, %v28
41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
42*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oge <2 x double> %val1, %val2
43*9880d681SAndroid Build Coastguard Worker  %ret = sext <2 x i1> %cmp to <2 x i64>
44*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker; Test ole.
48*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f5(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {
49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5:
50*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedb %v24, %v28, %v26
51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
52*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ole <2 x double> %val1, %val2
53*9880d681SAndroid Build Coastguard Worker  %ret = sext <2 x i1> %cmp to <2 x i64>
54*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
55*9880d681SAndroid Build Coastguard Worker}
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker; Test olt.
58*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f6(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {
59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6:
60*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdb %v24, %v28, %v26
61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
62*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp olt <2 x double> %val1, %val2
63*9880d681SAndroid Build Coastguard Worker  %ret = sext <2 x i1> %cmp to <2 x i64>
64*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
65*9880d681SAndroid Build Coastguard Worker}
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker; Test ueq.
68*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f7(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {
69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7:
70*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v28, %v26
71*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG2:%v[0-9]+]], %v26, %v28
72*9880d681SAndroid Build Coastguard Worker; CHECK: vno %v24, [[REG1]], [[REG2]]
73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
74*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ueq <2 x double> %val1, %val2
75*9880d681SAndroid Build Coastguard Worker  %ret = sext <2 x i1> %cmp to <2 x i64>
76*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker; Test une.
80*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f8(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {
81*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8:
82*9880d681SAndroid Build Coastguard Worker; CHECK: vfcedb [[REG:%v[0-9]+]], %v26, %v28
83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vno %v24, [[REG]], [[REG]]
84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
85*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp une <2 x double> %val1, %val2
86*9880d681SAndroid Build Coastguard Worker  %ret = sext <2 x i1> %cmp to <2 x i64>
87*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
88*9880d681SAndroid Build Coastguard Worker}
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker; Test ugt.
91*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f9(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) {
92*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f9:
93*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedb [[REG:%v[0-9]+]], %v28, %v26
94*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vno %v24, [[REG]], [[REG]]
95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
96*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ugt <2 x double> %val1, %val2
97*9880d681SAndroid Build Coastguard Worker  %ret = sext <2 x i1> %cmp to <2 x i64>
98*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Worker; Test uge.
102*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f10(<2 x i64> %dummy, <2 x double> %val1,
103*9880d681SAndroid Build Coastguard Worker                      <2 x double> %val2) {
104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f10:
105*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdb [[REG:%v[0-9]+]], %v28, %v26
106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vno %v24, [[REG]], [[REG]]
107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
108*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp uge <2 x double> %val1, %val2
109*9880d681SAndroid Build Coastguard Worker  %ret = sext <2 x i1> %cmp to <2 x i64>
110*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Worker; Test ule.
114*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f11(<2 x i64> %dummy, <2 x double> %val1,
115*9880d681SAndroid Build Coastguard Worker                      <2 x double> %val2) {
116*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f11:
117*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdb [[REG:%v[0-9]+]], %v26, %v28
118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vno %v24, [[REG]], [[REG]]
119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
120*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ule <2 x double> %val1, %val2
121*9880d681SAndroid Build Coastguard Worker  %ret = sext <2 x i1> %cmp to <2 x i64>
122*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
123*9880d681SAndroid Build Coastguard Worker}
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Worker; Test ult.
126*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f12(<2 x i64> %dummy, <2 x double> %val1,
127*9880d681SAndroid Build Coastguard Worker                      <2 x double> %val2) {
128*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f12:
129*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedb [[REG:%v[0-9]+]], %v26, %v28
130*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vno %v24, [[REG]], [[REG]]
131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
132*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ult <2 x double> %val1, %val2
133*9880d681SAndroid Build Coastguard Worker  %ret = sext <2 x i1> %cmp to <2 x i64>
134*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
135*9880d681SAndroid Build Coastguard Worker}
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Worker; Test ord.
138*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f13(<2 x i64> %dummy, <2 x double> %val1,
139*9880d681SAndroid Build Coastguard Worker                      <2 x double> %val2) {
140*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f13:
141*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v28, %v26
142*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchedb [[REG2:%v[0-9]+]], %v26, %v28
143*9880d681SAndroid Build Coastguard Worker; CHECK: vo %v24, [[REG1]], [[REG2]]
144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
145*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ord <2 x double> %val1, %val2
146*9880d681SAndroid Build Coastguard Worker  %ret = sext <2 x i1> %cmp to <2 x i64>
147*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
148*9880d681SAndroid Build Coastguard Worker}
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Worker; Test uno.
151*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f14(<2 x i64> %dummy, <2 x double> %val1,
152*9880d681SAndroid Build Coastguard Worker                      <2 x double> %val2) {
153*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f14:
154*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v28, %v26
155*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchedb [[REG2:%v[0-9]+]], %v26, %v28
156*9880d681SAndroid Build Coastguard Worker; CHECK: vno %v24, [[REG1]], [[REG2]]
157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
158*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp uno <2 x double> %val1, %val2
159*9880d681SAndroid Build Coastguard Worker  %ret = sext <2 x i1> %cmp to <2 x i64>
160*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
161*9880d681SAndroid Build Coastguard Worker}
162*9880d681SAndroid Build Coastguard Worker
163*9880d681SAndroid Build Coastguard Worker; Test oeq selects.
164*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f15(<2 x double> %val1, <2 x double> %val2,
165*9880d681SAndroid Build Coastguard Worker                         <2 x double> %val3, <2 x double> %val4) {
166*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f15:
167*9880d681SAndroid Build Coastguard Worker; CHECK: vfcedb [[REG:%v[0-9]+]], %v24, %v26
168*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]
169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
170*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oeq <2 x double> %val1, %val2
171*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4
172*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %ret
173*9880d681SAndroid Build Coastguard Worker}
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Worker; Test one selects.
176*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f16(<2 x double> %val1, <2 x double> %val2,
177*9880d681SAndroid Build Coastguard Worker                         <2 x double> %val3, <2 x double> %val4) {
178*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f16:
179*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v26, %v24
180*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG2:%v[0-9]+]], %v24, %v26
181*9880d681SAndroid Build Coastguard Worker; CHECK: vo [[REG:%v[0-9]+]], [[REG1]], [[REG2]]
182*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]
183*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
184*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp one <2 x double> %val1, %val2
185*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4
186*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %ret
187*9880d681SAndroid Build Coastguard Worker}
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Worker; Test ogt selects.
190*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f17(<2 x double> %val1, <2 x double> %val2,
191*9880d681SAndroid Build Coastguard Worker                         <2 x double> %val3, <2 x double> %val4) {
192*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f17:
193*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdb [[REG:%v[0-9]+]], %v24, %v26
194*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]
195*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
196*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ogt <2 x double> %val1, %val2
197*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4
198*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %ret
199*9880d681SAndroid Build Coastguard Worker}
200*9880d681SAndroid Build Coastguard Worker
201*9880d681SAndroid Build Coastguard Worker; Test oge selects.
202*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f18(<2 x double> %val1, <2 x double> %val2,
203*9880d681SAndroid Build Coastguard Worker                         <2 x double> %val3, <2 x double> %val4) {
204*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f18:
205*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedb [[REG:%v[0-9]+]], %v24, %v26
206*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]
207*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
208*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oge <2 x double> %val1, %val2
209*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4
210*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %ret
211*9880d681SAndroid Build Coastguard Worker}
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Worker; Test ole selects.
214*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f19(<2 x double> %val1, <2 x double> %val2,
215*9880d681SAndroid Build Coastguard Worker                         <2 x double> %val3, <2 x double> %val4) {
216*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f19:
217*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedb [[REG:%v[0-9]+]], %v26, %v24
218*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]
219*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
220*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ole <2 x double> %val1, %val2
221*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4
222*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %ret
223*9880d681SAndroid Build Coastguard Worker}
224*9880d681SAndroid Build Coastguard Worker
225*9880d681SAndroid Build Coastguard Worker; Test olt selects.
226*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f20(<2 x double> %val1, <2 x double> %val2,
227*9880d681SAndroid Build Coastguard Worker                         <2 x double> %val3, <2 x double> %val4) {
228*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f20:
229*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdb [[REG:%v[0-9]+]], %v26, %v24
230*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]
231*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
232*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp olt <2 x double> %val1, %val2
233*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4
234*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %ret
235*9880d681SAndroid Build Coastguard Worker}
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard Worker; Test ueq selects.
238*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f21(<2 x double> %val1, <2 x double> %val2,
239*9880d681SAndroid Build Coastguard Worker                         <2 x double> %val3, <2 x double> %val4) {
240*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f21:
241*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v26, %v24
242*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG2:%v[0-9]+]], %v24, %v26
243*9880d681SAndroid Build Coastguard Worker; CHECK: vo [[REG:%v[0-9]+]], [[REG1]], [[REG2]]
244*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]
245*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
246*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ueq <2 x double> %val1, %val2
247*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4
248*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %ret
249*9880d681SAndroid Build Coastguard Worker}
250*9880d681SAndroid Build Coastguard Worker
251*9880d681SAndroid Build Coastguard Worker; Test une selects.
252*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f22(<2 x double> %val1, <2 x double> %val2,
253*9880d681SAndroid Build Coastguard Worker                         <2 x double> %val3, <2 x double> %val4) {
254*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f22:
255*9880d681SAndroid Build Coastguard Worker; CHECK: vfcedb [[REG:%v[0-9]+]], %v24, %v26
256*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]
257*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
258*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp une <2 x double> %val1, %val2
259*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4
260*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %ret
261*9880d681SAndroid Build Coastguard Worker}
262*9880d681SAndroid Build Coastguard Worker
263*9880d681SAndroid Build Coastguard Worker; Test ugt selects.
264*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f23(<2 x double> %val1, <2 x double> %val2,
265*9880d681SAndroid Build Coastguard Worker                         <2 x double> %val3, <2 x double> %val4) {
266*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f23:
267*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedb [[REG:%v[0-9]+]], %v26, %v24
268*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]
269*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
270*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ugt <2 x double> %val1, %val2
271*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4
272*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %ret
273*9880d681SAndroid Build Coastguard Worker}
274*9880d681SAndroid Build Coastguard Worker
275*9880d681SAndroid Build Coastguard Worker; Test uge selects.
276*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f24(<2 x double> %val1, <2 x double> %val2,
277*9880d681SAndroid Build Coastguard Worker                         <2 x double> %val3, <2 x double> %val4) {
278*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f24:
279*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdb [[REG:%v[0-9]+]], %v26, %v24
280*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]
281*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
282*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp uge <2 x double> %val1, %val2
283*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4
284*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %ret
285*9880d681SAndroid Build Coastguard Worker}
286*9880d681SAndroid Build Coastguard Worker
287*9880d681SAndroid Build Coastguard Worker; Test ule selects.
288*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f25(<2 x double> %val1, <2 x double> %val2,
289*9880d681SAndroid Build Coastguard Worker                         <2 x double> %val3, <2 x double> %val4) {
290*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f25:
291*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdb [[REG:%v[0-9]+]], %v24, %v26
292*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]
293*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
294*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ule <2 x double> %val1, %val2
295*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4
296*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %ret
297*9880d681SAndroid Build Coastguard Worker}
298*9880d681SAndroid Build Coastguard Worker
299*9880d681SAndroid Build Coastguard Worker; Test ult selects.
300*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f26(<2 x double> %val1, <2 x double> %val2,
301*9880d681SAndroid Build Coastguard Worker                         <2 x double> %val3, <2 x double> %val4) {
302*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f26:
303*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedb [[REG:%v[0-9]+]], %v24, %v26
304*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]
305*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
306*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ult <2 x double> %val1, %val2
307*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4
308*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %ret
309*9880d681SAndroid Build Coastguard Worker}
310*9880d681SAndroid Build Coastguard Worker
311*9880d681SAndroid Build Coastguard Worker; Test ord selects.
312*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f27(<2 x double> %val1, <2 x double> %val2,
313*9880d681SAndroid Build Coastguard Worker                         <2 x double> %val3, <2 x double> %val4) {
314*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f27:
315*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v26, %v24
316*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchedb [[REG2:%v[0-9]+]], %v24, %v26
317*9880d681SAndroid Build Coastguard Worker; CHECK: vo [[REG:%v[0-9]+]], [[REG1]], [[REG2]]
318*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]]
319*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
320*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ord <2 x double> %val1, %val2
321*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4
322*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %ret
323*9880d681SAndroid Build Coastguard Worker}
324*9880d681SAndroid Build Coastguard Worker
325*9880d681SAndroid Build Coastguard Worker; Test uno selects.
326*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f28(<2 x double> %val1, <2 x double> %val2,
327*9880d681SAndroid Build Coastguard Worker                         <2 x double> %val3, <2 x double> %val4) {
328*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f28:
329*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v26, %v24
330*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchedb [[REG2:%v[0-9]+]], %v24, %v26
331*9880d681SAndroid Build Coastguard Worker; CHECK: vo [[REG:%v[0-9]+]], [[REG1]], [[REG2]]
332*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]]
333*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14
334*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp uno <2 x double> %val1, %val2
335*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4
336*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %ret
337*9880d681SAndroid Build Coastguard Worker}
338*9880d681SAndroid Build Coastguard Worker
339*9880d681SAndroid Build Coastguard Worker; Test an f64 comparison that uses vector registers.
340*9880d681SAndroid Build Coastguard Workerdefine i64 @f29(i64 %a, i64 %b, double %f1, <2 x double> %vec) {
341*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f29:
342*9880d681SAndroid Build Coastguard Worker; CHECK: wfcdb %f0, %v24
343*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: locgrne %r2, %r3
344*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
345*9880d681SAndroid Build Coastguard Worker  %f2 = extractelement <2 x double> %vec, i32 0
346*9880d681SAndroid Build Coastguard Worker  %cond = fcmp oeq double %f1, %f2
347*9880d681SAndroid Build Coastguard Worker  %res = select i1 %cond, i64 %a, i64 %b
348*9880d681SAndroid Build Coastguard Worker  ret i64 %res
349*9880d681SAndroid Build Coastguard Worker}
350