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_fcmpgt
85 ; NONE: bl __aeabi_fcmpun
88 %1 = fcmp ugt float %a, %b
91 define i1 @cmp_f_uge(float %a, float %b) {
92 ; CHECK-LABEL: cmp_f_uge:
93 ; NONE: bl __aeabi_fcmpge
94 ; NONE: bl __aeabi_fcmpun
97 %1 = fcmp uge float %a, %b
100 define i1 @cmp_f_ult(float %a, float %b) {
101 ; CHECK-LABEL: cmp_f_ult:
102 ; NONE: bl __aeabi_fcmplt
103 ; NONE: bl __aeabi_fcmpun
106 %1 = fcmp ult float %a, %b
109 define i1 @cmp_f_ule(float %a, float %b) {
110 ; CHECK-LABEL: cmp_f_ule:
111 ; NONE: bl __aeabi_fcmple
112 ; NONE: bl __aeabi_fcmpun
115 %1 = fcmp ule float %a, %b
118 define i1 @cmp_f_une(float %a, float %b) {
119 ; CHECK-LABEL: cmp_f_une:
120 ; NONE: bl __aeabi_fcmpeq
123 %1 = fcmp une float %a, %b
126 define i1 @cmp_f_uno(float %a, float %b) {
127 ; CHECK-LABEL: cmp_f_uno:
128 ; NONE: bl __aeabi_fcmpun
131 %1 = fcmp uno float %a, %b
134 define i1 @cmp_f_true(float %a, float %b) {
135 ; CHECK-LABEL: cmp_f_true:
138 %1 = fcmp true float %a, %b
142 define i1 @cmp_d_false(double %a, double %b) {
143 ; CHECK-LABEL: cmp_d_false:
146 %1 = fcmp false double %a, %b
149 define i1 @cmp_d_oeq(double %a, double %b) {
150 ; CHECK-LABEL: cmp_d_oeq:
151 ; NONE: bl __aeabi_dcmpeq
152 ; SP: bl __aeabi_dcmpeq
155 %1 = fcmp oeq double %a, %b
158 define i1 @cmp_d_ogt(double %a, double %b) {
159 ; CHECK-LABEL: cmp_d_ogt:
160 ; NONE: bl __aeabi_dcmpgt
161 ; SP: bl __aeabi_dcmpgt
164 %1 = fcmp ogt double %a, %b
167 define i1 @cmp_d_oge(double %a, double %b) {
168 ; CHECK-LABEL: cmp_d_oge:
169 ; NONE: bl __aeabi_dcmpge
170 ; SP: bl __aeabi_dcmpge
173 %1 = fcmp oge double %a, %b
176 define i1 @cmp_d_olt(double %a, double %b) {
177 ; CHECK-LABEL: cmp_d_olt:
178 ; NONE: bl __aeabi_dcmplt
179 ; SP: bl __aeabi_dcmplt
182 %1 = fcmp olt double %a, %b
185 define i1 @cmp_d_ole(double %a, double %b) {
186 ; CHECK-LABEL: cmp_d_ole:
187 ; NONE: bl __aeabi_dcmple
188 ; SP: bl __aeabi_dcmple
191 %1 = fcmp ole double %a, %b
194 define i1 @cmp_d_one(double %a, double %b) {
195 ; CHECK-LABEL: cmp_d_one:
196 ; NONE: bl __aeabi_dcmpgt
197 ; NONE: bl __aeabi_dcmplt
198 ; SP: bl __aeabi_dcmpgt
199 ; SP: bl __aeabi_dcmplt
203 %1 = fcmp one double %a, %b
206 define i1 @cmp_d_ord(double %a, double %b) {
207 ; CHECK-LABEL: cmp_d_ord:
208 ; NONE: bl __aeabi_dcmpun
209 ; SP: bl __aeabi_dcmpun
212 %1 = fcmp ord double %a, %b
215 define i1 @cmp_d_ugt(double %a, double %b) {
216 ; CHECK-LABEL: cmp_d_ugt:
217 ; NONE: bl __aeabi_dcmpgt
218 ; NONE: bl __aeabi_dcmpun
219 ; SP: bl __aeabi_dcmpgt
220 ; SP: bl __aeabi_dcmpun
223 %1 = fcmp ugt double %a, %b
227 define i1 @cmp_d_ult(double %a, double %b) {
228 ; CHECK-LABEL: cmp_d_ult:
229 ; NONE: bl __aeabi_dcmplt
230 ; NONE: bl __aeabi_dcmpun
231 ; SP: bl __aeabi_dcmplt
232 ; SP: bl __aeabi_dcmpun
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_dcmpge
272 ; NONE: bl __aeabi_dcmpun
273 ; SP: bl __aeabi_dcmpge
274 ; SP: bl __aeabi_dcmpun
277 %1 = fcmp uge double %a, %b
281 define i1 @cmp_d_ule(double %a, double %b) {
282 ; CHECK-LABEL: cmp_d_ule:
283 ; NONE: bl __aeabi_dcmple
284 ; NONE: bl __aeabi_dcmpun
285 ; SP: bl __aeabi_dcmple
286 ; SP: bl __aeabi_dcmpun
289 %1 = fcmp ule double %a, %b
293 define i1 @cmp_d_une(double %a, double %b) {
294 ; CHECK-LABEL: cmp_d_une:
295 ; NONE: bl __aeabi_dcmpeq
296 ; SP: bl __aeabi_dcmpeq
299 %1 = fcmp une double %a, %b