blob: a6803fc78d8ce3596943311350c4cf6dfc956f55 [file] [log] [blame]
James Molloy6f0a9d72015-08-13 17:28:16 +00001; RUN: llc < %s -mtriple armv8 -mattr=+neon,+fp-armv8 -enable-unsafe-fp-math -enable-no-nans-fp-math | FileCheck %s
Joey Gouly8c25b9d2013-07-17 14:03:49 +00002
Scott Douglass7ad77922015-04-08 17:18:28 +00003; scalars
4
Joey Goulyccd04892013-09-13 13:46:57 +00005define float @fp-armv8_vminnm_o(float %a, float %b) {
Oliver Stannard79efe412014-10-27 09:23:02 +00006; CHECK-LABEL: "fp-armv8_vminnm_o":
James Molloy6f0a9d72015-08-13 17:28:16 +00007; CHECK-NOT: vcmp
8; CHECK: vminnm.f32
9 %cmp = fcmp fast olt float %a, %b
Joey Goulye3dd6842013-08-23 12:01:13 +000010 %cond = select i1 %cmp, float %a, float %b
11 ret float %cond
12}
13
Scott Douglass7ad77922015-04-08 17:18:28 +000014define double @fp-armv8_vminnm_ole(double %a, double %b) {
Scott Douglass7ad77922015-04-08 17:18:28 +000015; CHECK-LABEL: "fp-armv8_vminnm_ole":
James Molloy6f0a9d72015-08-13 17:28:16 +000016; CHECK-NOT: vcmp
17; CHECK: vminnm.f64
18 %cmp = fcmp fast ole double %a, %b
Scott Douglass7ad77922015-04-08 17:18:28 +000019 %cond = select i1 %cmp, double %a, double %b
20 ret double %cond
21}
22
Oliver Stannard79efe412014-10-27 09:23:02 +000023define float @fp-armv8_vminnm_o_rev(float %a, float %b) {
Oliver Stannard79efe412014-10-27 09:23:02 +000024; CHECK-LABEL: "fp-armv8_vminnm_o_rev":
James Molloy6f0a9d72015-08-13 17:28:16 +000025; CHECK-NOT: vcmp
26; CHECK: vminnm.f32
27 %cmp = fcmp fast ogt float %a, %b
Oliver Stannard79efe412014-10-27 09:23:02 +000028 %cond = select i1 %cmp, float %b, float %a
29 ret float %cond
30}
31
Scott Douglass7ad77922015-04-08 17:18:28 +000032define double @fp-armv8_vminnm_oge_rev(double %a, double %b) {
Scott Douglass7ad77922015-04-08 17:18:28 +000033; CHECK-LABEL: "fp-armv8_vminnm_oge_rev":
James Molloy6f0a9d72015-08-13 17:28:16 +000034; CHECK-NOT: vcmp
35; CHECK: vminnm.f64
36 %cmp = fcmp fast oge double %a, %b
Scott Douglass7ad77922015-04-08 17:18:28 +000037 %cond = select i1 %cmp, double %b, double %a
38 ret double %cond
39}
40
Oliver Stannard79efe412014-10-27 09:23:02 +000041define float @fp-armv8_vminnm_u(float %a, float %b) {
Oliver Stannard79efe412014-10-27 09:23:02 +000042; CHECK-LABEL: "fp-armv8_vminnm_u":
James Molloy6f0a9d72015-08-13 17:28:16 +000043; CHECK-NOT: vcmp
44; CHECK: vminnm.f32
45 %cmp = fcmp fast ult float %a, %b
Joey Goulye3dd6842013-08-23 12:01:13 +000046 %cond = select i1 %cmp, float %a, float %b
47 ret float %cond
48}
49
Scott Douglass7ad77922015-04-08 17:18:28 +000050define float @fp-armv8_vminnm_ule(float %a, float %b) {
Scott Douglass7ad77922015-04-08 17:18:28 +000051; CHECK-LABEL: "fp-armv8_vminnm_ule":
James Molloy6f0a9d72015-08-13 17:28:16 +000052; CHECK-NOT: vcmp
53; CHECK: vminnm.f32
54 %cmp = fcmp fast ule float %a, %b
Scott Douglass7ad77922015-04-08 17:18:28 +000055 %cond = select i1 %cmp, float %a, float %b
56 ret float %cond
57}
58
Oliver Stannard79efe412014-10-27 09:23:02 +000059define float @fp-armv8_vminnm_u_rev(float %a, float %b) {
Oliver Stannard79efe412014-10-27 09:23:02 +000060; CHECK-LABEL: "fp-armv8_vminnm_u_rev":
James Molloy6f0a9d72015-08-13 17:28:16 +000061; CHECK-NOT: vcmp
62; CHECK: vminnm.f32
63 %cmp = fcmp fast ugt float %a, %b
Oliver Stannard79efe412014-10-27 09:23:02 +000064 %cond = select i1 %cmp, float %b, float %a
65 ret float %cond
66}
67
Scott Douglass7ad77922015-04-08 17:18:28 +000068define double @fp-armv8_vminnm_uge_rev(double %a, double %b) {
Scott Douglass7ad77922015-04-08 17:18:28 +000069; CHECK-LABEL: "fp-armv8_vminnm_uge_rev":
James Molloy6f0a9d72015-08-13 17:28:16 +000070; CHECK-NOT: vcmp
71; CHECK: vminnm.f64
72 %cmp = fcmp fast uge double %a, %b
Scott Douglass7ad77922015-04-08 17:18:28 +000073 %cond = select i1 %cmp, double %b, double %a
74 ret double %cond
75}
76
Joey Goulyccd04892013-09-13 13:46:57 +000077define float @fp-armv8_vmaxnm_o(float %a, float %b) {
Oliver Stannard79efe412014-10-27 09:23:02 +000078; CHECK-LABEL: "fp-armv8_vmaxnm_o":
James Molloy6f0a9d72015-08-13 17:28:16 +000079; CHECK-NOT: vcmp
80; CHECK: vmaxnm.f32
81 %cmp = fcmp fast ogt float %a, %b
Joey Goulye3dd6842013-08-23 12:01:13 +000082 %cond = select i1 %cmp, float %a, float %b
83 ret float %cond
84}
85
Scott Douglass7ad77922015-04-08 17:18:28 +000086define float @fp-armv8_vmaxnm_oge(float %a, float %b) {
Scott Douglass7ad77922015-04-08 17:18:28 +000087; CHECK-LABEL: "fp-armv8_vmaxnm_oge":
James Molloy6f0a9d72015-08-13 17:28:16 +000088; CHECK-NOT: vcmp
89; CHECK: vmaxnm.f32
90 %cmp = fcmp fast oge float %a, %b
Scott Douglass7ad77922015-04-08 17:18:28 +000091 %cond = select i1 %cmp, float %a, float %b
92 ret float %cond
93}
94
Oliver Stannard79efe412014-10-27 09:23:02 +000095define float @fp-armv8_vmaxnm_o_rev(float %a, float %b) {
Oliver Stannard79efe412014-10-27 09:23:02 +000096; CHECK-LABEL: "fp-armv8_vmaxnm_o_rev":
James Molloy6f0a9d72015-08-13 17:28:16 +000097; CHECK-NOT: vcmp
98; CHECK: vmaxnm.f32
99 %cmp = fcmp fast olt float %a, %b
Oliver Stannard79efe412014-10-27 09:23:02 +0000100 %cond = select i1 %cmp, float %b, float %a
101 ret float %cond
102}
103
Scott Douglass7ad77922015-04-08 17:18:28 +0000104define float @fp-armv8_vmaxnm_ole_rev(float %a, float %b) {
Scott Douglass7ad77922015-04-08 17:18:28 +0000105; CHECK-LABEL: "fp-armv8_vmaxnm_ole_rev":
James Molloy6f0a9d72015-08-13 17:28:16 +0000106; CHECK-NOT: vcmp
107; CHECK: vmaxnm.f32
108 %cmp = fcmp fast ole float %a, %b
Scott Douglass7ad77922015-04-08 17:18:28 +0000109 %cond = select i1 %cmp, float %b, float %a
110 ret float %cond
111}
112
Oliver Stannard79efe412014-10-27 09:23:02 +0000113define float @fp-armv8_vmaxnm_u(float %a, float %b) {
Oliver Stannard79efe412014-10-27 09:23:02 +0000114; CHECK-LABEL: "fp-armv8_vmaxnm_u":
James Molloy6f0a9d72015-08-13 17:28:16 +0000115; CHECK-NOT: vcmp
116; CHECK: vmaxnm.f32
117 %cmp = fcmp fast ugt float %a, %b
Joey Goulye3dd6842013-08-23 12:01:13 +0000118 %cond = select i1 %cmp, float %a, float %b
119 ret float %cond
120}
121
Scott Douglass7ad77922015-04-08 17:18:28 +0000122define float @fp-armv8_vmaxnm_uge(float %a, float %b) {
Scott Douglass7ad77922015-04-08 17:18:28 +0000123; CHECK-LABEL: "fp-armv8_vmaxnm_uge":
James Molloy6f0a9d72015-08-13 17:28:16 +0000124; CHECK-NOT: vcmp
125; CHECK: vmaxnm.f32
126 %cmp = fcmp fast uge float %a, %b
Scott Douglass7ad77922015-04-08 17:18:28 +0000127 %cond = select i1 %cmp, float %a, float %b
128 ret float %cond
129}
130
Oliver Stannard79efe412014-10-27 09:23:02 +0000131define float @fp-armv8_vmaxnm_u_rev(float %a, float %b) {
Oliver Stannard79efe412014-10-27 09:23:02 +0000132; CHECK-LABEL: "fp-armv8_vmaxnm_u_rev":
James Molloy6f0a9d72015-08-13 17:28:16 +0000133; CHECK-NOT: vcmp
134; CHECK: vmaxnm.f32
135 %cmp = fcmp fast ult float %a, %b
Oliver Stannard79efe412014-10-27 09:23:02 +0000136 %cond = select i1 %cmp, float %b, float %a
137 ret float %cond
138}
139
Scott Douglass7ad77922015-04-08 17:18:28 +0000140define double @fp-armv8_vmaxnm_ule_rev(double %a, double %b) {
Scott Douglass7ad77922015-04-08 17:18:28 +0000141; CHECK-LABEL: "fp-armv8_vmaxnm_ule_rev":
James Molloy6f0a9d72015-08-13 17:28:16 +0000142; CHECK-NOT: vcmp
143; CHECK: vmaxnm.f64
144 %cmp = fcmp fast ule double %a, %b
Scott Douglass7ad77922015-04-08 17:18:28 +0000145 %cond = select i1 %cmp, double %b, double %a
146 ret double %cond
147}
148
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000149; known non-NaNs
150
151define float @fp-armv8_vminnm_NNNo(float %a) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000152; CHECK-LABEL: "fp-armv8_vminnm_NNNo":
153; CHECK: vminnm.f32
James Molloy6f0a9d72015-08-13 17:28:16 +0000154; CHECK: vminnm.f32
155 %cmp1 = fcmp fast olt float %a, 12.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000156 %cond1 = select i1 %cmp1, float %a, float 12.
James Molloy6f0a9d72015-08-13 17:28:16 +0000157 %cmp2 = fcmp fast olt float 34., %cond1
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000158 %cond2 = select i1 %cmp2, float 34., float %cond1
159 ret float %cond2
160}
161
162define double @fp-armv8_vminnm_NNNole(double %a) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000163; CHECK-LABEL: "fp-armv8_vminnm_NNNole":
164; CHECK: vminnm.f64
James Molloy6f0a9d72015-08-13 17:28:16 +0000165; CHECK: vminnm.f64
166 %cmp1 = fcmp fast ole double %a, 34.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000167 %cond1 = select i1 %cmp1, double %a, double 34.
James Molloy6f0a9d72015-08-13 17:28:16 +0000168 %cmp2 = fcmp fast ole double 56., %cond1
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000169 %cond2 = select i1 %cmp2, double 56., double %cond1
170 ret double %cond2
171}
172
173define float @fp-armv8_vminnm_NNNo_rev(float %a) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000174; CHECK-LABEL: "fp-armv8_vminnm_NNNo_rev":
175; CHECK: vminnm.f32
James Molloy6f0a9d72015-08-13 17:28:16 +0000176; CHECK: vminnm.f32
177 %cmp1 = fcmp fast ogt float %a, 56.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000178 %cond1 = select i1 %cmp1, float 56., float %a
James Molloy6f0a9d72015-08-13 17:28:16 +0000179 %cmp2 = fcmp fast ogt float 78., %cond1
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000180 %cond2 = select i1 %cmp2, float %cond1, float 78.
181 ret float %cond2
182}
183
184define double @fp-armv8_vminnm_NNNoge_rev(double %a) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000185; CHECK-LABEL: "fp-armv8_vminnm_NNNoge_rev":
186; CHECK: vminnm.f64
James Molloy6f0a9d72015-08-13 17:28:16 +0000187; CHECK: vminnm.f64
188 %cmp1 = fcmp fast oge double %a, 78.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000189 %cond1 = select i1 %cmp1, double 78., double %a
James Molloy6f0a9d72015-08-13 17:28:16 +0000190 %cmp2 = fcmp fast oge double 90., %cond1
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000191 %cond2 = select i1 %cmp2, double %cond1, double 90.
192 ret double %cond2
193}
194
195define float @fp-armv8_vminnm_NNNu(float %b) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000196; CHECK-LABEL: "fp-armv8_vminnm_NNNu":
197; CHECK: vminnm.f32
James Molloy6f0a9d72015-08-13 17:28:16 +0000198; CHECK: vminnm.f32
199 %cmp1 = fcmp fast ult float 12., %b
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000200 %cond1 = select i1 %cmp1, float 12., float %b
James Molloy6f0a9d72015-08-13 17:28:16 +0000201 %cmp2 = fcmp fast ult float %cond1, 34.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000202 %cond2 = select i1 %cmp2, float %cond1, float 34.
203 ret float %cond2
204}
205
206define float @fp-armv8_vminnm_NNNule(float %b) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000207; CHECK-LABEL: "fp-armv8_vminnm_NNNule":
208; CHECK: vminnm.f32
James Molloy6f0a9d72015-08-13 17:28:16 +0000209; CHECK: vminnm.f32
210 %cmp1 = fcmp fast ule float 34., %b
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000211 %cond1 = select i1 %cmp1, float 34., float %b
James Molloy6f0a9d72015-08-13 17:28:16 +0000212 %cmp2 = fcmp fast ule float %cond1, 56.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000213 %cond2 = select i1 %cmp2, float %cond1, float 56.
214 ret float %cond2
215}
216
217define float @fp-armv8_vminnm_NNNu_rev(float %b) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000218; CHECK-LABEL: "fp-armv8_vminnm_NNNu_rev":
219; CHECK: vminnm.f32
James Molloy6f0a9d72015-08-13 17:28:16 +0000220; CHECK: vminnm.f32
221 %cmp1 = fcmp fast ugt float 56., %b
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000222 %cond1 = select i1 %cmp1, float %b, float 56.
James Molloy6f0a9d72015-08-13 17:28:16 +0000223 %cmp2 = fcmp fast ugt float %cond1, 78.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000224 %cond2 = select i1 %cmp2, float 78., float %cond1
225 ret float %cond2
226}
227
228define double @fp-armv8_vminnm_NNNuge_rev(double %b) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000229; CHECK-LABEL: "fp-armv8_vminnm_NNNuge_rev":
230; CHECK: vminnm.f64
James Molloy6f0a9d72015-08-13 17:28:16 +0000231; CHECK: vminnm.f64
232 %cmp1 = fcmp fast uge double 78., %b
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000233 %cond1 = select i1 %cmp1, double %b, double 78.
James Molloy6f0a9d72015-08-13 17:28:16 +0000234 %cmp2 = fcmp fast uge double %cond1, 90.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000235 %cond2 = select i1 %cmp2, double 90., double %cond1
236 ret double %cond2
237}
238
239define float @fp-armv8_vmaxnm_NNNo(float %a) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000240; CHECK-LABEL: "fp-armv8_vmaxnm_NNNo":
241; CHECK: vmaxnm.f32
James Molloy6f0a9d72015-08-13 17:28:16 +0000242; CHECK: vmaxnm.f32
243 %cmp1 = fcmp fast ogt float %a, 12.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000244 %cond1 = select i1 %cmp1, float %a, float 12.
James Molloy6f0a9d72015-08-13 17:28:16 +0000245 %cmp2 = fcmp fast ogt float 34., %cond1
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000246 %cond2 = select i1 %cmp2, float 34., float %cond1
247 ret float %cond2
248}
249
250define float @fp-armv8_vmaxnm_NNNoge(float %a) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000251; CHECK-LABEL: "fp-armv8_vmaxnm_NNNoge":
252; CHECK: vmaxnm.f32
James Molloy6f0a9d72015-08-13 17:28:16 +0000253; CHECK: vmaxnm.f32
254 %cmp1 = fcmp fast oge float %a, 34.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000255 %cond1 = select i1 %cmp1, float %a, float 34.
James Molloy6f0a9d72015-08-13 17:28:16 +0000256 %cmp2 = fcmp fast oge float 56., %cond1
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000257 %cond2 = select i1 %cmp2, float 56., float %cond1
258 ret float %cond2
259}
260
261define float @fp-armv8_vmaxnm_NNNo_rev(float %a) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000262; CHECK-LABEL: "fp-armv8_vmaxnm_NNNo_rev":
263; CHECK: vmaxnm.f32
James Molloy6f0a9d72015-08-13 17:28:16 +0000264; CHECK: vmaxnm.f32
265 %cmp1 = fcmp fast olt float %a, 56.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000266 %cond1 = select i1 %cmp1, float 56., float %a
James Molloy6f0a9d72015-08-13 17:28:16 +0000267 %cmp2 = fcmp fast olt float 78., %cond1
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000268 %cond2 = select i1 %cmp2, float %cond1, float 78.
269 ret float %cond2
270}
271
272define float @fp-armv8_vmaxnm_NNNole_rev(float %a) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000273; CHECK-LABEL: "fp-armv8_vmaxnm_NNNole_rev":
274; CHECK: vmaxnm.f32
James Molloy6f0a9d72015-08-13 17:28:16 +0000275; CHECK: vmaxnm.f32
276 %cmp1 = fcmp fast ole float %a, 78.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000277 %cond1 = select i1 %cmp1, float 78., float %a
James Molloy6f0a9d72015-08-13 17:28:16 +0000278 %cmp2 = fcmp fast ole float 90., %cond1
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000279 %cond2 = select i1 %cmp2, float %cond1, float 90.
280 ret float %cond2
281}
282
283define float @fp-armv8_vmaxnm_NNNu(float %b) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000284; CHECK-LABEL: "fp-armv8_vmaxnm_NNNu":
285; CHECK: vmaxnm.f32
James Molloy6f0a9d72015-08-13 17:28:16 +0000286; CHECK: vmaxnm.f32
287 %cmp1 = fcmp fast ugt float 12., %b
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000288 %cond1 = select i1 %cmp1, float 12., float %b
James Molloy6f0a9d72015-08-13 17:28:16 +0000289 %cmp2 = fcmp fast ugt float %cond1, 34.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000290 %cond2 = select i1 %cmp2, float %cond1, float 34.
291 ret float %cond2
292}
293
294define float @fp-armv8_vmaxnm_NNNuge(float %b) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000295; CHECK-LABEL: "fp-armv8_vmaxnm_NNNuge":
296; CHECK: vmaxnm.f32
James Molloy6f0a9d72015-08-13 17:28:16 +0000297; CHECK: vmaxnm.f32
298 %cmp1 = fcmp fast uge float 34., %b
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000299 %cond1 = select i1 %cmp1, float 34., float %b
James Molloy6f0a9d72015-08-13 17:28:16 +0000300 %cmp2 = fcmp fast uge float %cond1, 56.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000301 %cond2 = select i1 %cmp2, float %cond1, float 56.
302 ret float %cond2
303}
304
305define float @fp-armv8_vmaxnm_NNNu_rev(float %b) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000306; CHECK-LABEL: "fp-armv8_vmaxnm_NNNu_rev":
307; CHECK: vmaxnm.f32
James Molloy6f0a9d72015-08-13 17:28:16 +0000308; CHECK: vmaxnm.f32
309 %cmp1 = fcmp fast ult float 56., %b
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000310 %cond1 = select i1 %cmp1, float %b, float 56.
James Molloy6f0a9d72015-08-13 17:28:16 +0000311 %cmp2 = fcmp fast ult float %cond1, 78.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000312 %cond2 = select i1 %cmp2, float 78., float %cond1
313 ret float %cond2
314}
315
316define double @fp-armv8_vmaxnm_NNNule_rev( double %b) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000317; CHECK-LABEL: "fp-armv8_vmaxnm_NNNule_rev":
318; CHECK: vmaxnm.f64
James Molloy6f0a9d72015-08-13 17:28:16 +0000319; CHECK: vmaxnm.f64
320 %cmp1 = fcmp fast ule double 78., %b
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000321 %cond1 = select i1 %cmp1, double %b, double 78.
James Molloy6f0a9d72015-08-13 17:28:16 +0000322 %cmp2 = fcmp fast ule double %cond1, 90.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000323 %cond2 = select i1 %cmp2, double 90., double %cond1
324 ret double %cond2
325}
326
327define float @fp-armv8_vminmaxnm_0(float %a) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000328; CHECK-LABEL: "fp-armv8_vminmaxnm_0":
James Molloy6f0a9d72015-08-13 17:28:16 +0000329; CHECK-NOT: vcmp
330; CHECK: vminnm.f32
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000331; CHECK: vmaxnm.f32
James Molloy6f0a9d72015-08-13 17:28:16 +0000332 %cmp1 = fcmp fast olt float %a, 0.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000333 %cond1 = select i1 %cmp1, float %a, float 0.
James Molloy6f0a9d72015-08-13 17:28:16 +0000334 %cmp2 = fcmp fast ogt float %cond1, 0.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000335 %cond2 = select i1 %cmp2, float %cond1, float 0.
336 ret float %cond2
337}
338
339define float @fp-armv8_vminmaxnm_neg0(float %a) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000340; CHECK-LABEL: "fp-armv8_vminmaxnm_neg0":
James Molloy6f0a9d72015-08-13 17:28:16 +0000341; CHECK-NOT: vcmp
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000342; CHECK: vminnm.f32
James Molloy6f0a9d72015-08-13 17:28:16 +0000343; CHECK: vmaxnm.f32
344 %cmp1 = fcmp fast olt float %a, -0.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000345 %cond1 = select i1 %cmp1, float %a, float -0.
James Molloyef183392015-08-17 07:13:10 +0000346 %cmp2 = fcmp fast ugt float %cond1, -0.
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000347 %cond2 = select i1 %cmp2, float %cond1, float -0.
348 ret float %cond2
349}
350
351define float @fp-armv8_vminmaxnm_e_0(float %a) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000352; CHECK-LABEL: "fp-armv8_vminmaxnm_e_0":
James Molloy6f0a9d72015-08-13 17:28:16 +0000353; CHECK-NOT: vcmp
354; CHECK: vminnm.f32
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000355; CHECK: vmaxnm.f32
James Molloy6f0a9d72015-08-13 17:28:16 +0000356 %cmp1 = fcmp fast ule float 0., %a
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000357 %cond1 = select i1 %cmp1, float 0., float %a
James Molloy6f0a9d72015-08-13 17:28:16 +0000358 %cmp2 = fcmp fast uge float 0., %cond1
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000359 %cond2 = select i1 %cmp2, float 0., float %cond1
360 ret float %cond2
361}
362
363define float @fp-armv8_vminmaxnm_e_neg0(float %a) {
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000364; CHECK-LABEL: "fp-armv8_vminmaxnm_e_neg0":
James Molloy6f0a9d72015-08-13 17:28:16 +0000365; CHECK-NOT: vcmp
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000366; CHECK: vminnm.f32
James Molloy6f0a9d72015-08-13 17:28:16 +0000367; CHECK: vmaxnm.f32
368 %cmp1 = fcmp fast ule float -0., %a
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000369 %cond1 = select i1 %cmp1, float -0., float %a
James Molloy6f0a9d72015-08-13 17:28:16 +0000370 %cmp2 = fcmp fast oge float -0., %cond1
Artyom Skrobov3f8eae92015-05-06 11:44:10 +0000371 %cond2 = select i1 %cmp2, float -0., float %cond1
372 ret float %cond2
373}
Joey Goulye3dd6842013-08-23 12:01:13 +0000374
Joey Gouly8c25b9d2013-07-17 14:03:49 +0000375declare <4 x float> @llvm.arm.neon.vminnm.v4f32(<4 x float>, <4 x float>) nounwind readnone
376declare <2 x float> @llvm.arm.neon.vminnm.v2f32(<2 x float>, <2 x float>) nounwind readnone
377declare <4 x float> @llvm.arm.neon.vmaxnm.v4f32(<4 x float>, <4 x float>) nounwind readnone
378declare <2 x float> @llvm.arm.neon.vmaxnm.v2f32(<2 x float>, <2 x float>) nounwind readnone