1 ; RUN: llc < %s -mtriple=thumbv7-none-eabi -mcpu=cortex-m3 | FileCheck %s -check-prefix=CHECK -check-prefix=NONE
2 ; RUN: llc < %s -mtriple=thumbv7-none-eabihf -mcpu=cortex-m4 | FileCheck %s -check-prefix=CHECK -check-prefix=HARD -check-prefix=SP
3 ; RUN: llc < %s -mtriple=thumbv7-none-eabihf -mcpu=cortex-m7 | FileCheck %s -check-prefix=CHECK -check-prefix=HARD -check-prefix=DP
4 ; RUN: llc < %s -mtriple=thumbv7-none-eabihf -mcpu=cortex-a8 | FileCheck %s -check-prefix=CHECK -check-prefix=HARD -check-prefix=DP
8 define i1 @cmp_f_false(float %a, float %b) {
9 ; CHECK-LABEL: cmp_f_false:
12 %1 = fcmp false float %a, %b
15 define i1 @cmp_f_oeq(float %a, float %b) {
16 ; CHECK-LABEL: cmp_f_oeq:
17 ; NONE: bl __aeabi_fcmpeq
20 %1 = fcmp oeq float %a, %b
23 define i1 @cmp_f_ogt(float %a, float %b) {
24 ; CHECK-LABEL: cmp_f_ogt:
25 ; NONE: bl __aeabi_fcmpgt
28 %1 = fcmp ogt float %a, %b
31 define i1 @cmp_f_oge(float %a, float %b) {
32 ; CHECK-LABEL: cmp_f_oge:
33 ; NONE: bl __aeabi_fcmpge
36 %1 = fcmp oge float %a, %b
39 define i1 @cmp_f_olt(float %a, float %b) {
40 ; CHECK-LABEL: cmp_f_olt:
41 ; NONE: bl __aeabi_fcmplt
44 %1 = fcmp olt float %a, %b
47 define i1 @cmp_f_ole(float %a, float %b) {
48 ; CHECK-LABEL: cmp_f_ole:
49 ; NONE: bl __aeabi_fcmple
52 %1 = fcmp ole float %a, %b
55 define i1 @cmp_f_one(float %a, float %b) {
56 ; CHECK-LABEL: cmp_f_one:
57 ; NONE: bl __aeabi_fcmpgt
58 ; NONE: bl __aeabi_fcmplt
62 %1 = fcmp one float %a, %b
65 define i1 @cmp_f_ord(float %a, float %b) {
66 ; CHECK-LABEL: cmp_f_ord:
67 ; NONE: bl __aeabi_fcmpun
70 %1 = fcmp ord float %a, %b
72 }define i1 @cmp_f_ueq(float %a, float %b) {
73 ; CHECK-LABEL: cmp_f_ueq:
74 ; NONE: bl __aeabi_fcmpeq
75 ; NONE: bl __aeabi_fcmpun
79 %1 = fcmp ueq float %a, %b
82 define i1 @cmp_f_ugt(float %a, float %b) {
83 ; CHECK-LABEL: cmp_f_ugt:
84 ; NONE: bl __aeabi_fcmple
89 %1 = fcmp ugt float %a, %b
92 define i1 @cmp_f_uge(float %a, float %b) {
93 ; CHECK-LABEL: cmp_f_uge:
94 ; NONE: bl __aeabi_fcmplt
99 %1 = fcmp uge float %a, %b
102 define i1 @cmp_f_ult(float %a, float %b) {
103 ; CHECK-LABEL: cmp_f_ult:
104 ; NONE: bl __aeabi_fcmpge
109 %1 = fcmp ult float %a, %b
112 define i1 @cmp_f_ule(float %a, float %b) {
113 ; CHECK-LABEL: cmp_f_ule:
114 ; NONE: bl __aeabi_fcmpgt
119 %1 = fcmp ule float %a, %b
122 define i1 @cmp_f_une(float %a, float %b) {
123 ; CHECK-LABEL: cmp_f_une:
124 ; NONE: bl __aeabi_fcmpeq
127 %1 = fcmp une float %a, %b
130 define i1 @cmp_f_uno(float %a, float %b) {
131 ; CHECK-LABEL: cmp_f_uno:
132 ; NONE: bl __aeabi_fcmpun
135 %1 = fcmp uno float %a, %b
138 define i1 @cmp_f_true(float %a, float %b) {
139 ; CHECK-LABEL: cmp_f_true:
142 %1 = fcmp true float %a, %b
146 define i1 @cmp_d_false(double %a, double %b) {
147 ; CHECK-LABEL: cmp_d_false:
150 %1 = fcmp false double %a, %b
153 define i1 @cmp_d_oeq(double %a, double %b) {
154 ; CHECK-LABEL: cmp_d_oeq:
155 ; NONE: bl __aeabi_dcmpeq
156 ; SP: bl __aeabi_dcmpeq
159 %1 = fcmp oeq double %a, %b
162 define i1 @cmp_d_ogt(double %a, double %b) {
163 ; CHECK-LABEL: cmp_d_ogt:
164 ; NONE: bl __aeabi_dcmpgt
165 ; SP: bl __aeabi_dcmpgt
168 %1 = fcmp ogt double %a, %b
171 define i1 @cmp_d_oge(double %a, double %b) {
172 ; CHECK-LABEL: cmp_d_oge:
173 ; NONE: bl __aeabi_dcmpge
174 ; SP: bl __aeabi_dcmpge
177 %1 = fcmp oge double %a, %b
180 define i1 @cmp_d_olt(double %a, double %b) {
181 ; CHECK-LABEL: cmp_d_olt:
182 ; NONE: bl __aeabi_dcmplt
183 ; SP: bl __aeabi_dcmplt
186 %1 = fcmp olt double %a, %b
189 define i1 @cmp_d_ole(double %a, double %b) {
190 ; CHECK-LABEL: cmp_d_ole:
191 ; NONE: bl __aeabi_dcmple
192 ; SP: bl __aeabi_dcmple
195 %1 = fcmp ole double %a, %b
198 define i1 @cmp_d_one(double %a, double %b) {
199 ; CHECK-LABEL: cmp_d_one:
200 ; NONE: bl __aeabi_dcmpgt
201 ; NONE: bl __aeabi_dcmplt
202 ; SP: bl __aeabi_dcmpgt
203 ; SP: bl __aeabi_dcmplt
207 %1 = fcmp one double %a, %b
210 define i1 @cmp_d_ord(double %a, double %b) {
211 ; CHECK-LABEL: cmp_d_ord:
212 ; NONE: bl __aeabi_dcmpun
213 ; SP: bl __aeabi_dcmpun
216 %1 = fcmp ord double %a, %b
219 define i1 @cmp_d_ugt(double %a, double %b) {
220 ; CHECK-LABEL: cmp_d_ugt:
221 ; NONE: bl __aeabi_dcmple
222 ; SP: bl __aeabi_dcmple
225 %1 = fcmp ugt double %a, %b
229 define i1 @cmp_d_ult(double %a, double %b) {
230 ; CHECK-LABEL: cmp_d_ult:
231 ; NONE: bl __aeabi_dcmpge
232 ; SP: bl __aeabi_dcmpge
235 %1 = fcmp ult double %a, %b
240 define i1 @cmp_d_uno(double %a, double %b) {
241 ; CHECK-LABEL: cmp_d_uno:
242 ; NONE: bl __aeabi_dcmpun
243 ; SP: bl __aeabi_dcmpun
246 %1 = fcmp uno double %a, %b
249 define i1 @cmp_d_true(double %a, double %b) {
250 ; CHECK-LABEL: cmp_d_true:
253 %1 = fcmp true double %a, %b
256 define i1 @cmp_d_ueq(double %a, double %b) {
257 ; CHECK-LABEL: cmp_d_ueq:
258 ; NONE: bl __aeabi_dcmpeq
259 ; NONE: bl __aeabi_dcmpun
260 ; SP: bl __aeabi_dcmpeq
261 ; SP: bl __aeabi_dcmpun
265 %1 = fcmp ueq double %a, %b
269 define i1 @cmp_d_uge(double %a, double %b) {
270 ; CHECK-LABEL: cmp_d_uge:
271 ; NONE: bl __aeabi_dcmplt
272 ; SP: bl __aeabi_dcmplt
275 %1 = fcmp uge double %a, %b
279 define i1 @cmp_d_ule(double %a, double %b) {
280 ; CHECK-LABEL: cmp_d_ule:
281 ; NONE: bl __aeabi_dcmpgt
282 ; SP: bl __aeabi_dcmpgt
285 %1 = fcmp ule double %a, %b
289 define i1 @cmp_d_une(double %a, double %b) {
290 ; CHECK-LABEL: cmp_d_une:
291 ; NONE: bl __aeabi_dcmpeq
292 ; SP: bl __aeabi_dcmpeq
295 %1 = fcmp une double %a, %b