xref: /llvm-project/llvm/test/CodeGen/VE/Scalar/selectccf64i.ll (revision 33dda45dde678f6f2efa24d7ca837cd6ad8f44d7)
1; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s
2
3define double @selectccaf(double, double, double, double) {
4; CHECK-LABEL: selectccaf:
5; CHECK:       # %bb.0:
6; CHECK-NEXT:    or %s0, 0, %s3
7; CHECK-NEXT:    b.l.t (, %s10)
8  %5 = fcmp false double %0, 0.0
9  %6 = select i1 %5, double %2, double %3
10  ret double %6
11}
12
13define double @selectccat(double, double, double, double) {
14; CHECK-LABEL: selectccat:
15; CHECK:       # %bb.0:
16; CHECK-NEXT:    or %s0, 0, %s2
17; CHECK-NEXT:    b.l.t (, %s10)
18  %5 = fcmp true double %0, 0.0
19  %6 = select i1 %5, double %2, double %3
20  ret double %6
21}
22
23define double @selectccoeq(double, double, double, double) {
24; CHECK-LABEL: selectccoeq:
25; CHECK:       # %bb.0:
26; CHECK-NEXT:    cmov.d.eq %s3, %s2, %s0
27; CHECK-NEXT:    or %s0, 0, %s3
28; CHECK-NEXT:    b.l.t (, %s10)
29  %5 = fcmp oeq double %0, 0.0
30  %6 = select i1 %5, double %2, double %3
31  ret double %6
32}
33
34define double @selectccone(double, double, double, double) {
35; CHECK-LABEL: selectccone:
36; CHECK:       # %bb.0:
37; CHECK-NEXT:    cmov.d.ne %s3, %s2, %s0
38; CHECK-NEXT:    or %s0, 0, %s3
39; CHECK-NEXT:    b.l.t (, %s10)
40  %5 = fcmp one double %0, 0.0
41  %6 = select i1 %5, double %2, double %3
42  ret double %6
43}
44
45define double @selectccogt(double, double, double, double) {
46; CHECK-LABEL: selectccogt:
47; CHECK:       # %bb.0:
48; CHECK-NEXT:    cmov.d.gt %s3, %s2, %s0
49; CHECK-NEXT:    or %s0, 0, %s3
50; CHECK-NEXT:    b.l.t (, %s10)
51  %5 = fcmp ogt double %0, 0.0
52  %6 = select i1 %5, double %2, double %3
53  ret double %6
54}
55
56define double @selectccoge(double, double, double, double) {
57; CHECK-LABEL: selectccoge:
58; CHECK:       # %bb.0:
59; CHECK-NEXT:    cmov.d.ge %s3, %s2, %s0
60; CHECK-NEXT:    or %s0, 0, %s3
61; CHECK-NEXT:    b.l.t (, %s10)
62  %5 = fcmp oge double %0, 0.0
63  %6 = select i1 %5, double %2, double %3
64  ret double %6
65}
66
67define double @selectccolt(double, double, double, double) {
68; CHECK-LABEL: selectccolt:
69; CHECK:       # %bb.0:
70; CHECK-NEXT:    cmov.d.lt %s3, %s2, %s0
71; CHECK-NEXT:    or %s0, 0, %s3
72; CHECK-NEXT:    b.l.t (, %s10)
73  %5 = fcmp olt double %0, 0.0
74  %6 = select i1 %5, double %2, double %3
75  ret double %6
76}
77
78define double @selectccole(double, double, double, double) {
79; CHECK-LABEL: selectccole:
80; CHECK:       # %bb.0:
81; CHECK-NEXT:    cmov.d.le %s3, %s2, %s0
82; CHECK-NEXT:    or %s0, 0, %s3
83; CHECK-NEXT:    b.l.t (, %s10)
84  %5 = fcmp ole double %0, 0.0
85  %6 = select i1 %5, double %2, double %3
86  ret double %6
87}
88
89define double @selectccord(double, double, double, double) {
90; CHECK-LABEL: selectccord:
91; CHECK:       # %bb.0:
92; CHECK-NEXT:    fcmp.d %s0, %s0, %s0
93; CHECK-NEXT:    cmov.d.num %s3, %s2, %s0
94; CHECK-NEXT:    or %s0, 0, %s3
95; CHECK-NEXT:    b.l.t (, %s10)
96  %5 = fcmp ord double %0, 0.0
97  %6 = select i1 %5, double %2, double %3
98  ret double %6
99}
100
101define double @selectccuno(double, double, double, double) {
102; CHECK-LABEL: selectccuno:
103; CHECK:       # %bb.0:
104; CHECK-NEXT:    fcmp.d %s0, %s0, %s0
105; CHECK-NEXT:    cmov.d.nan %s3, %s2, %s0
106; CHECK-NEXT:    or %s0, 0, %s3
107; CHECK-NEXT:    b.l.t (, %s10)
108  %5 = fcmp uno double %0, 0.0
109  %6 = select i1 %5, double %2, double %3
110  ret double %6
111}
112
113define double @selectccueq(double, double, double, double) {
114; CHECK-LABEL: selectccueq:
115; CHECK:       # %bb.0:
116; CHECK-NEXT:    cmov.d.eqnan %s3, %s2, %s0
117; CHECK-NEXT:    or %s0, 0, %s3
118; CHECK-NEXT:    b.l.t (, %s10)
119  %5 = fcmp ueq double %0, 0.0
120  %6 = select i1 %5, double %2, double %3
121  ret double %6
122}
123
124define double @selectccune(double, double, double, double) {
125; CHECK-LABEL: selectccune:
126; CHECK:       # %bb.0:
127; CHECK-NEXT:    cmov.d.nenan %s3, %s2, %s0
128; CHECK-NEXT:    or %s0, 0, %s3
129; CHECK-NEXT:    b.l.t (, %s10)
130  %5 = fcmp une double %0, 0.0
131  %6 = select i1 %5, double %2, double %3
132  ret double %6
133}
134
135define double @selectccugt(double, double, double, double) {
136; CHECK-LABEL: selectccugt:
137; CHECK:       # %bb.0:
138; CHECK-NEXT:    cmov.d.gtnan %s3, %s2, %s0
139; CHECK-NEXT:    or %s0, 0, %s3
140; CHECK-NEXT:    b.l.t (, %s10)
141  %5 = fcmp ugt double %0, 0.0
142  %6 = select i1 %5, double %2, double %3
143  ret double %6
144}
145
146define double @selectccuge(double, double, double, double) {
147; CHECK-LABEL: selectccuge:
148; CHECK:       # %bb.0:
149; CHECK-NEXT:    cmov.d.genan %s3, %s2, %s0
150; CHECK-NEXT:    or %s0, 0, %s3
151; CHECK-NEXT:    b.l.t (, %s10)
152  %5 = fcmp uge double %0, 0.0
153  %6 = select i1 %5, double %2, double %3
154  ret double %6
155}
156
157define double @selectccult(double, double, double, double) {
158; CHECK-LABEL: selectccult:
159; CHECK:       # %bb.0:
160; CHECK-NEXT:    cmov.d.ltnan %s3, %s2, %s0
161; CHECK-NEXT:    or %s0, 0, %s3
162; CHECK-NEXT:    b.l.t (, %s10)
163  %5 = fcmp ult double %0, 0.0
164  %6 = select i1 %5, double %2, double %3
165  ret double %6
166}
167
168define double @selectccule(double, double, double, double) {
169; CHECK-LABEL: selectccule:
170; CHECK:       # %bb.0:
171; CHECK-NEXT:    cmov.d.lenan %s3, %s2, %s0
172; CHECK-NEXT:    or %s0, 0, %s3
173; CHECK-NEXT:    b.l.t (, %s10)
174  %5 = fcmp ule double %0, 0.0
175  %6 = select i1 %5, double %2, double %3
176  ret double %6
177}
178