]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/AArch64/arm64-fast-isel-fcmp.ll
Vendor import of llvm RELEASE_350/final tag r216957 (effectively, 3.5.0 release):
[FreeBSD/FreeBSD.git] / test / CodeGen / AArch64 / arm64-fast-isel-fcmp.ll
1 ; RUN: llc < %s -O0 -fast-isel-abort -verify-machineinstrs -mtriple=arm64-apple-darwin | FileCheck %s
2
3 define zeroext i1 @fcmp_float1(float %a) nounwind ssp {
4 entry:
5 ; CHECK-LABEL: @fcmp_float1
6 ; CHECK: fcmp s0, #0.0
7 ; CHECK: cset w{{[0-9]+}}, ne
8   %cmp = fcmp une float %a, 0.000000e+00
9   ret i1 %cmp
10 }
11
12 define zeroext i1 @fcmp_float2(float %a, float %b) nounwind ssp {
13 entry:
14 ; CHECK-LABEL: @fcmp_float2
15 ; CHECK: fcmp s0, s1
16 ; CHECK: cset w{{[0-9]+}}, ne
17   %cmp = fcmp une float %a, %b
18   ret i1 %cmp
19 }
20
21 define zeroext i1 @fcmp_double1(double %a) nounwind ssp {
22 entry:
23 ; CHECK-LABEL: @fcmp_double1
24 ; CHECK: fcmp d0, #0.0
25 ; CHECK: cset w{{[0-9]+}}, ne
26   %cmp = fcmp une double %a, 0.000000e+00
27   ret i1 %cmp
28 }
29
30 define zeroext i1 @fcmp_double2(double %a, double %b) nounwind ssp {
31 entry:
32 ; CHECK-LABEL: @fcmp_double2
33 ; CHECK: fcmp d0, d1
34 ; CHECK: cset w{{[0-9]+}}, ne
35   %cmp = fcmp une double %a, %b
36   ret i1 %cmp
37 }
38
39 ; Check each fcmp condition
40 define float @fcmp_oeq(float %a, float %b) nounwind ssp {
41 ; CHECK-LABEL: @fcmp_oeq
42 ; CHECK: fcmp s0, s1
43 ; CHECK: cset w{{[0-9]+}}, eq
44   %cmp = fcmp oeq float %a, %b
45   %conv = uitofp i1 %cmp to float
46   ret float %conv
47 }
48
49 define float @fcmp_ogt(float %a, float %b) nounwind ssp {
50 ; CHECK-LABEL: @fcmp_ogt
51 ; CHECK: fcmp s0, s1
52 ; CHECK: cset w{{[0-9]+}}, gt
53   %cmp = fcmp ogt float %a, %b
54   %conv = uitofp i1 %cmp to float
55   ret float %conv
56 }
57
58 define float @fcmp_oge(float %a, float %b) nounwind ssp {
59 ; CHECK-LABEL: @fcmp_oge
60 ; CHECK: fcmp s0, s1
61 ; CHECK: cset w{{[0-9]+}}, ge
62   %cmp = fcmp oge float %a, %b
63   %conv = uitofp i1 %cmp to float
64   ret float %conv
65 }
66
67 define float @fcmp_olt(float %a, float %b) nounwind ssp {
68 ; CHECK-LABEL: @fcmp_olt
69 ; CHECK: fcmp s0, s1
70 ; CHECK: cset w{{[0-9]+}}, mi
71   %cmp = fcmp olt float %a, %b
72   %conv = uitofp i1 %cmp to float
73   ret float %conv
74 }
75
76 define float @fcmp_ole(float %a, float %b) nounwind ssp {
77 ; CHECK-LABEL: @fcmp_ole
78 ; CHECK: fcmp s0, s1
79 ; CHECK: cset w{{[0-9]+}}, ls
80   %cmp = fcmp ole float %a, %b
81   %conv = uitofp i1 %cmp to float
82   ret float %conv
83 }
84
85 define float @fcmp_ord(float %a, float %b) nounwind ssp {
86 ; CHECK-LABEL: @fcmp_ord
87 ; CHECK: fcmp s0, s1
88 ; CHECK: cset {{w[0-9]+}}, vc
89   %cmp = fcmp ord float %a, %b
90   %conv = uitofp i1 %cmp to float
91   ret float %conv
92 }
93
94 define float @fcmp_uno(float %a, float %b) nounwind ssp {
95 ; CHECK-LABEL: @fcmp_uno
96 ; CHECK: fcmp s0, s1
97 ; CHECK: cset {{w[0-9]+}}, vs
98   %cmp = fcmp uno float %a, %b
99   %conv = uitofp i1 %cmp to float
100   ret float %conv
101 }
102
103 define float @fcmp_ugt(float %a, float %b) nounwind ssp {
104 ; CHECK-LABEL: @fcmp_ugt
105 ; CHECK: fcmp s0, s1
106 ; CHECK: cset {{w[0-9]+}}, hi
107   %cmp = fcmp ugt float %a, %b
108   %conv = uitofp i1 %cmp to float
109   ret float %conv
110 }
111
112 define float @fcmp_uge(float %a, float %b) nounwind ssp {
113 ; CHECK-LABEL: @fcmp_uge
114 ; CHECK: fcmp s0, s1
115 ; CHECK: cset {{w[0-9]+}}, pl
116   %cmp = fcmp uge float %a, %b
117   %conv = uitofp i1 %cmp to float
118   ret float %conv
119 }
120
121 define float @fcmp_ult(float %a, float %b) nounwind ssp {
122 ; CHECK-LABEL: @fcmp_ult
123 ; CHECK: fcmp s0, s1
124 ; CHECK: cset {{w[0-9]+}}, lt
125   %cmp = fcmp ult float %a, %b
126   %conv = uitofp i1 %cmp to float
127   ret float %conv
128 }
129
130 define float @fcmp_ule(float %a, float %b) nounwind ssp {
131 ; CHECK-LABEL: @fcmp_ule
132 ; CHECK: fcmp s0, s1
133 ; CHECK: cset {{w[0-9]+}}, le
134   %cmp = fcmp ule float %a, %b
135   %conv = uitofp i1 %cmp to float
136   ret float %conv
137 }
138
139 define float @fcmp_une(float %a, float %b) nounwind ssp {
140 ; CHECK-LABEL: @fcmp_une
141 ; CHECK: fcmp s0, s1
142 ; CHECK: cset {{w[0-9]+}}, ne
143   %cmp = fcmp une float %a, %b
144   %conv = uitofp i1 %cmp to float
145   ret float %conv
146 }