[Instrumentation] Fix a warning
[llvm-project.git] / llvm / test / CodeGen / AArch64 / fp-intrinsics.ll
blobf2a14a9b73fa16e8d764abd56abdd698e19caefe
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc -mtriple=aarch64 %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD
3 ; RUN: llc -mtriple=aarch64 -global-isel=true -global-isel-abort=2 %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI
5 ; Check that constrained fp intrinsics are correctly lowered.
7 ; CHECK-GI:       warning: Instruction selection used fallback path for add_f32
8 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sub_f32
9 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for mul_f32
10 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for div_f32
11 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for frem_f32
12 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fma_f32
13 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptosi_i32_f32
14 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptoui_i32_f32
15 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptosi_i64_f32
16 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptoui_i64_f32
17 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_f32_i32
18 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_f32_i32
19 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_f32_i64
20 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_f32_i64
21 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_f32_i128
22 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_f32_i128
23 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrt_f32
24 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for powi_f32
25 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sin_f32
26 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for cos_f32
27 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for tan_f32
28 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for asin_f32
29 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for acos_f32
30 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for atan_f32
31 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for atan2_f32
32 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sinh_f32
33 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for cosh_f32
34 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for tanh_f32
35 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for pow_f32
36 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for log_f32
37 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for log10_f32
38 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for log2_f32
39 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for exp_f32
40 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for exp2_f32
41 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for rint_f32
42 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for nearbyint_f32
43 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for lrint_f32
44 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for llrint_f32
45 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for maxnum_f32
46 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for minnum_f32
47 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for maximum_f32
48 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for minimum_f32
49 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for ceil_f32
50 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for floor_f32
51 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for lround_f32
52 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for llround_f32
53 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for round_f32
54 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for roundeven_f32
55 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for trunc_f32
56 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_olt_f32
57 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ole_f32
58 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ogt_f32
59 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_oge_f32
60 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_oeq_f32
61 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_one_f32
62 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ult_f32
63 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ule_f32
64 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ugt_f32
65 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_uge_f32
66 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ueq_f32
67 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_une_f32
68 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_olt_f32
69 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ole_f32
70 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ogt_f32
71 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_oge_f32
72 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_oeq_f32
73 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_one_f32
74 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ult_f32
75 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ule_f32
76 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ugt_f32
77 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_uge_f32
78 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ueq_f32
79 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_une_f32
80 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for add_f64
81 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sub_f64
82 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for mul_f64
83 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for div_f64
84 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for frem_f64
85 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fma_f64
86 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptosi_i32_f64
87 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptoui_i32_f64
88 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptosi_i64_f64
89 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptoui_i64_f64
90 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_f64_i32
91 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_f64_i32
92 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_f64_i64
93 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_f64_i64
94 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_f64_i128
95 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_f64_i128
96 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrt_f64
97 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for powi_f64
98 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sin_f64
99 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for cos_f64
100 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for tan_f64
101 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for asin_f64
102 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for acos_f64
103 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for atan_f64
104 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for atan2_f64
105 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sinh_f64
106 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for cosh_f64
107 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for tanh_f64
108 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for pow_f64
109 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for log_f64
110 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for log10_f64
111 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for log2_f64
112 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for exp_f64
113 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for exp2_f64
114 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for rint_f64
115 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for nearbyint_f64
116 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for lrint_f64
117 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for llrint_f64
118 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for maxnum_f64
119 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for minnum_f64
120 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for maximum_f64
121 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for minimum_f64
122 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for ceil_f64
123 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for floor_f64
124 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for lround_f64
125 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for llround_f64
126 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for round_f64
127 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for roundeven_f64
128 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for trunc_f64
129 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_olt_f64
130 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ole_f64
131 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ogt_f64
132 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_oge_f64
133 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_oeq_f64
134 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_one_f64
135 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ult_f64
136 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ule_f64
137 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ugt_f64
138 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_uge_f64
139 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ueq_f64
140 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_une_f64
141 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_olt_f64
142 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ole_f64
143 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ogt_f64
144 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_oge_f64
145 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_oeq_f64
146 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_one_f64
147 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ult_f64
148 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ule_f64
149 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ugt_f64
150 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_uge_f64
151 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ueq_f64
152 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_une_f64
153 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for add_f128
154 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sub_f128
155 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for mul_f128
156 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for div_f128
157 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for frem_f128
158 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fma_f128
159 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptosi_i32_f128
160 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptoui_i32_f128
161 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptosi_i64_f128
162 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptoui_i64_f128
163 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_f128_i32
164 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_f128_i32
165 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_f128_i64
166 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_f128_i64
167 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sitofp_f128_i128
168 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uitofp_f128_i128
169 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrt_f128
170 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for powi_f128
171 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sin_f128
172 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for cos_f128
173 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for tan_f128
174 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for asin_f128
175 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for acos_f128
176 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for atan_f128
177 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for atan2_f128
178 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sinh_f128
179 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for cosh_f128
180 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for tanh_f128
181 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for pow_f128
182 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for log_f128
183 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for log10_f128
184 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for log2_f128
185 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for exp_f128
186 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for exp2_f128
187 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for rint_f128
188 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for nearbyint_f128
189 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for lrint_f128
190 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for llrint_f128
191 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for maxnum_f128
192 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for minnum_f128
193 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for ceil_f128
194 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for floor_f128
195 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for lround_f128
196 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for llround_f128
197 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for round_f128
198 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for trunc_f128
199 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_olt_f128
200 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ole_f128
201 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ogt_f128
202 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_oge_f128
203 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_oeq_f128
204 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_one_f128
205 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ult_f128
206 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ule_f128
207 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ugt_f128
208 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_uge_f128
209 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_ueq_f128
210 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmp_une_f128
211 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_olt_f128
212 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ole_f128
213 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ogt_f128
214 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_oge_f128
215 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_oeq_f128
216 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_one_f128
217 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ult_f128
218 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ule_f128
219 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ugt_f128
220 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_uge_f128
221 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_ueq_f128
222 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fcmps_une_f128
223 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptrunc_f32_f64
224 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptrunc_f32_f128
225 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fptrunc_f64_f128
226 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fpext_f64_f32
227 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fpext_f128_f32
228 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for fpext_f128_f64
229 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sin_v1f64
230 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for cos_v1f64
231 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for tan_v1f64
232 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for asin_v1f64
233 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for acos_v1f64
234 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for atan_v1f64
235 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for atan2_v1f64
236 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sinh_v1f64
237 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for cosh_v1f64
238 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for tanh_v1f64
239 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for pow_v1f64
240 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for log_v1f64
241 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for log2_v1f64
242 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for log10_v1f64
243 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for exp_v1f64
244 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for exp2_v1f64
247 ; Single-precision intrinsics
249 define float @add_f32(float %x, float %y) #0 {
250 ; CHECK-LABEL: add_f32:
251 ; CHECK:       // %bb.0:
252 ; CHECK-NEXT:    fadd s0, s0, s1
253 ; CHECK-NEXT:    ret
254   %val = call float @llvm.experimental.constrained.fadd.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
255   ret float %val
258 define float @sub_f32(float %x, float %y) #0 {
259 ; CHECK-LABEL: sub_f32:
260 ; CHECK:       // %bb.0:
261 ; CHECK-NEXT:    fsub s0, s0, s1
262 ; CHECK-NEXT:    ret
263   %val = call float @llvm.experimental.constrained.fsub.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
264   ret float %val
267 define float @mul_f32(float %x, float %y) #0 {
268 ; CHECK-LABEL: mul_f32:
269 ; CHECK:       // %bb.0:
270 ; CHECK-NEXT:    fmul s0, s0, s1
271 ; CHECK-NEXT:    ret
272   %val = call float @llvm.experimental.constrained.fmul.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
273   ret float %val
276 define float @div_f32(float %x, float %y) #0 {
277 ; CHECK-LABEL: div_f32:
278 ; CHECK:       // %bb.0:
279 ; CHECK-NEXT:    fdiv s0, s0, s1
280 ; CHECK-NEXT:    ret
281   %val = call float @llvm.experimental.constrained.fdiv.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
282   ret float %val
285 define float @frem_f32(float %x, float %y) #0 {
286 ; CHECK-LABEL: frem_f32:
287 ; CHECK:       // %bb.0:
288 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
289 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
290 ; CHECK-NEXT:    .cfi_offset w30, -16
291 ; CHECK-NEXT:    bl fmodf
292 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
293 ; CHECK-NEXT:    ret
294   %val = call float @llvm.experimental.constrained.frem.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
295   ret float %val
298 define float @fma_f32(float %x, float %y, float %z) #0 {
299 ; CHECK-LABEL: fma_f32:
300 ; CHECK:       // %bb.0:
301 ; CHECK-NEXT:    fmadd s0, s0, s1, s2
302 ; CHECK-NEXT:    ret
303   %val = call float @llvm.experimental.constrained.fma.f32(float %x, float %y, float %z, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
304   ret float %val
307 define i32 @fptosi_i32_f32(float %x) #0 {
308 ; CHECK-LABEL: fptosi_i32_f32:
309 ; CHECK:       // %bb.0:
310 ; CHECK-NEXT:    fcvtzs w0, s0
311 ; CHECK-NEXT:    ret
312   %val = call i32 @llvm.experimental.constrained.fptosi.i32.f32(float %x, metadata !"fpexcept.strict") #0
313   ret i32 %val
316 define i32 @fptoui_i32_f32(float %x) #0 {
317 ; CHECK-LABEL: fptoui_i32_f32:
318 ; CHECK:       // %bb.0:
319 ; CHECK-NEXT:    fcvtzu w0, s0
320 ; CHECK-NEXT:    ret
321   %val = call i32 @llvm.experimental.constrained.fptoui.i32.f32(float %x, metadata !"fpexcept.strict") #0
322   ret i32 %val
325 define i64 @fptosi_i64_f32(float %x) #0 {
326 ; CHECK-LABEL: fptosi_i64_f32:
327 ; CHECK:       // %bb.0:
328 ; CHECK-NEXT:    fcvtzs x0, s0
329 ; CHECK-NEXT:    ret
330   %val = call i64 @llvm.experimental.constrained.fptosi.i64.f32(float %x, metadata !"fpexcept.strict") #0
331   ret i64 %val
334 define i64 @fptoui_i64_f32(float %x) #0 {
335 ; CHECK-LABEL: fptoui_i64_f32:
336 ; CHECK:       // %bb.0:
337 ; CHECK-NEXT:    fcvtzu x0, s0
338 ; CHECK-NEXT:    ret
339   %val = call i64 @llvm.experimental.constrained.fptoui.i64.f32(float %x, metadata !"fpexcept.strict") #0
340   ret i64 %val
343 define float @sitofp_f32_i32(i32 %x) #0 {
344 ; CHECK-LABEL: sitofp_f32_i32:
345 ; CHECK:       // %bb.0:
346 ; CHECK-NEXT:    scvtf s0, w0
347 ; CHECK-NEXT:    ret
348   %val = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
349   ret float %val
352 define float @uitofp_f32_i32(i32 %x) #0 {
353 ; CHECK-LABEL: uitofp_f32_i32:
354 ; CHECK:       // %bb.0:
355 ; CHECK-NEXT:    ucvtf s0, w0
356 ; CHECK-NEXT:    ret
357   %val = call float @llvm.experimental.constrained.uitofp.f32.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
358   ret float %val
361 define float @sitofp_f32_i64(i64 %x) #0 {
362 ; CHECK-LABEL: sitofp_f32_i64:
363 ; CHECK:       // %bb.0:
364 ; CHECK-NEXT:    scvtf s0, x0
365 ; CHECK-NEXT:    ret
366   %val = call float @llvm.experimental.constrained.sitofp.f32.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
367   ret float %val
370 define float @uitofp_f32_i64(i64 %x) #0 {
371 ; CHECK-LABEL: uitofp_f32_i64:
372 ; CHECK:       // %bb.0:
373 ; CHECK-NEXT:    ucvtf s0, x0
374 ; CHECK-NEXT:    ret
375   %val = call float @llvm.experimental.constrained.uitofp.f32.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
376   ret float %val
379 define float @sitofp_f32_i128(i128 %x) #0 {
380 ; CHECK-LABEL: sitofp_f32_i128:
381 ; CHECK:       // %bb.0:
382 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
383 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
384 ; CHECK-NEXT:    .cfi_offset w30, -16
385 ; CHECK-NEXT:    bl __floattisf
386 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
387 ; CHECK-NEXT:    ret
388   %val = call float @llvm.experimental.constrained.sitofp.f32.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
389   ret float %val
392 define float @uitofp_f32_i128(i128 %x) #0 {
393 ; CHECK-LABEL: uitofp_f32_i128:
394 ; CHECK:       // %bb.0:
395 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
396 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
397 ; CHECK-NEXT:    .cfi_offset w30, -16
398 ; CHECK-NEXT:    bl __floatuntisf
399 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
400 ; CHECK-NEXT:    ret
401   %val = call float @llvm.experimental.constrained.uitofp.f32.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
402   ret float %val
405 define float @sqrt_f32(float %x) #0 {
406 ; CHECK-LABEL: sqrt_f32:
407 ; CHECK:       // %bb.0:
408 ; CHECK-NEXT:    fsqrt s0, s0
409 ; CHECK-NEXT:    ret
410   %val = call float @llvm.experimental.constrained.sqrt.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
411   ret float %val
414 define float @powi_f32(float %x, i32 %y) #0 {
415 ; CHECK-LABEL: powi_f32:
416 ; CHECK:       // %bb.0:
417 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
418 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
419 ; CHECK-NEXT:    .cfi_offset w30, -16
420 ; CHECK-NEXT:    bl __powisf2
421 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
422 ; CHECK-NEXT:    ret
423   %val = call float @llvm.experimental.constrained.powi.f32(float %x, i32 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
424   ret float %val
427 define float @sin_f32(float %x) #0 {
428 ; CHECK-LABEL: sin_f32:
429 ; CHECK:       // %bb.0:
430 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
431 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
432 ; CHECK-NEXT:    .cfi_offset w30, -16
433 ; CHECK-NEXT:    bl sinf
434 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
435 ; CHECK-NEXT:    ret
436   %val = call float @llvm.experimental.constrained.sin.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
437   ret float %val
440 define float @cos_f32(float %x) #0 {
441 ; CHECK-LABEL: cos_f32:
442 ; CHECK:       // %bb.0:
443 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
444 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
445 ; CHECK-NEXT:    .cfi_offset w30, -16
446 ; CHECK-NEXT:    bl cosf
447 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
448 ; CHECK-NEXT:    ret
449   %val = call float @llvm.experimental.constrained.cos.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
450   ret float %val
453 define float @tan_f32(float %x) #0 {
454 ; CHECK-LABEL: tan_f32:
455 ; CHECK:       // %bb.0:
456 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
457 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
458 ; CHECK-NEXT:    .cfi_offset w30, -16
459 ; CHECK-NEXT:    bl tanf
460 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
461 ; CHECK-NEXT:    ret
462   %val = call float @llvm.experimental.constrained.tan.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
463   ret float %val
466 define float @asin_f32(float %x) #0 {
467 ; CHECK-LABEL: asin_f32:
468 ; CHECK:       // %bb.0:
469 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
470 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
471 ; CHECK-NEXT:    .cfi_offset w30, -16
472 ; CHECK-NEXT:    bl asinf
473 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
474 ; CHECK-NEXT:    ret
475   %val = call float @llvm.experimental.constrained.asin.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
476   ret float %val
479 define float @acos_f32(float %x) #0 {
480 ; CHECK-LABEL: acos_f32:
481 ; CHECK:       // %bb.0:
482 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
483 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
484 ; CHECK-NEXT:    .cfi_offset w30, -16
485 ; CHECK-NEXT:    bl acosf
486 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
487 ; CHECK-NEXT:    ret
488   %val = call float @llvm.experimental.constrained.acos.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
489   ret float %val
492 define float @atan_f32(float %x) #0 {
493 ; CHECK-LABEL: atan_f32:
494 ; CHECK:       // %bb.0:
495 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
496 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
497 ; CHECK-NEXT:    .cfi_offset w30, -16
498 ; CHECK-NEXT:    bl atanf
499 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
500 ; CHECK-NEXT:    ret
501   %val = call float @llvm.experimental.constrained.atan.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
502   ret float %val
505 define float @atan2_f32(float %x, float %y) #0 {
506 ; CHECK-LABEL: atan2_f32:
507 ; CHECK:       // %bb.0:
508 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
509 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
510 ; CHECK-NEXT:    .cfi_offset w30, -16
511 ; CHECK-NEXT:    bl atan2f
512 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
513 ; CHECK-NEXT:    ret
514   %val = call float @llvm.experimental.constrained.atan2.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
515   ret float %val
518 define float @sinh_f32(float %x) #0 {
519 ; CHECK-LABEL: sinh_f32:
520 ; CHECK:       // %bb.0:
521 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
522 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
523 ; CHECK-NEXT:    .cfi_offset w30, -16
524 ; CHECK-NEXT:    bl sinhf
525 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
526 ; CHECK-NEXT:    ret
527   %val = call float @llvm.experimental.constrained.sinh.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
528   ret float %val
531 define float @cosh_f32(float %x) #0 {
532 ; CHECK-LABEL: cosh_f32:
533 ; CHECK:       // %bb.0:
534 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
535 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
536 ; CHECK-NEXT:    .cfi_offset w30, -16
537 ; CHECK-NEXT:    bl coshf
538 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
539 ; CHECK-NEXT:    ret
540   %val = call float @llvm.experimental.constrained.cosh.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
541   ret float %val
544 define float @tanh_f32(float %x) #0 {
545 ; CHECK-LABEL: tanh_f32:
546 ; CHECK:       // %bb.0:
547 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
548 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
549 ; CHECK-NEXT:    .cfi_offset w30, -16
550 ; CHECK-NEXT:    bl tanhf
551 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
552 ; CHECK-NEXT:    ret
553   %val = call float @llvm.experimental.constrained.tanh.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
554   ret float %val
557 define float @pow_f32(float %x, float %y) #0 {
558 ; CHECK-LABEL: pow_f32:
559 ; CHECK:       // %bb.0:
560 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
561 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
562 ; CHECK-NEXT:    .cfi_offset w30, -16
563 ; CHECK-NEXT:    bl powf
564 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
565 ; CHECK-NEXT:    ret
566   %val = call float @llvm.experimental.constrained.pow.f32(float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
567   ret float %val
570 define float @log_f32(float %x) #0 {
571 ; CHECK-LABEL: log_f32:
572 ; CHECK:       // %bb.0:
573 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
574 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
575 ; CHECK-NEXT:    .cfi_offset w30, -16
576 ; CHECK-NEXT:    bl logf
577 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
578 ; CHECK-NEXT:    ret
579   %val = call float @llvm.experimental.constrained.log.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
580   ret float %val
583 define float @log10_f32(float %x) #0 {
584 ; CHECK-LABEL: log10_f32:
585 ; CHECK:       // %bb.0:
586 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
587 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
588 ; CHECK-NEXT:    .cfi_offset w30, -16
589 ; CHECK-NEXT:    bl log10f
590 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
591 ; CHECK-NEXT:    ret
592   %val = call float @llvm.experimental.constrained.log10.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
593   ret float %val
596 define float @log2_f32(float %x) #0 {
597 ; CHECK-LABEL: log2_f32:
598 ; CHECK:       // %bb.0:
599 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
600 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
601 ; CHECK-NEXT:    .cfi_offset w30, -16
602 ; CHECK-NEXT:    bl log2f
603 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
604 ; CHECK-NEXT:    ret
605   %val = call float @llvm.experimental.constrained.log2.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
606   ret float %val
609 define float @exp_f32(float %x) #0 {
610 ; CHECK-LABEL: exp_f32:
611 ; CHECK:       // %bb.0:
612 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
613 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
614 ; CHECK-NEXT:    .cfi_offset w30, -16
615 ; CHECK-NEXT:    bl expf
616 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
617 ; CHECK-NEXT:    ret
618   %val = call float @llvm.experimental.constrained.exp.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
619   ret float %val
622 define float @exp2_f32(float %x) #0 {
623 ; CHECK-LABEL: exp2_f32:
624 ; CHECK:       // %bb.0:
625 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
626 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
627 ; CHECK-NEXT:    .cfi_offset w30, -16
628 ; CHECK-NEXT:    bl exp2f
629 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
630 ; CHECK-NEXT:    ret
631   %val = call float @llvm.experimental.constrained.exp2.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
632   ret float %val
635 define float @rint_f32(float %x) #0 {
636 ; CHECK-LABEL: rint_f32:
637 ; CHECK:       // %bb.0:
638 ; CHECK-NEXT:    frintx s0, s0
639 ; CHECK-NEXT:    ret
640   %val = call float @llvm.experimental.constrained.rint.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
641   ret float %val
644 define float @nearbyint_f32(float %x) #0 {
645 ; CHECK-LABEL: nearbyint_f32:
646 ; CHECK:       // %bb.0:
647 ; CHECK-NEXT:    frinti s0, s0
648 ; CHECK-NEXT:    ret
649   %val = call float @llvm.experimental.constrained.nearbyint.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
650   ret float %val
653 define i32 @lrint_f32(float %x) #0 {
654 ; CHECK-LABEL: lrint_f32:
655 ; CHECK:       // %bb.0:
656 ; CHECK-NEXT:    frintx s0, s0
657 ; CHECK-NEXT:    fcvtzs w0, s0
658 ; CHECK-NEXT:    ret
659   %val = call i32 @llvm.experimental.constrained.lrint.i32.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
660   ret i32 %val
663 define i64 @llrint_f32(float %x) #0 {
664 ; CHECK-LABEL: llrint_f32:
665 ; CHECK:       // %bb.0:
666 ; CHECK-NEXT:    frintx s0, s0
667 ; CHECK-NEXT:    fcvtzs x0, s0
668 ; CHECK-NEXT:    ret
669   %val = call i64 @llvm.experimental.constrained.llrint.i64.f32(float %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
670   ret i64 %val
673 define float @maxnum_f32(float %x, float %y) #0 {
674 ; CHECK-LABEL: maxnum_f32:
675 ; CHECK:       // %bb.0:
676 ; CHECK-NEXT:    fmaxnm s0, s0, s1
677 ; CHECK-NEXT:    ret
678   %val = call float @llvm.experimental.constrained.maxnum.f32(float %x, float %y, metadata !"fpexcept.strict") #0
679   ret float %val
682 define float @minnum_f32(float %x, float %y) #0 {
683 ; CHECK-LABEL: minnum_f32:
684 ; CHECK:       // %bb.0:
685 ; CHECK-NEXT:    fminnm s0, s0, s1
686 ; CHECK-NEXT:    ret
687   %val = call float @llvm.experimental.constrained.minnum.f32(float %x, float %y, metadata !"fpexcept.strict") #0
688   ret float %val
691 define float @maximum_f32(float %x, float %y) #0 {
692 ; CHECK-LABEL: maximum_f32:
693 ; CHECK:       // %bb.0:
694 ; CHECK-NEXT:    fmax s0, s0, s1
695 ; CHECK-NEXT:    ret
696   %val = call float @llvm.experimental.constrained.maximum.f32(float %x, float %y, metadata !"fpexcept.strict") #0
697   ret float %val
700 define float @minimum_f32(float %x, float %y) #0 {
701 ; CHECK-LABEL: minimum_f32:
702 ; CHECK:       // %bb.0:
703 ; CHECK-NEXT:    fmin s0, s0, s1
704 ; CHECK-NEXT:    ret
705   %val = call float @llvm.experimental.constrained.minimum.f32(float %x, float %y, metadata !"fpexcept.strict") #0
706   ret float %val
709 define float @ceil_f32(float %x) #0 {
710 ; CHECK-LABEL: ceil_f32:
711 ; CHECK:       // %bb.0:
712 ; CHECK-NEXT:    frintp s0, s0
713 ; CHECK-NEXT:    ret
714   %val = call float @llvm.experimental.constrained.ceil.f32(float %x, metadata !"fpexcept.strict") #0
715   ret float %val
718 define float @floor_f32(float %x) #0 {
719 ; CHECK-LABEL: floor_f32:
720 ; CHECK:       // %bb.0:
721 ; CHECK-NEXT:    frintm s0, s0
722 ; CHECK-NEXT:    ret
723   %val = call float @llvm.experimental.constrained.floor.f32(float %x, metadata !"fpexcept.strict") #0
724   ret float %val
727 define i32 @lround_f32(float %x) #0 {
728 ; CHECK-LABEL: lround_f32:
729 ; CHECK:       // %bb.0:
730 ; CHECK-NEXT:    fcvtas w0, s0
731 ; CHECK-NEXT:    ret
732   %val = call i32 @llvm.experimental.constrained.lround.i32.f32(float %x, metadata !"fpexcept.strict") #0
733   ret i32 %val
736 define i64 @llround_f32(float %x) #0 {
737 ; CHECK-LABEL: llround_f32:
738 ; CHECK:       // %bb.0:
739 ; CHECK-NEXT:    fcvtas x0, s0
740 ; CHECK-NEXT:    ret
741   %val = call i64 @llvm.experimental.constrained.llround.i64.f32(float %x, metadata !"fpexcept.strict") #0
742   ret i64 %val
745 define float @round_f32(float %x) #0 {
746 ; CHECK-LABEL: round_f32:
747 ; CHECK:       // %bb.0:
748 ; CHECK-NEXT:    frinta s0, s0
749 ; CHECK-NEXT:    ret
750   %val = call float @llvm.experimental.constrained.round.f32(float %x, metadata !"fpexcept.strict") #0
751   ret float %val
754 define float @roundeven_f32(float %x) #0 {
755 ; CHECK-LABEL: roundeven_f32:
756 ; CHECK:       // %bb.0:
757 ; CHECK-NEXT:    frintn s0, s0
758 ; CHECK-NEXT:    ret
759   %val = call float @llvm.experimental.constrained.roundeven.f32(float %x, metadata !"fpexcept.strict") #0
760   ret float %val
763 define float @trunc_f32(float %x) #0 {
764 ; CHECK-LABEL: trunc_f32:
765 ; CHECK:       // %bb.0:
766 ; CHECK-NEXT:    frintz s0, s0
767 ; CHECK-NEXT:    ret
768   %val = call float @llvm.experimental.constrained.trunc.f32(float %x, metadata !"fpexcept.strict") #0
769   ret float %val
772 define i32 @fcmp_olt_f32(float %a, float %b) #0 {
773 ; CHECK-LABEL: fcmp_olt_f32:
774 ; CHECK:       // %bb.0:
775 ; CHECK-NEXT:    fcmp s0, s1
776 ; CHECK-NEXT:    cset w0, mi
777 ; CHECK-NEXT:    ret
778   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"olt", metadata !"fpexcept.strict") #0
779   %conv = zext i1 %cmp to i32
780   ret i32 %conv
783 define i32 @fcmp_ole_f32(float %a, float %b) #0 {
784 ; CHECK-LABEL: fcmp_ole_f32:
785 ; CHECK:       // %bb.0:
786 ; CHECK-NEXT:    fcmp s0, s1
787 ; CHECK-NEXT:    cset w0, ls
788 ; CHECK-NEXT:    ret
789   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ole", metadata !"fpexcept.strict") #0
790   %conv = zext i1 %cmp to i32
791   ret i32 %conv
794 define i32 @fcmp_ogt_f32(float %a, float %b) #0 {
795 ; CHECK-LABEL: fcmp_ogt_f32:
796 ; CHECK:       // %bb.0:
797 ; CHECK-NEXT:    fcmp s0, s1
798 ; CHECK-NEXT:    cset w0, gt
799 ; CHECK-NEXT:    ret
800   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ogt", metadata !"fpexcept.strict") #0
801   %conv = zext i1 %cmp to i32
802   ret i32 %conv
805 define i32 @fcmp_oge_f32(float %a, float %b) #0 {
806 ; CHECK-LABEL: fcmp_oge_f32:
807 ; CHECK:       // %bb.0:
808 ; CHECK-NEXT:    fcmp s0, s1
809 ; CHECK-NEXT:    cset w0, ge
810 ; CHECK-NEXT:    ret
811   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"oge", metadata !"fpexcept.strict") #0
812   %conv = zext i1 %cmp to i32
813   ret i32 %conv
816 define i32 @fcmp_oeq_f32(float %a, float %b) #0 {
817 ; CHECK-LABEL: fcmp_oeq_f32:
818 ; CHECK:       // %bb.0:
819 ; CHECK-NEXT:    fcmp s0, s1
820 ; CHECK-NEXT:    cset w0, eq
821 ; CHECK-NEXT:    ret
822   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"oeq", metadata !"fpexcept.strict") #0
823   %conv = zext i1 %cmp to i32
824   ret i32 %conv
827 define i32 @fcmp_one_f32(float %a, float %b) #0 {
828 ; CHECK-LABEL: fcmp_one_f32:
829 ; CHECK:       // %bb.0:
830 ; CHECK-NEXT:    fcmp s0, s1
831 ; CHECK-NEXT:    cset w8, mi
832 ; CHECK-NEXT:    csinc w0, w8, wzr, le
833 ; CHECK-NEXT:    ret
834   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"one", metadata !"fpexcept.strict") #0
835   %conv = zext i1 %cmp to i32
836   ret i32 %conv
839 define i32 @fcmp_ult_f32(float %a, float %b) #0 {
840 ; CHECK-LABEL: fcmp_ult_f32:
841 ; CHECK:       // %bb.0:
842 ; CHECK-NEXT:    fcmp s0, s1
843 ; CHECK-NEXT:    cset w0, lt
844 ; CHECK-NEXT:    ret
845   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ult", metadata !"fpexcept.strict") #0
846   %conv = zext i1 %cmp to i32
847   ret i32 %conv
850 define i32 @fcmp_ule_f32(float %a, float %b) #0 {
851 ; CHECK-LABEL: fcmp_ule_f32:
852 ; CHECK:       // %bb.0:
853 ; CHECK-NEXT:    fcmp s0, s1
854 ; CHECK-NEXT:    cset w0, le
855 ; CHECK-NEXT:    ret
856   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ule", metadata !"fpexcept.strict") #0
857   %conv = zext i1 %cmp to i32
858   ret i32 %conv
861 define i32 @fcmp_ugt_f32(float %a, float %b) #0 {
862 ; CHECK-LABEL: fcmp_ugt_f32:
863 ; CHECK:       // %bb.0:
864 ; CHECK-NEXT:    fcmp s0, s1
865 ; CHECK-NEXT:    cset w0, hi
866 ; CHECK-NEXT:    ret
867   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ugt", metadata !"fpexcept.strict") #0
868   %conv = zext i1 %cmp to i32
869   ret i32 %conv
872 define i32 @fcmp_uge_f32(float %a, float %b) #0 {
873 ; CHECK-LABEL: fcmp_uge_f32:
874 ; CHECK:       // %bb.0:
875 ; CHECK-NEXT:    fcmp s0, s1
876 ; CHECK-NEXT:    cset w0, pl
877 ; CHECK-NEXT:    ret
878   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"uge", metadata !"fpexcept.strict") #0
879   %conv = zext i1 %cmp to i32
880   ret i32 %conv
883 define i32 @fcmp_ueq_f32(float %a, float %b) #0 {
884 ; CHECK-LABEL: fcmp_ueq_f32:
885 ; CHECK:       // %bb.0:
886 ; CHECK-NEXT:    fcmp s0, s1
887 ; CHECK-NEXT:    cset w8, eq
888 ; CHECK-NEXT:    csinc w0, w8, wzr, vc
889 ; CHECK-NEXT:    ret
890   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ueq", metadata !"fpexcept.strict") #0
891   %conv = zext i1 %cmp to i32
892   ret i32 %conv
895 define i32 @fcmp_une_f32(float %a, float %b) #0 {
896 ; CHECK-LABEL: fcmp_une_f32:
897 ; CHECK:       // %bb.0:
898 ; CHECK-NEXT:    fcmp s0, s1
899 ; CHECK-NEXT:    cset w0, ne
900 ; CHECK-NEXT:    ret
901   %cmp = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"une", metadata !"fpexcept.strict") #0
902   %conv = zext i1 %cmp to i32
903   ret i32 %conv
906 define i32 @fcmps_olt_f32(float %a, float %b) #0 {
907 ; CHECK-LABEL: fcmps_olt_f32:
908 ; CHECK:       // %bb.0:
909 ; CHECK-NEXT:    fcmpe s0, s1
910 ; CHECK-NEXT:    cset w0, mi
911 ; CHECK-NEXT:    ret
912   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"olt", metadata !"fpexcept.strict") #0
913   %conv = zext i1 %cmp to i32
914   ret i32 %conv
917 define i32 @fcmps_ole_f32(float %a, float %b) #0 {
918 ; CHECK-LABEL: fcmps_ole_f32:
919 ; CHECK:       // %bb.0:
920 ; CHECK-NEXT:    fcmpe s0, s1
921 ; CHECK-NEXT:    cset w0, ls
922 ; CHECK-NEXT:    ret
923   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ole", metadata !"fpexcept.strict") #0
924   %conv = zext i1 %cmp to i32
925   ret i32 %conv
928 define i32 @fcmps_ogt_f32(float %a, float %b) #0 {
929 ; CHECK-LABEL: fcmps_ogt_f32:
930 ; CHECK:       // %bb.0:
931 ; CHECK-NEXT:    fcmpe s0, s1
932 ; CHECK-NEXT:    cset w0, gt
933 ; CHECK-NEXT:    ret
934   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ogt", metadata !"fpexcept.strict") #0
935   %conv = zext i1 %cmp to i32
936   ret i32 %conv
939 define i32 @fcmps_oge_f32(float %a, float %b) #0 {
940 ; CHECK-LABEL: fcmps_oge_f32:
941 ; CHECK:       // %bb.0:
942 ; CHECK-NEXT:    fcmpe s0, s1
943 ; CHECK-NEXT:    cset w0, ge
944 ; CHECK-NEXT:    ret
945   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"oge", metadata !"fpexcept.strict") #0
946   %conv = zext i1 %cmp to i32
947   ret i32 %conv
950 define i32 @fcmps_oeq_f32(float %a, float %b) #0 {
951 ; CHECK-LABEL: fcmps_oeq_f32:
952 ; CHECK:       // %bb.0:
953 ; CHECK-NEXT:    fcmpe s0, s1
954 ; CHECK-NEXT:    cset w0, eq
955 ; CHECK-NEXT:    ret
956   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"oeq", metadata !"fpexcept.strict") #0
957   %conv = zext i1 %cmp to i32
958   ret i32 %conv
961 define i32 @fcmps_one_f32(float %a, float %b) #0 {
962 ; CHECK-LABEL: fcmps_one_f32:
963 ; CHECK:       // %bb.0:
964 ; CHECK-NEXT:    fcmpe s0, s1
965 ; CHECK-NEXT:    cset w8, mi
966 ; CHECK-NEXT:    csinc w0, w8, wzr, le
967 ; CHECK-NEXT:    ret
968   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"one", metadata !"fpexcept.strict") #0
969   %conv = zext i1 %cmp to i32
970   ret i32 %conv
973 define i32 @fcmps_ult_f32(float %a, float %b) #0 {
974 ; CHECK-LABEL: fcmps_ult_f32:
975 ; CHECK:       // %bb.0:
976 ; CHECK-NEXT:    fcmpe s0, s1
977 ; CHECK-NEXT:    cset w0, lt
978 ; CHECK-NEXT:    ret
979   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ult", metadata !"fpexcept.strict") #0
980   %conv = zext i1 %cmp to i32
981   ret i32 %conv
984 define i32 @fcmps_ule_f32(float %a, float %b) #0 {
985 ; CHECK-LABEL: fcmps_ule_f32:
986 ; CHECK:       // %bb.0:
987 ; CHECK-NEXT:    fcmpe s0, s1
988 ; CHECK-NEXT:    cset w0, le
989 ; CHECK-NEXT:    ret
990   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ule", metadata !"fpexcept.strict") #0
991   %conv = zext i1 %cmp to i32
992   ret i32 %conv
995 define i32 @fcmps_ugt_f32(float %a, float %b) #0 {
996 ; CHECK-LABEL: fcmps_ugt_f32:
997 ; CHECK:       // %bb.0:
998 ; CHECK-NEXT:    fcmpe s0, s1
999 ; CHECK-NEXT:    cset w0, hi
1000 ; CHECK-NEXT:    ret
1001   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ugt", metadata !"fpexcept.strict") #0
1002   %conv = zext i1 %cmp to i32
1003   ret i32 %conv
1006 define i32 @fcmps_uge_f32(float %a, float %b) #0 {
1007 ; CHECK-LABEL: fcmps_uge_f32:
1008 ; CHECK:       // %bb.0:
1009 ; CHECK-NEXT:    fcmpe s0, s1
1010 ; CHECK-NEXT:    cset w0, pl
1011 ; CHECK-NEXT:    ret
1012   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"uge", metadata !"fpexcept.strict") #0
1013   %conv = zext i1 %cmp to i32
1014   ret i32 %conv
1017 define i32 @fcmps_ueq_f32(float %a, float %b) #0 {
1018 ; CHECK-LABEL: fcmps_ueq_f32:
1019 ; CHECK:       // %bb.0:
1020 ; CHECK-NEXT:    fcmpe s0, s1
1021 ; CHECK-NEXT:    cset w8, eq
1022 ; CHECK-NEXT:    csinc w0, w8, wzr, vc
1023 ; CHECK-NEXT:    ret
1024   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"ueq", metadata !"fpexcept.strict") #0
1025   %conv = zext i1 %cmp to i32
1026   ret i32 %conv
1029 define i32 @fcmps_une_f32(float %a, float %b) #0 {
1030 ; CHECK-LABEL: fcmps_une_f32:
1031 ; CHECK:       // %bb.0:
1032 ; CHECK-NEXT:    fcmpe s0, s1
1033 ; CHECK-NEXT:    cset w0, ne
1034 ; CHECK-NEXT:    ret
1035   %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %a, float %b, metadata !"une", metadata !"fpexcept.strict") #0
1036   %conv = zext i1 %cmp to i32
1037   ret i32 %conv
1041 ; Double-precision intrinsics
1043 define double @add_f64(double %x, double %y) #0 {
1044 ; CHECK-LABEL: add_f64:
1045 ; CHECK:       // %bb.0:
1046 ; CHECK-NEXT:    fadd d0, d0, d1
1047 ; CHECK-NEXT:    ret
1048   %val = call double @llvm.experimental.constrained.fadd.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1049   ret double %val
1052 define double @sub_f64(double %x, double %y) #0 {
1053 ; CHECK-LABEL: sub_f64:
1054 ; CHECK:       // %bb.0:
1055 ; CHECK-NEXT:    fsub d0, d0, d1
1056 ; CHECK-NEXT:    ret
1057   %val = call double @llvm.experimental.constrained.fsub.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1058   ret double %val
1061 define double @mul_f64(double %x, double %y) #0 {
1062 ; CHECK-LABEL: mul_f64:
1063 ; CHECK:       // %bb.0:
1064 ; CHECK-NEXT:    fmul d0, d0, d1
1065 ; CHECK-NEXT:    ret
1066   %val = call double @llvm.experimental.constrained.fmul.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1067   ret double %val
1070 define double @div_f64(double %x, double %y) #0 {
1071 ; CHECK-LABEL: div_f64:
1072 ; CHECK:       // %bb.0:
1073 ; CHECK-NEXT:    fdiv d0, d0, d1
1074 ; CHECK-NEXT:    ret
1075   %val = call double @llvm.experimental.constrained.fdiv.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1076   ret double %val
1079 define double @frem_f64(double %x, double %y) #0 {
1080 ; CHECK-LABEL: frem_f64:
1081 ; CHECK:       // %bb.0:
1082 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1083 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1084 ; CHECK-NEXT:    .cfi_offset w30, -16
1085 ; CHECK-NEXT:    bl fmod
1086 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1087 ; CHECK-NEXT:    ret
1088   %val = call double @llvm.experimental.constrained.frem.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1089   ret double %val
1092 define double @fma_f64(double %x, double %y, double %z) #0 {
1093 ; CHECK-LABEL: fma_f64:
1094 ; CHECK:       // %bb.0:
1095 ; CHECK-NEXT:    fmadd d0, d0, d1, d2
1096 ; CHECK-NEXT:    ret
1097   %val = call double @llvm.experimental.constrained.fma.f64(double %x, double %y, double %z, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1098   ret double %val
1101 define i32 @fptosi_i32_f64(double %x) #0 {
1102 ; CHECK-LABEL: fptosi_i32_f64:
1103 ; CHECK:       // %bb.0:
1104 ; CHECK-NEXT:    fcvtzs w0, d0
1105 ; CHECK-NEXT:    ret
1106   %val = call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %x, metadata !"fpexcept.strict") #0
1107   ret i32 %val
1110 define i32 @fptoui_i32_f64(double %x) #0 {
1111 ; CHECK-LABEL: fptoui_i32_f64:
1112 ; CHECK:       // %bb.0:
1113 ; CHECK-NEXT:    fcvtzu w0, d0
1114 ; CHECK-NEXT:    ret
1115   %val = call i32 @llvm.experimental.constrained.fptoui.i32.f64(double %x, metadata !"fpexcept.strict") #0
1116   ret i32 %val
1119 define i64 @fptosi_i64_f64(double %x) #0 {
1120 ; CHECK-LABEL: fptosi_i64_f64:
1121 ; CHECK:       // %bb.0:
1122 ; CHECK-NEXT:    fcvtzs x0, d0
1123 ; CHECK-NEXT:    ret
1124   %val = call i64 @llvm.experimental.constrained.fptosi.i64.f64(double %x, metadata !"fpexcept.strict") #0
1125   ret i64 %val
1128 define i64 @fptoui_i64_f64(double %x) #0 {
1129 ; CHECK-LABEL: fptoui_i64_f64:
1130 ; CHECK:       // %bb.0:
1131 ; CHECK-NEXT:    fcvtzu x0, d0
1132 ; CHECK-NEXT:    ret
1133   %val = call i64 @llvm.experimental.constrained.fptoui.i64.f64(double %x, metadata !"fpexcept.strict") #0
1134   ret i64 %val
1137 define double @sitofp_f64_i32(i32 %x) #0 {
1138 ; CHECK-LABEL: sitofp_f64_i32:
1139 ; CHECK:       // %bb.0:
1140 ; CHECK-NEXT:    scvtf d0, w0
1141 ; CHECK-NEXT:    ret
1142   %val = call double @llvm.experimental.constrained.sitofp.f64.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1143   ret double %val
1146 define double @uitofp_f64_i32(i32 %x) #0 {
1147 ; CHECK-LABEL: uitofp_f64_i32:
1148 ; CHECK:       // %bb.0:
1149 ; CHECK-NEXT:    ucvtf d0, w0
1150 ; CHECK-NEXT:    ret
1151   %val = call double @llvm.experimental.constrained.uitofp.f64.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1152   ret double %val
1155 define double @sitofp_f64_i64(i64 %x) #0 {
1156 ; CHECK-LABEL: sitofp_f64_i64:
1157 ; CHECK:       // %bb.0:
1158 ; CHECK-NEXT:    scvtf d0, x0
1159 ; CHECK-NEXT:    ret
1160   %val = call double @llvm.experimental.constrained.sitofp.f64.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1161   ret double %val
1164 define double @uitofp_f64_i64(i64 %x) #0 {
1165 ; CHECK-LABEL: uitofp_f64_i64:
1166 ; CHECK:       // %bb.0:
1167 ; CHECK-NEXT:    ucvtf d0, x0
1168 ; CHECK-NEXT:    ret
1169   %val = call double @llvm.experimental.constrained.uitofp.f64.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1170   ret double %val
1173 define double @sitofp_f64_i128(i128 %x) #0 {
1174 ; CHECK-LABEL: sitofp_f64_i128:
1175 ; CHECK:       // %bb.0:
1176 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1177 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1178 ; CHECK-NEXT:    .cfi_offset w30, -16
1179 ; CHECK-NEXT:    bl __floattidf
1180 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1181 ; CHECK-NEXT:    ret
1182   %val = call double @llvm.experimental.constrained.sitofp.f64.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1183   ret double %val
1186 define double @uitofp_f64_i128(i128 %x) #0 {
1187 ; CHECK-LABEL: uitofp_f64_i128:
1188 ; CHECK:       // %bb.0:
1189 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1190 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1191 ; CHECK-NEXT:    .cfi_offset w30, -16
1192 ; CHECK-NEXT:    bl __floatuntidf
1193 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1194 ; CHECK-NEXT:    ret
1195   %val = call double @llvm.experimental.constrained.uitofp.f64.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1196   ret double %val
1199 define double @sqrt_f64(double %x) #0 {
1200 ; CHECK-LABEL: sqrt_f64:
1201 ; CHECK:       // %bb.0:
1202 ; CHECK-NEXT:    fsqrt d0, d0
1203 ; CHECK-NEXT:    ret
1204   %val = call double @llvm.experimental.constrained.sqrt.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1205   ret double %val
1208 define double @powi_f64(double %x, i32 %y) #0 {
1209 ; CHECK-LABEL: powi_f64:
1210 ; CHECK:       // %bb.0:
1211 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1212 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1213 ; CHECK-NEXT:    .cfi_offset w30, -16
1214 ; CHECK-NEXT:    bl __powidf2
1215 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1216 ; CHECK-NEXT:    ret
1217   %val = call double @llvm.experimental.constrained.powi.f64(double %x, i32 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1218   ret double %val
1221 define double @sin_f64(double %x) #0 {
1222 ; CHECK-LABEL: sin_f64:
1223 ; CHECK:       // %bb.0:
1224 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1225 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1226 ; CHECK-NEXT:    .cfi_offset w30, -16
1227 ; CHECK-NEXT:    bl sin
1228 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1229 ; CHECK-NEXT:    ret
1230   %val = call double @llvm.experimental.constrained.sin.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1231   ret double %val
1234 define double @cos_f64(double %x) #0 {
1235 ; CHECK-LABEL: cos_f64:
1236 ; CHECK:       // %bb.0:
1237 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1238 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1239 ; CHECK-NEXT:    .cfi_offset w30, -16
1240 ; CHECK-NEXT:    bl cos
1241 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1242 ; CHECK-NEXT:    ret
1243   %val = call double @llvm.experimental.constrained.cos.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1244   ret double %val
1247 define double @tan_f64(double %x) #0 {
1248 ; CHECK-LABEL: tan_f64:
1249 ; CHECK:       // %bb.0:
1250 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1251 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1252 ; CHECK-NEXT:    .cfi_offset w30, -16
1253 ; CHECK-NEXT:    bl tan
1254 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1255 ; CHECK-NEXT:    ret
1256   %val = call double @llvm.experimental.constrained.tan.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1257   ret double %val
1260 define double @asin_f64(double %x) #0 {
1261 ; CHECK-LABEL: asin_f64:
1262 ; CHECK:       // %bb.0:
1263 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1264 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1265 ; CHECK-NEXT:    .cfi_offset w30, -16
1266 ; CHECK-NEXT:    bl asin
1267 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1268 ; CHECK-NEXT:    ret
1269   %val = call double @llvm.experimental.constrained.asin.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1270   ret double %val
1273 define double @acos_f64(double %x) #0 {
1274 ; CHECK-LABEL: acos_f64:
1275 ; CHECK:       // %bb.0:
1276 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1277 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1278 ; CHECK-NEXT:    .cfi_offset w30, -16
1279 ; CHECK-NEXT:    bl acos
1280 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1281 ; CHECK-NEXT:    ret
1282   %val = call double @llvm.experimental.constrained.acos.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1283   ret double %val
1286 define double @atan_f64(double %x) #0 {
1287 ; CHECK-LABEL: atan_f64:
1288 ; CHECK:       // %bb.0:
1289 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1290 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1291 ; CHECK-NEXT:    .cfi_offset w30, -16
1292 ; CHECK-NEXT:    bl atan
1293 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1294 ; CHECK-NEXT:    ret
1295   %val = call double @llvm.experimental.constrained.atan.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1296   ret double %val
1299 define double @atan2_f64(double %x, double %y) #0 {
1300 ; CHECK-LABEL: atan2_f64:
1301 ; CHECK:       // %bb.0:
1302 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1303 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1304 ; CHECK-NEXT:    .cfi_offset w30, -16
1305 ; CHECK-NEXT:    bl atan2
1306 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1307 ; CHECK-NEXT:    ret
1308   %val = call double @llvm.experimental.constrained.atan2.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1309   ret double %val
1312 define double @sinh_f64(double %x) #0 {
1313 ; CHECK-LABEL: sinh_f64:
1314 ; CHECK:       // %bb.0:
1315 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1316 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1317 ; CHECK-NEXT:    .cfi_offset w30, -16
1318 ; CHECK-NEXT:    bl sinh
1319 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1320 ; CHECK-NEXT:    ret
1321   %val = call double @llvm.experimental.constrained.sinh.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1322   ret double %val
1325 define double @cosh_f64(double %x) #0 {
1326 ; CHECK-LABEL: cosh_f64:
1327 ; CHECK:       // %bb.0:
1328 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1329 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1330 ; CHECK-NEXT:    .cfi_offset w30, -16
1331 ; CHECK-NEXT:    bl cosh
1332 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1333 ; CHECK-NEXT:    ret
1334   %val = call double @llvm.experimental.constrained.cosh.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1335   ret double %val
1338 define double @tanh_f64(double %x) #0 {
1339 ; CHECK-LABEL: tanh_f64:
1340 ; CHECK:       // %bb.0:
1341 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1342 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1343 ; CHECK-NEXT:    .cfi_offset w30, -16
1344 ; CHECK-NEXT:    bl tanh
1345 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1346 ; CHECK-NEXT:    ret
1347   %val = call double @llvm.experimental.constrained.tanh.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1348   ret double %val
1351 define double @pow_f64(double %x, double %y) #0 {
1352 ; CHECK-LABEL: pow_f64:
1353 ; CHECK:       // %bb.0:
1354 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1355 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1356 ; CHECK-NEXT:    .cfi_offset w30, -16
1357 ; CHECK-NEXT:    bl pow
1358 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1359 ; CHECK-NEXT:    ret
1360   %val = call double @llvm.experimental.constrained.pow.f64(double %x, double %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1361   ret double %val
1364 define double @log_f64(double %x) #0 {
1365 ; CHECK-LABEL: log_f64:
1366 ; CHECK:       // %bb.0:
1367 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1368 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1369 ; CHECK-NEXT:    .cfi_offset w30, -16
1370 ; CHECK-NEXT:    bl log
1371 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1372 ; CHECK-NEXT:    ret
1373   %val = call double @llvm.experimental.constrained.log.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1374   ret double %val
1377 define double @log10_f64(double %x) #0 {
1378 ; CHECK-LABEL: log10_f64:
1379 ; CHECK:       // %bb.0:
1380 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1381 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1382 ; CHECK-NEXT:    .cfi_offset w30, -16
1383 ; CHECK-NEXT:    bl log10
1384 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1385 ; CHECK-NEXT:    ret
1386   %val = call double @llvm.experimental.constrained.log10.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1387   ret double %val
1390 define double @log2_f64(double %x) #0 {
1391 ; CHECK-LABEL: log2_f64:
1392 ; CHECK:       // %bb.0:
1393 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1394 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1395 ; CHECK-NEXT:    .cfi_offset w30, -16
1396 ; CHECK-NEXT:    bl log2
1397 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1398 ; CHECK-NEXT:    ret
1399   %val = call double @llvm.experimental.constrained.log2.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1400   ret double %val
1403 define double @exp_f64(double %x) #0 {
1404 ; CHECK-LABEL: exp_f64:
1405 ; CHECK:       // %bb.0:
1406 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1407 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1408 ; CHECK-NEXT:    .cfi_offset w30, -16
1409 ; CHECK-NEXT:    bl exp
1410 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1411 ; CHECK-NEXT:    ret
1412   %val = call double @llvm.experimental.constrained.exp.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1413   ret double %val
1416 define double @exp2_f64(double %x) #0 {
1417 ; CHECK-LABEL: exp2_f64:
1418 ; CHECK:       // %bb.0:
1419 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1420 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1421 ; CHECK-NEXT:    .cfi_offset w30, -16
1422 ; CHECK-NEXT:    bl exp2
1423 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1424 ; CHECK-NEXT:    ret
1425   %val = call double @llvm.experimental.constrained.exp2.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1426   ret double %val
1429 define double @rint_f64(double %x) #0 {
1430 ; CHECK-LABEL: rint_f64:
1431 ; CHECK:       // %bb.0:
1432 ; CHECK-NEXT:    frintx d0, d0
1433 ; CHECK-NEXT:    ret
1434   %val = call double @llvm.experimental.constrained.rint.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1435   ret double %val
1438 define double @nearbyint_f64(double %x) #0 {
1439 ; CHECK-LABEL: nearbyint_f64:
1440 ; CHECK:       // %bb.0:
1441 ; CHECK-NEXT:    frinti d0, d0
1442 ; CHECK-NEXT:    ret
1443   %val = call double @llvm.experimental.constrained.nearbyint.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1444   ret double %val
1447 define i32 @lrint_f64(double %x) #0 {
1448 ; CHECK-LABEL: lrint_f64:
1449 ; CHECK:       // %bb.0:
1450 ; CHECK-NEXT:    frintx d0, d0
1451 ; CHECK-NEXT:    fcvtzs w0, d0
1452 ; CHECK-NEXT:    ret
1453   %val = call i32 @llvm.experimental.constrained.lrint.i32.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1454   ret i32 %val
1457 define i64 @llrint_f64(double %x) #0 {
1458 ; CHECK-LABEL: llrint_f64:
1459 ; CHECK:       // %bb.0:
1460 ; CHECK-NEXT:    frintx d0, d0
1461 ; CHECK-NEXT:    fcvtzs x0, d0
1462 ; CHECK-NEXT:    ret
1463   %val = call i64 @llvm.experimental.constrained.llrint.i64.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1464   ret i64 %val
1467 define double @maxnum_f64(double %x, double %y) #0 {
1468 ; CHECK-LABEL: maxnum_f64:
1469 ; CHECK:       // %bb.0:
1470 ; CHECK-NEXT:    fmaxnm d0, d0, d1
1471 ; CHECK-NEXT:    ret
1472   %val = call double @llvm.experimental.constrained.maxnum.f64(double %x, double %y, metadata !"fpexcept.strict") #0
1473   ret double %val
1476 define double @minnum_f64(double %x, double %y) #0 {
1477 ; CHECK-LABEL: minnum_f64:
1478 ; CHECK:       // %bb.0:
1479 ; CHECK-NEXT:    fminnm d0, d0, d1
1480 ; CHECK-NEXT:    ret
1481   %val = call double @llvm.experimental.constrained.minnum.f64(double %x, double %y, metadata !"fpexcept.strict") #0
1482   ret double %val
1485 define double @maximum_f64(double %x, double %y) #0 {
1486 ; CHECK-LABEL: maximum_f64:
1487 ; CHECK:       // %bb.0:
1488 ; CHECK-NEXT:    fmax d0, d0, d1
1489 ; CHECK-NEXT:    ret
1490   %val = call double @llvm.experimental.constrained.maximum.f64(double %x, double %y, metadata !"fpexcept.strict") #0
1491   ret double %val
1494 define double @minimum_f64(double %x, double %y) #0 {
1495 ; CHECK-LABEL: minimum_f64:
1496 ; CHECK:       // %bb.0:
1497 ; CHECK-NEXT:    fmin d0, d0, d1
1498 ; CHECK-NEXT:    ret
1499   %val = call double @llvm.experimental.constrained.minimum.f64(double %x, double %y, metadata !"fpexcept.strict") #0
1500   ret double %val
1503 define double @ceil_f64(double %x) #0 {
1504 ; CHECK-LABEL: ceil_f64:
1505 ; CHECK:       // %bb.0:
1506 ; CHECK-NEXT:    frintp d0, d0
1507 ; CHECK-NEXT:    ret
1508   %val = call double @llvm.experimental.constrained.ceil.f64(double %x, metadata !"fpexcept.strict") #0
1509   ret double %val
1512 define double @floor_f64(double %x) #0 {
1513 ; CHECK-LABEL: floor_f64:
1514 ; CHECK:       // %bb.0:
1515 ; CHECK-NEXT:    frintm d0, d0
1516 ; CHECK-NEXT:    ret
1517   %val = call double @llvm.experimental.constrained.floor.f64(double %x, metadata !"fpexcept.strict") #0
1518   ret double %val
1521 define i32 @lround_f64(double %x) #0 {
1522 ; CHECK-LABEL: lround_f64:
1523 ; CHECK:       // %bb.0:
1524 ; CHECK-NEXT:    fcvtas w0, d0
1525 ; CHECK-NEXT:    ret
1526   %val = call i32 @llvm.experimental.constrained.lround.i32.f64(double %x, metadata !"fpexcept.strict") #0
1527   ret i32 %val
1530 define i64 @llround_f64(double %x) #0 {
1531 ; CHECK-LABEL: llround_f64:
1532 ; CHECK:       // %bb.0:
1533 ; CHECK-NEXT:    fcvtas x0, d0
1534 ; CHECK-NEXT:    ret
1535   %val = call i64 @llvm.experimental.constrained.llround.i64.f64(double %x, metadata !"fpexcept.strict") #0
1536   ret i64 %val
1539 define double @round_f64(double %x) #0 {
1540 ; CHECK-LABEL: round_f64:
1541 ; CHECK:       // %bb.0:
1542 ; CHECK-NEXT:    frinta d0, d0
1543 ; CHECK-NEXT:    ret
1544   %val = call double @llvm.experimental.constrained.round.f64(double %x, metadata !"fpexcept.strict") #0
1545   ret double %val
1548 define double @roundeven_f64(double %x) #0 {
1549 ; CHECK-LABEL: roundeven_f64:
1550 ; CHECK:       // %bb.0:
1551 ; CHECK-NEXT:    frintn d0, d0
1552 ; CHECK-NEXT:    ret
1553   %val = call double @llvm.experimental.constrained.roundeven.f64(double %x, metadata !"fpexcept.strict") #0
1554   ret double %val
1557 define double @trunc_f64(double %x) #0 {
1558 ; CHECK-LABEL: trunc_f64:
1559 ; CHECK:       // %bb.0:
1560 ; CHECK-NEXT:    frintz d0, d0
1561 ; CHECK-NEXT:    ret
1562   %val = call double @llvm.experimental.constrained.trunc.f64(double %x, metadata !"fpexcept.strict") #0
1563   ret double %val
1566 define i32 @fcmp_olt_f64(double %a, double %b) #0 {
1567 ; CHECK-LABEL: fcmp_olt_f64:
1568 ; CHECK:       // %bb.0:
1569 ; CHECK-NEXT:    fcmp d0, d1
1570 ; CHECK-NEXT:    cset w0, mi
1571 ; CHECK-NEXT:    ret
1572   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"olt", metadata !"fpexcept.strict") #0
1573   %conv = zext i1 %cmp to i32
1574   ret i32 %conv
1577 define i32 @fcmp_ole_f64(double %a, double %b) #0 {
1578 ; CHECK-LABEL: fcmp_ole_f64:
1579 ; CHECK:       // %bb.0:
1580 ; CHECK-NEXT:    fcmp d0, d1
1581 ; CHECK-NEXT:    cset w0, ls
1582 ; CHECK-NEXT:    ret
1583   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ole", metadata !"fpexcept.strict") #0
1584   %conv = zext i1 %cmp to i32
1585   ret i32 %conv
1588 define i32 @fcmp_ogt_f64(double %a, double %b) #0 {
1589 ; CHECK-LABEL: fcmp_ogt_f64:
1590 ; CHECK:       // %bb.0:
1591 ; CHECK-NEXT:    fcmp d0, d1
1592 ; CHECK-NEXT:    cset w0, gt
1593 ; CHECK-NEXT:    ret
1594   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ogt", metadata !"fpexcept.strict") #0
1595   %conv = zext i1 %cmp to i32
1596   ret i32 %conv
1599 define i32 @fcmp_oge_f64(double %a, double %b) #0 {
1600 ; CHECK-LABEL: fcmp_oge_f64:
1601 ; CHECK:       // %bb.0:
1602 ; CHECK-NEXT:    fcmp d0, d1
1603 ; CHECK-NEXT:    cset w0, ge
1604 ; CHECK-NEXT:    ret
1605   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"oge", metadata !"fpexcept.strict") #0
1606   %conv = zext i1 %cmp to i32
1607   ret i32 %conv
1610 define i32 @fcmp_oeq_f64(double %a, double %b) #0 {
1611 ; CHECK-LABEL: fcmp_oeq_f64:
1612 ; CHECK:       // %bb.0:
1613 ; CHECK-NEXT:    fcmp d0, d1
1614 ; CHECK-NEXT:    cset w0, eq
1615 ; CHECK-NEXT:    ret
1616   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.strict") #0
1617   %conv = zext i1 %cmp to i32
1618   ret i32 %conv
1621 define i32 @fcmp_one_f64(double %a, double %b) #0 {
1622 ; CHECK-LABEL: fcmp_one_f64:
1623 ; CHECK:       // %bb.0:
1624 ; CHECK-NEXT:    fcmp d0, d1
1625 ; CHECK-NEXT:    cset w8, mi
1626 ; CHECK-NEXT:    csinc w0, w8, wzr, le
1627 ; CHECK-NEXT:    ret
1628   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"one", metadata !"fpexcept.strict") #0
1629   %conv = zext i1 %cmp to i32
1630   ret i32 %conv
1633 define i32 @fcmp_ult_f64(double %a, double %b) #0 {
1634 ; CHECK-LABEL: fcmp_ult_f64:
1635 ; CHECK:       // %bb.0:
1636 ; CHECK-NEXT:    fcmp d0, d1
1637 ; CHECK-NEXT:    cset w0, lt
1638 ; CHECK-NEXT:    ret
1639   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ult", metadata !"fpexcept.strict") #0
1640   %conv = zext i1 %cmp to i32
1641   ret i32 %conv
1644 define i32 @fcmp_ule_f64(double %a, double %b) #0 {
1645 ; CHECK-LABEL: fcmp_ule_f64:
1646 ; CHECK:       // %bb.0:
1647 ; CHECK-NEXT:    fcmp d0, d1
1648 ; CHECK-NEXT:    cset w0, le
1649 ; CHECK-NEXT:    ret
1650   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ule", metadata !"fpexcept.strict") #0
1651   %conv = zext i1 %cmp to i32
1652   ret i32 %conv
1655 define i32 @fcmp_ugt_f64(double %a, double %b) #0 {
1656 ; CHECK-LABEL: fcmp_ugt_f64:
1657 ; CHECK:       // %bb.0:
1658 ; CHECK-NEXT:    fcmp d0, d1
1659 ; CHECK-NEXT:    cset w0, hi
1660 ; CHECK-NEXT:    ret
1661   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ugt", metadata !"fpexcept.strict") #0
1662   %conv = zext i1 %cmp to i32
1663   ret i32 %conv
1666 define i32 @fcmp_uge_f64(double %a, double %b) #0 {
1667 ; CHECK-LABEL: fcmp_uge_f64:
1668 ; CHECK:       // %bb.0:
1669 ; CHECK-NEXT:    fcmp d0, d1
1670 ; CHECK-NEXT:    cset w0, pl
1671 ; CHECK-NEXT:    ret
1672   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"uge", metadata !"fpexcept.strict") #0
1673   %conv = zext i1 %cmp to i32
1674   ret i32 %conv
1677 define i32 @fcmp_ueq_f64(double %a, double %b) #0 {
1678 ; CHECK-LABEL: fcmp_ueq_f64:
1679 ; CHECK:       // %bb.0:
1680 ; CHECK-NEXT:    fcmp d0, d1
1681 ; CHECK-NEXT:    cset w8, eq
1682 ; CHECK-NEXT:    csinc w0, w8, wzr, vc
1683 ; CHECK-NEXT:    ret
1684   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ueq", metadata !"fpexcept.strict") #0
1685   %conv = zext i1 %cmp to i32
1686   ret i32 %conv
1689 define i32 @fcmp_une_f64(double %a, double %b) #0 {
1690 ; CHECK-LABEL: fcmp_une_f64:
1691 ; CHECK:       // %bb.0:
1692 ; CHECK-NEXT:    fcmp d0, d1
1693 ; CHECK-NEXT:    cset w0, ne
1694 ; CHECK-NEXT:    ret
1695   %cmp = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"une", metadata !"fpexcept.strict") #0
1696   %conv = zext i1 %cmp to i32
1697   ret i32 %conv
1700 define i32 @fcmps_olt_f64(double %a, double %b) #0 {
1701 ; CHECK-LABEL: fcmps_olt_f64:
1702 ; CHECK:       // %bb.0:
1703 ; CHECK-NEXT:    fcmpe d0, d1
1704 ; CHECK-NEXT:    cset w0, mi
1705 ; CHECK-NEXT:    ret
1706   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"olt", metadata !"fpexcept.strict") #0
1707   %conv = zext i1 %cmp to i32
1708   ret i32 %conv
1711 define i32 @fcmps_ole_f64(double %a, double %b) #0 {
1712 ; CHECK-LABEL: fcmps_ole_f64:
1713 ; CHECK:       // %bb.0:
1714 ; CHECK-NEXT:    fcmpe d0, d1
1715 ; CHECK-NEXT:    cset w0, ls
1716 ; CHECK-NEXT:    ret
1717   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ole", metadata !"fpexcept.strict") #0
1718   %conv = zext i1 %cmp to i32
1719   ret i32 %conv
1722 define i32 @fcmps_ogt_f64(double %a, double %b) #0 {
1723 ; CHECK-LABEL: fcmps_ogt_f64:
1724 ; CHECK:       // %bb.0:
1725 ; CHECK-NEXT:    fcmpe d0, d1
1726 ; CHECK-NEXT:    cset w0, gt
1727 ; CHECK-NEXT:    ret
1728   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ogt", metadata !"fpexcept.strict") #0
1729   %conv = zext i1 %cmp to i32
1730   ret i32 %conv
1733 define i32 @fcmps_oge_f64(double %a, double %b) #0 {
1734 ; CHECK-LABEL: fcmps_oge_f64:
1735 ; CHECK:       // %bb.0:
1736 ; CHECK-NEXT:    fcmpe d0, d1
1737 ; CHECK-NEXT:    cset w0, ge
1738 ; CHECK-NEXT:    ret
1739   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"oge", metadata !"fpexcept.strict") #0
1740   %conv = zext i1 %cmp to i32
1741   ret i32 %conv
1744 define i32 @fcmps_oeq_f64(double %a, double %b) #0 {
1745 ; CHECK-LABEL: fcmps_oeq_f64:
1746 ; CHECK:       // %bb.0:
1747 ; CHECK-NEXT:    fcmpe d0, d1
1748 ; CHECK-NEXT:    cset w0, eq
1749 ; CHECK-NEXT:    ret
1750   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.strict") #0
1751   %conv = zext i1 %cmp to i32
1752   ret i32 %conv
1755 define i32 @fcmps_one_f64(double %a, double %b) #0 {
1756 ; CHECK-LABEL: fcmps_one_f64:
1757 ; CHECK:       // %bb.0:
1758 ; CHECK-NEXT:    fcmpe d0, d1
1759 ; CHECK-NEXT:    cset w8, mi
1760 ; CHECK-NEXT:    csinc w0, w8, wzr, le
1761 ; CHECK-NEXT:    ret
1762   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"one", metadata !"fpexcept.strict") #0
1763   %conv = zext i1 %cmp to i32
1764   ret i32 %conv
1767 define i32 @fcmps_ult_f64(double %a, double %b) #0 {
1768 ; CHECK-LABEL: fcmps_ult_f64:
1769 ; CHECK:       // %bb.0:
1770 ; CHECK-NEXT:    fcmpe d0, d1
1771 ; CHECK-NEXT:    cset w0, lt
1772 ; CHECK-NEXT:    ret
1773   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ult", metadata !"fpexcept.strict") #0
1774   %conv = zext i1 %cmp to i32
1775   ret i32 %conv
1778 define i32 @fcmps_ule_f64(double %a, double %b) #0 {
1779 ; CHECK-LABEL: fcmps_ule_f64:
1780 ; CHECK:       // %bb.0:
1781 ; CHECK-NEXT:    fcmpe d0, d1
1782 ; CHECK-NEXT:    cset w0, le
1783 ; CHECK-NEXT:    ret
1784   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ule", metadata !"fpexcept.strict") #0
1785   %conv = zext i1 %cmp to i32
1786   ret i32 %conv
1789 define i32 @fcmps_ugt_f64(double %a, double %b) #0 {
1790 ; CHECK-LABEL: fcmps_ugt_f64:
1791 ; CHECK:       // %bb.0:
1792 ; CHECK-NEXT:    fcmpe d0, d1
1793 ; CHECK-NEXT:    cset w0, hi
1794 ; CHECK-NEXT:    ret
1795   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ugt", metadata !"fpexcept.strict") #0
1796   %conv = zext i1 %cmp to i32
1797   ret i32 %conv
1800 define i32 @fcmps_uge_f64(double %a, double %b) #0 {
1801 ; CHECK-LABEL: fcmps_uge_f64:
1802 ; CHECK:       // %bb.0:
1803 ; CHECK-NEXT:    fcmpe d0, d1
1804 ; CHECK-NEXT:    cset w0, pl
1805 ; CHECK-NEXT:    ret
1806   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"uge", metadata !"fpexcept.strict") #0
1807   %conv = zext i1 %cmp to i32
1808   ret i32 %conv
1811 define i32 @fcmps_ueq_f64(double %a, double %b) #0 {
1812 ; CHECK-LABEL: fcmps_ueq_f64:
1813 ; CHECK:       // %bb.0:
1814 ; CHECK-NEXT:    fcmpe d0, d1
1815 ; CHECK-NEXT:    cset w8, eq
1816 ; CHECK-NEXT:    csinc w0, w8, wzr, vc
1817 ; CHECK-NEXT:    ret
1818   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ueq", metadata !"fpexcept.strict") #0
1819   %conv = zext i1 %cmp to i32
1820   ret i32 %conv
1823 define i32 @fcmps_une_f64(double %a, double %b) #0 {
1824 ; CHECK-LABEL: fcmps_une_f64:
1825 ; CHECK:       // %bb.0:
1826 ; CHECK-NEXT:    fcmpe d0, d1
1827 ; CHECK-NEXT:    cset w0, ne
1828 ; CHECK-NEXT:    ret
1829   %cmp = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"une", metadata !"fpexcept.strict") #0
1830   %conv = zext i1 %cmp to i32
1831   ret i32 %conv
1835 ; Long-double-precision intrinsics
1837 define fp128 @add_f128(fp128 %x, fp128 %y) #0 {
1838 ; CHECK-LABEL: add_f128:
1839 ; CHECK:       // %bb.0:
1840 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1841 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1842 ; CHECK-NEXT:    .cfi_offset w30, -16
1843 ; CHECK-NEXT:    bl __addtf3
1844 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1845 ; CHECK-NEXT:    ret
1846   %val = call fp128 @llvm.experimental.constrained.fadd.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1847   ret fp128 %val
1850 define fp128 @sub_f128(fp128 %x, fp128 %y) #0 {
1851 ; CHECK-LABEL: sub_f128:
1852 ; CHECK:       // %bb.0:
1853 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1854 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1855 ; CHECK-NEXT:    .cfi_offset w30, -16
1856 ; CHECK-NEXT:    bl __subtf3
1857 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1858 ; CHECK-NEXT:    ret
1859   %val = call fp128 @llvm.experimental.constrained.fsub.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1860   ret fp128 %val
1863 define fp128 @mul_f128(fp128 %x, fp128 %y) #0 {
1864 ; CHECK-LABEL: mul_f128:
1865 ; CHECK:       // %bb.0:
1866 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1867 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1868 ; CHECK-NEXT:    .cfi_offset w30, -16
1869 ; CHECK-NEXT:    bl __multf3
1870 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1871 ; CHECK-NEXT:    ret
1872   %val = call fp128 @llvm.experimental.constrained.fmul.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1873   ret fp128 %val
1876 define fp128 @div_f128(fp128 %x, fp128 %y) #0 {
1877 ; CHECK-LABEL: div_f128:
1878 ; CHECK:       // %bb.0:
1879 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1880 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1881 ; CHECK-NEXT:    .cfi_offset w30, -16
1882 ; CHECK-NEXT:    bl __divtf3
1883 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1884 ; CHECK-NEXT:    ret
1885   %val = call fp128 @llvm.experimental.constrained.fdiv.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1886   ret fp128 %val
1889 define fp128 @frem_f128(fp128 %x, fp128 %y) #0 {
1890 ; CHECK-LABEL: frem_f128:
1891 ; CHECK:       // %bb.0:
1892 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1893 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1894 ; CHECK-NEXT:    .cfi_offset w30, -16
1895 ; CHECK-NEXT:    bl fmodl
1896 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1897 ; CHECK-NEXT:    ret
1898   %val = call fp128 @llvm.experimental.constrained.frem.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1899   ret fp128 %val
1902 define fp128 @fma_f128(fp128 %x, fp128 %y, fp128 %z) #0 {
1903 ; CHECK-LABEL: fma_f128:
1904 ; CHECK:       // %bb.0:
1905 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1906 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1907 ; CHECK-NEXT:    .cfi_offset w30, -16
1908 ; CHECK-NEXT:    bl fmal
1909 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1910 ; CHECK-NEXT:    ret
1911   %val = call fp128 @llvm.experimental.constrained.fma.f128(fp128 %x, fp128 %y, fp128 %z, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1912   ret fp128 %val
1915 define i32 @fptosi_i32_f128(fp128 %x) #0 {
1916 ; CHECK-LABEL: fptosi_i32_f128:
1917 ; CHECK:       // %bb.0:
1918 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1919 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1920 ; CHECK-NEXT:    .cfi_offset w30, -16
1921 ; CHECK-NEXT:    bl __fixtfsi
1922 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1923 ; CHECK-NEXT:    ret
1924   %val = call i32 @llvm.experimental.constrained.fptosi.i32.f128(fp128 %x, metadata !"fpexcept.strict") #0
1925   ret i32 %val
1928 define i32 @fptoui_i32_f128(fp128 %x) #0 {
1929 ; CHECK-LABEL: fptoui_i32_f128:
1930 ; CHECK:       // %bb.0:
1931 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1932 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1933 ; CHECK-NEXT:    .cfi_offset w30, -16
1934 ; CHECK-NEXT:    bl __fixunstfsi
1935 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1936 ; CHECK-NEXT:    ret
1937   %val = call i32 @llvm.experimental.constrained.fptoui.i32.f128(fp128 %x, metadata !"fpexcept.strict") #0
1938   ret i32 %val
1941 define i64 @fptosi_i64_f128(fp128 %x) #0 {
1942 ; CHECK-LABEL: fptosi_i64_f128:
1943 ; CHECK:       // %bb.0:
1944 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1945 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1946 ; CHECK-NEXT:    .cfi_offset w30, -16
1947 ; CHECK-NEXT:    bl __fixtfdi
1948 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1949 ; CHECK-NEXT:    ret
1950   %val = call i64 @llvm.experimental.constrained.fptosi.i64.f128(fp128 %x, metadata !"fpexcept.strict") #0
1951   ret i64 %val
1954 define i64 @fptoui_i64_f128(fp128 %x) #0 {
1955 ; CHECK-LABEL: fptoui_i64_f128:
1956 ; CHECK:       // %bb.0:
1957 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1958 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1959 ; CHECK-NEXT:    .cfi_offset w30, -16
1960 ; CHECK-NEXT:    bl __fixunstfdi
1961 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1962 ; CHECK-NEXT:    ret
1963   %val = call i64 @llvm.experimental.constrained.fptoui.i64.f128(fp128 %x, metadata !"fpexcept.strict") #0
1964   ret i64 %val
1967 define fp128 @sitofp_f128_i32(i32 %x) #0 {
1968 ; CHECK-LABEL: sitofp_f128_i32:
1969 ; CHECK:       // %bb.0:
1970 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1971 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1972 ; CHECK-NEXT:    .cfi_offset w30, -16
1973 ; CHECK-NEXT:    bl __floatsitf
1974 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1975 ; CHECK-NEXT:    ret
1976   %val = call fp128 @llvm.experimental.constrained.sitofp.f128.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1977   ret fp128 %val
1980 define fp128 @uitofp_f128_i32(i32 %x) #0 {
1981 ; CHECK-LABEL: uitofp_f128_i32:
1982 ; CHECK:       // %bb.0:
1983 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1984 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1985 ; CHECK-NEXT:    .cfi_offset w30, -16
1986 ; CHECK-NEXT:    bl __floatunsitf
1987 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
1988 ; CHECK-NEXT:    ret
1989   %val = call fp128 @llvm.experimental.constrained.uitofp.f128.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
1990   ret fp128 %val
1993 define fp128 @sitofp_f128_i64(i64 %x) #0 {
1994 ; CHECK-LABEL: sitofp_f128_i64:
1995 ; CHECK:       // %bb.0:
1996 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
1997 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1998 ; CHECK-NEXT:    .cfi_offset w30, -16
1999 ; CHECK-NEXT:    bl __floatditf
2000 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2001 ; CHECK-NEXT:    ret
2002   %val = call fp128 @llvm.experimental.constrained.sitofp.f128.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2003   ret fp128 %val
2006 define fp128 @uitofp_f128_i64(i64 %x) #0 {
2007 ; CHECK-LABEL: uitofp_f128_i64:
2008 ; CHECK:       // %bb.0:
2009 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2010 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2011 ; CHECK-NEXT:    .cfi_offset w30, -16
2012 ; CHECK-NEXT:    bl __floatunditf
2013 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2014 ; CHECK-NEXT:    ret
2015   %val = call fp128 @llvm.experimental.constrained.uitofp.f128.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2016   ret fp128 %val
2019 define fp128 @sitofp_f128_i128(i128 %x) #0 {
2020 ; CHECK-LABEL: sitofp_f128_i128:
2021 ; CHECK:       // %bb.0:
2022 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2023 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2024 ; CHECK-NEXT:    .cfi_offset w30, -16
2025 ; CHECK-NEXT:    bl __floattitf
2026 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2027 ; CHECK-NEXT:    ret
2028   %val = call fp128 @llvm.experimental.constrained.sitofp.f128.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2029   ret fp128 %val
2032 define fp128 @uitofp_f128_i128(i128 %x) #0 {
2033 ; CHECK-LABEL: uitofp_f128_i128:
2034 ; CHECK:       // %bb.0:
2035 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2036 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2037 ; CHECK-NEXT:    .cfi_offset w30, -16
2038 ; CHECK-NEXT:    bl __floatuntitf
2039 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2040 ; CHECK-NEXT:    ret
2041   %val = call fp128 @llvm.experimental.constrained.uitofp.f128.i128(i128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2042   ret fp128 %val
2045 define fp128 @sqrt_f128(fp128 %x) #0 {
2046 ; CHECK-LABEL: sqrt_f128:
2047 ; CHECK:       // %bb.0:
2048 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2049 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2050 ; CHECK-NEXT:    .cfi_offset w30, -16
2051 ; CHECK-NEXT:    bl sqrtl
2052 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2053 ; CHECK-NEXT:    ret
2054   %val = call fp128 @llvm.experimental.constrained.sqrt.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2055   ret fp128 %val
2058 define fp128 @powi_f128(fp128 %x, i32 %y) #0 {
2059 ; CHECK-LABEL: powi_f128:
2060 ; CHECK:       // %bb.0:
2061 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2062 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2063 ; CHECK-NEXT:    .cfi_offset w30, -16
2064 ; CHECK-NEXT:    bl __powitf2
2065 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2066 ; CHECK-NEXT:    ret
2067   %val = call fp128 @llvm.experimental.constrained.powi.f128(fp128 %x, i32 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2068   ret fp128 %val
2071 define fp128 @sin_f128(fp128 %x) #0 {
2072 ; CHECK-LABEL: sin_f128:
2073 ; CHECK:       // %bb.0:
2074 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2075 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2076 ; CHECK-NEXT:    .cfi_offset w30, -16
2077 ; CHECK-NEXT:    bl sinl
2078 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2079 ; CHECK-NEXT:    ret
2080   %val = call fp128 @llvm.experimental.constrained.sin.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2081   ret fp128 %val
2084 define fp128 @cos_f128(fp128 %x) #0 {
2085 ; CHECK-LABEL: cos_f128:
2086 ; CHECK:       // %bb.0:
2087 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2088 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2089 ; CHECK-NEXT:    .cfi_offset w30, -16
2090 ; CHECK-NEXT:    bl cosl
2091 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2092 ; CHECK-NEXT:    ret
2093   %val = call fp128 @llvm.experimental.constrained.cos.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2094   ret fp128 %val
2097 define fp128 @tan_f128(fp128 %x) #0 {
2098 ; CHECK-LABEL: tan_f128:
2099 ; CHECK:       // %bb.0:
2100 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2101 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2102 ; CHECK-NEXT:    .cfi_offset w30, -16
2103 ; CHECK-NEXT:    bl tanl
2104 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2105 ; CHECK-NEXT:    ret
2106   %val = call fp128 @llvm.experimental.constrained.tan.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2107   ret fp128 %val
2110 define fp128 @asin_f128(fp128 %x) #0 {
2111 ; CHECK-LABEL: asin_f128:
2112 ; CHECK:       // %bb.0:
2113 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2114 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2115 ; CHECK-NEXT:    .cfi_offset w30, -16
2116 ; CHECK-NEXT:    bl asinl
2117 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2118 ; CHECK-NEXT:    ret
2119   %val = call fp128 @llvm.experimental.constrained.asin.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2120   ret fp128 %val
2123 define fp128 @acos_f128(fp128 %x) #0 {
2124 ; CHECK-LABEL: acos_f128:
2125 ; CHECK:       // %bb.0:
2126 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2127 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2128 ; CHECK-NEXT:    .cfi_offset w30, -16
2129 ; CHECK-NEXT:    bl acosl
2130 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2131 ; CHECK-NEXT:    ret
2132   %val = call fp128 @llvm.experimental.constrained.acos.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2133   ret fp128 %val
2136 define fp128 @atan_f128(fp128 %x) #0 {
2137 ; CHECK-LABEL: atan_f128:
2138 ; CHECK:       // %bb.0:
2139 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2140 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2141 ; CHECK-NEXT:    .cfi_offset w30, -16
2142 ; CHECK-NEXT:    bl atanl
2143 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2144 ; CHECK-NEXT:    ret
2145   %val = call fp128 @llvm.experimental.constrained.atan.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2146   ret fp128 %val
2149 define fp128 @atan2_f128(fp128 %x, fp128 %y) #0 {
2150 ; CHECK-LABEL: atan2_f128:
2151 ; CHECK:       // %bb.0:
2152 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2153 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2154 ; CHECK-NEXT:    .cfi_offset w30, -16
2155 ; CHECK-NEXT:    bl atan2l
2156 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2157 ; CHECK-NEXT:    ret
2158   %val = call fp128 @llvm.experimental.constrained.atan2.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2159   ret fp128 %val
2162 define fp128 @sinh_f128(fp128 %x) #0 {
2163 ; CHECK-LABEL: sinh_f128:
2164 ; CHECK:       // %bb.0:
2165 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2166 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2167 ; CHECK-NEXT:    .cfi_offset w30, -16
2168 ; CHECK-NEXT:    bl sinhl
2169 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2170 ; CHECK-NEXT:    ret
2171   %val = call fp128 @llvm.experimental.constrained.sinh.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2172   ret fp128 %val
2175 define fp128 @cosh_f128(fp128 %x) #0 {
2176 ; CHECK-LABEL: cosh_f128:
2177 ; CHECK:       // %bb.0:
2178 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2179 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2180 ; CHECK-NEXT:    .cfi_offset w30, -16
2181 ; CHECK-NEXT:    bl coshl
2182 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2183 ; CHECK-NEXT:    ret
2184   %val = call fp128 @llvm.experimental.constrained.cosh.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2185   ret fp128 %val
2188 define fp128 @tanh_f128(fp128 %x) #0 {
2189 ; CHECK-LABEL: tanh_f128:
2190 ; CHECK:       // %bb.0:
2191 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2192 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2193 ; CHECK-NEXT:    .cfi_offset w30, -16
2194 ; CHECK-NEXT:    bl tanhl
2195 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2196 ; CHECK-NEXT:    ret
2197   %val = call fp128 @llvm.experimental.constrained.tanh.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2198   ret fp128 %val
2201 define fp128 @pow_f128(fp128 %x, fp128 %y) #0 {
2202 ; CHECK-LABEL: pow_f128:
2203 ; CHECK:       // %bb.0:
2204 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2205 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2206 ; CHECK-NEXT:    .cfi_offset w30, -16
2207 ; CHECK-NEXT:    bl powl
2208 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2209 ; CHECK-NEXT:    ret
2210   %val = call fp128 @llvm.experimental.constrained.pow.f128(fp128 %x, fp128 %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2211   ret fp128 %val
2214 define fp128 @log_f128(fp128 %x) #0 {
2215 ; CHECK-LABEL: log_f128:
2216 ; CHECK:       // %bb.0:
2217 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2218 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2219 ; CHECK-NEXT:    .cfi_offset w30, -16
2220 ; CHECK-NEXT:    bl logl
2221 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2222 ; CHECK-NEXT:    ret
2223   %val = call fp128 @llvm.experimental.constrained.log.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2224   ret fp128 %val
2227 define fp128 @log10_f128(fp128 %x) #0 {
2228 ; CHECK-LABEL: log10_f128:
2229 ; CHECK:       // %bb.0:
2230 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2231 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2232 ; CHECK-NEXT:    .cfi_offset w30, -16
2233 ; CHECK-NEXT:    bl log10l
2234 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2235 ; CHECK-NEXT:    ret
2236   %val = call fp128 @llvm.experimental.constrained.log10.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2237   ret fp128 %val
2240 define fp128 @log2_f128(fp128 %x) #0 {
2241 ; CHECK-LABEL: log2_f128:
2242 ; CHECK:       // %bb.0:
2243 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2244 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2245 ; CHECK-NEXT:    .cfi_offset w30, -16
2246 ; CHECK-NEXT:    bl log2l
2247 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2248 ; CHECK-NEXT:    ret
2249   %val = call fp128 @llvm.experimental.constrained.log2.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2250   ret fp128 %val
2253 define fp128 @exp_f128(fp128 %x) #0 {
2254 ; CHECK-LABEL: exp_f128:
2255 ; CHECK:       // %bb.0:
2256 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2257 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2258 ; CHECK-NEXT:    .cfi_offset w30, -16
2259 ; CHECK-NEXT:    bl expl
2260 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2261 ; CHECK-NEXT:    ret
2262   %val = call fp128 @llvm.experimental.constrained.exp.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2263   ret fp128 %val
2266 define fp128 @exp2_f128(fp128 %x) #0 {
2267 ; CHECK-LABEL: exp2_f128:
2268 ; CHECK:       // %bb.0:
2269 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2270 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2271 ; CHECK-NEXT:    .cfi_offset w30, -16
2272 ; CHECK-NEXT:    bl exp2l
2273 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2274 ; CHECK-NEXT:    ret
2275   %val = call fp128 @llvm.experimental.constrained.exp2.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2276   ret fp128 %val
2279 define fp128 @rint_f128(fp128 %x) #0 {
2280 ; CHECK-LABEL: rint_f128:
2281 ; CHECK:       // %bb.0:
2282 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2283 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2284 ; CHECK-NEXT:    .cfi_offset w30, -16
2285 ; CHECK-NEXT:    bl rintl
2286 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2287 ; CHECK-NEXT:    ret
2288   %val = call fp128 @llvm.experimental.constrained.rint.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2289   ret fp128 %val
2292 define fp128 @nearbyint_f128(fp128 %x) #0 {
2293 ; CHECK-LABEL: nearbyint_f128:
2294 ; CHECK:       // %bb.0:
2295 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2296 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2297 ; CHECK-NEXT:    .cfi_offset w30, -16
2298 ; CHECK-NEXT:    bl nearbyintl
2299 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2300 ; CHECK-NEXT:    ret
2301   %val = call fp128 @llvm.experimental.constrained.nearbyint.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2302   ret fp128 %val
2305 define i32 @lrint_f128(fp128 %x) #0 {
2306 ; CHECK-LABEL: lrint_f128:
2307 ; CHECK:       // %bb.0:
2308 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2309 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2310 ; CHECK-NEXT:    .cfi_offset w30, -16
2311 ; CHECK-NEXT:    bl lrintl
2312 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2313 ; CHECK-NEXT:    ret
2314   %val = call i32 @llvm.experimental.constrained.lrint.i32.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2315   ret i32 %val
2318 define i64 @llrint_f128(fp128 %x) #0 {
2319 ; CHECK-LABEL: llrint_f128:
2320 ; CHECK:       // %bb.0:
2321 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2322 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2323 ; CHECK-NEXT:    .cfi_offset w30, -16
2324 ; CHECK-NEXT:    bl llrintl
2325 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2326 ; CHECK-NEXT:    ret
2327   %val = call i64 @llvm.experimental.constrained.llrint.i64.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2328   ret i64 %val
2331 define fp128 @maxnum_f128(fp128 %x, fp128 %y) #0 {
2332 ; CHECK-LABEL: maxnum_f128:
2333 ; CHECK:       // %bb.0:
2334 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2335 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2336 ; CHECK-NEXT:    .cfi_offset w30, -16
2337 ; CHECK-NEXT:    bl fmaxl
2338 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2339 ; CHECK-NEXT:    ret
2340   %val = call fp128 @llvm.experimental.constrained.maxnum.f128(fp128 %x, fp128 %y, metadata !"fpexcept.strict") #0
2341   ret fp128 %val
2344 define fp128 @minnum_f128(fp128 %x, fp128 %y) #0 {
2345 ; CHECK-LABEL: minnum_f128:
2346 ; CHECK:       // %bb.0:
2347 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2348 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2349 ; CHECK-NEXT:    .cfi_offset w30, -16
2350 ; CHECK-NEXT:    bl fminl
2351 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2352 ; CHECK-NEXT:    ret
2353   %val = call fp128 @llvm.experimental.constrained.minnum.f128(fp128 %x, fp128 %y, metadata !"fpexcept.strict") #0
2354   ret fp128 %val
2357 define fp128 @ceil_f128(fp128 %x) #0 {
2358 ; CHECK-LABEL: ceil_f128:
2359 ; CHECK:       // %bb.0:
2360 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2361 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2362 ; CHECK-NEXT:    .cfi_offset w30, -16
2363 ; CHECK-NEXT:    bl ceill
2364 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2365 ; CHECK-NEXT:    ret
2366   %val = call fp128 @llvm.experimental.constrained.ceil.f128(fp128 %x, metadata !"fpexcept.strict") #0
2367   ret fp128 %val
2370 define fp128 @floor_f128(fp128 %x) #0 {
2371 ; CHECK-LABEL: floor_f128:
2372 ; CHECK:       // %bb.0:
2373 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2374 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2375 ; CHECK-NEXT:    .cfi_offset w30, -16
2376 ; CHECK-NEXT:    bl floorl
2377 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2378 ; CHECK-NEXT:    ret
2379   %val = call fp128 @llvm.experimental.constrained.floor.f128(fp128 %x, metadata !"fpexcept.strict") #0
2380   ret fp128 %val
2383 define i32 @lround_f128(fp128 %x) #0 {
2384 ; CHECK-LABEL: lround_f128:
2385 ; CHECK:       // %bb.0:
2386 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2387 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2388 ; CHECK-NEXT:    .cfi_offset w30, -16
2389 ; CHECK-NEXT:    bl lroundl
2390 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2391 ; CHECK-NEXT:    ret
2392   %val = call i32 @llvm.experimental.constrained.lround.i32.f128(fp128 %x, metadata !"fpexcept.strict") #0
2393   ret i32 %val
2396 define i64 @llround_f128(fp128 %x) #0 {
2397 ; CHECK-LABEL: llround_f128:
2398 ; CHECK:       // %bb.0:
2399 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2400 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2401 ; CHECK-NEXT:    .cfi_offset w30, -16
2402 ; CHECK-NEXT:    bl llroundl
2403 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2404 ; CHECK-NEXT:    ret
2405   %val = call i64 @llvm.experimental.constrained.llround.i64.f128(fp128 %x, metadata !"fpexcept.strict") #0
2406   ret i64 %val
2409 define fp128 @round_f128(fp128 %x) #0 {
2410 ; CHECK-LABEL: round_f128:
2411 ; CHECK:       // %bb.0:
2412 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2413 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2414 ; CHECK-NEXT:    .cfi_offset w30, -16
2415 ; CHECK-NEXT:    bl roundl
2416 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2417 ; CHECK-NEXT:    ret
2418   %val = call fp128 @llvm.experimental.constrained.round.f128(fp128 %x, metadata !"fpexcept.strict") #0
2419   ret fp128 %val
2422 define fp128 @trunc_f128(fp128 %x) #0 {
2423 ; CHECK-LABEL: trunc_f128:
2424 ; CHECK:       // %bb.0:
2425 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2426 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2427 ; CHECK-NEXT:    .cfi_offset w30, -16
2428 ; CHECK-NEXT:    bl truncl
2429 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2430 ; CHECK-NEXT:    ret
2431   %val = call fp128 @llvm.experimental.constrained.trunc.f128(fp128 %x, metadata !"fpexcept.strict") #0
2432   ret fp128 %val
2435 define i32 @fcmp_olt_f128(fp128 %a, fp128 %b) #0 {
2436 ; CHECK-LABEL: fcmp_olt_f128:
2437 ; CHECK:       // %bb.0:
2438 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2439 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2440 ; CHECK-NEXT:    .cfi_offset w30, -16
2441 ; CHECK-NEXT:    bl __lttf2
2442 ; CHECK-NEXT:    cmp w0, #0
2443 ; CHECK-NEXT:    cset w0, lt
2444 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2445 ; CHECK-NEXT:    ret
2446   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0
2447   %conv = zext i1 %cmp to i32
2448   ret i32 %conv
2451 define i32 @fcmp_ole_f128(fp128 %a, fp128 %b) #0 {
2452 ; CHECK-LABEL: fcmp_ole_f128:
2453 ; CHECK:       // %bb.0:
2454 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2455 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2456 ; CHECK-NEXT:    .cfi_offset w30, -16
2457 ; CHECK-NEXT:    bl __letf2
2458 ; CHECK-NEXT:    cmp w0, #0
2459 ; CHECK-NEXT:    cset w0, le
2460 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2461 ; CHECK-NEXT:    ret
2462   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0
2463   %conv = zext i1 %cmp to i32
2464   ret i32 %conv
2467 define i32 @fcmp_ogt_f128(fp128 %a, fp128 %b) #0 {
2468 ; CHECK-LABEL: fcmp_ogt_f128:
2469 ; CHECK:       // %bb.0:
2470 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2471 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2472 ; CHECK-NEXT:    .cfi_offset w30, -16
2473 ; CHECK-NEXT:    bl __gttf2
2474 ; CHECK-NEXT:    cmp w0, #0
2475 ; CHECK-NEXT:    cset w0, gt
2476 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2477 ; CHECK-NEXT:    ret
2478   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0
2479   %conv = zext i1 %cmp to i32
2480   ret i32 %conv
2483 define i32 @fcmp_oge_f128(fp128 %a, fp128 %b) #0 {
2484 ; CHECK-LABEL: fcmp_oge_f128:
2485 ; CHECK:       // %bb.0:
2486 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2487 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2488 ; CHECK-NEXT:    .cfi_offset w30, -16
2489 ; CHECK-NEXT:    bl __getf2
2490 ; CHECK-NEXT:    cmp w0, #0
2491 ; CHECK-NEXT:    cset w0, ge
2492 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2493 ; CHECK-NEXT:    ret
2494   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0
2495   %conv = zext i1 %cmp to i32
2496   ret i32 %conv
2499 define i32 @fcmp_oeq_f128(fp128 %a, fp128 %b) #0 {
2500 ; CHECK-LABEL: fcmp_oeq_f128:
2501 ; CHECK:       // %bb.0:
2502 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2503 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2504 ; CHECK-NEXT:    .cfi_offset w30, -16
2505 ; CHECK-NEXT:    bl __eqtf2
2506 ; CHECK-NEXT:    cmp w0, #0
2507 ; CHECK-NEXT:    cset w0, eq
2508 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2509 ; CHECK-NEXT:    ret
2510   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0
2511   %conv = zext i1 %cmp to i32
2512   ret i32 %conv
2515 define i32 @fcmp_one_f128(fp128 %a, fp128 %b) #0 {
2516 ; CHECK-LABEL: fcmp_one_f128:
2517 ; CHECK:       // %bb.0:
2518 ; CHECK-NEXT:    sub sp, sp, #48
2519 ; CHECK-NEXT:    stp x30, x19, [sp, #32] // 16-byte Folded Spill
2520 ; CHECK-NEXT:    .cfi_def_cfa_offset 48
2521 ; CHECK-NEXT:    .cfi_offset w19, -8
2522 ; CHECK-NEXT:    .cfi_offset w30, -16
2523 ; CHECK-NEXT:    stp q0, q1, [sp] // 32-byte Folded Spill
2524 ; CHECK-NEXT:    bl __eqtf2
2525 ; CHECK-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload
2526 ; CHECK-NEXT:    mov w19, w0
2527 ; CHECK-NEXT:    bl __unordtf2
2528 ; CHECK-NEXT:    cmp w0, #0
2529 ; CHECK-NEXT:    ccmp w19, #0, #4, eq
2530 ; CHECK-NEXT:    ldp x30, x19, [sp, #32] // 16-byte Folded Reload
2531 ; CHECK-NEXT:    cset w0, ne
2532 ; CHECK-NEXT:    add sp, sp, #48
2533 ; CHECK-NEXT:    ret
2534   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0
2535   %conv = zext i1 %cmp to i32
2536   ret i32 %conv
2539 define i32 @fcmp_ult_f128(fp128 %a, fp128 %b) #0 {
2540 ; CHECK-LABEL: fcmp_ult_f128:
2541 ; CHECK:       // %bb.0:
2542 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2543 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2544 ; CHECK-NEXT:    .cfi_offset w30, -16
2545 ; CHECK-NEXT:    bl __getf2
2546 ; CHECK-NEXT:    cmp w0, #0
2547 ; CHECK-NEXT:    cset w0, lt
2548 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2549 ; CHECK-NEXT:    ret
2550   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0
2551   %conv = zext i1 %cmp to i32
2552   ret i32 %conv
2555 define i32 @fcmp_ule_f128(fp128 %a, fp128 %b) #0 {
2556 ; CHECK-LABEL: fcmp_ule_f128:
2557 ; CHECK:       // %bb.0:
2558 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2559 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2560 ; CHECK-NEXT:    .cfi_offset w30, -16
2561 ; CHECK-NEXT:    bl __gttf2
2562 ; CHECK-NEXT:    cmp w0, #0
2563 ; CHECK-NEXT:    cset w0, le
2564 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2565 ; CHECK-NEXT:    ret
2566   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0
2567   %conv = zext i1 %cmp to i32
2568   ret i32 %conv
2571 define i32 @fcmp_ugt_f128(fp128 %a, fp128 %b) #0 {
2572 ; CHECK-LABEL: fcmp_ugt_f128:
2573 ; CHECK:       // %bb.0:
2574 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2575 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2576 ; CHECK-NEXT:    .cfi_offset w30, -16
2577 ; CHECK-NEXT:    bl __letf2
2578 ; CHECK-NEXT:    cmp w0, #0
2579 ; CHECK-NEXT:    cset w0, gt
2580 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2581 ; CHECK-NEXT:    ret
2582   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0
2583   %conv = zext i1 %cmp to i32
2584   ret i32 %conv
2587 define i32 @fcmp_uge_f128(fp128 %a, fp128 %b) #0 {
2588 ; CHECK-LABEL: fcmp_uge_f128:
2589 ; CHECK:       // %bb.0:
2590 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2591 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2592 ; CHECK-NEXT:    .cfi_offset w30, -16
2593 ; CHECK-NEXT:    bl __lttf2
2594 ; CHECK-NEXT:    cmp w0, #0
2595 ; CHECK-NEXT:    cset w0, ge
2596 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2597 ; CHECK-NEXT:    ret
2598   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0
2599   %conv = zext i1 %cmp to i32
2600   ret i32 %conv
2603 define i32 @fcmp_ueq_f128(fp128 %a, fp128 %b) #0 {
2604 ; CHECK-LABEL: fcmp_ueq_f128:
2605 ; CHECK:       // %bb.0:
2606 ; CHECK-NEXT:    sub sp, sp, #48
2607 ; CHECK-NEXT:    stp x30, x19, [sp, #32] // 16-byte Folded Spill
2608 ; CHECK-NEXT:    .cfi_def_cfa_offset 48
2609 ; CHECK-NEXT:    .cfi_offset w19, -8
2610 ; CHECK-NEXT:    .cfi_offset w30, -16
2611 ; CHECK-NEXT:    stp q0, q1, [sp] // 32-byte Folded Spill
2612 ; CHECK-NEXT:    bl __eqtf2
2613 ; CHECK-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload
2614 ; CHECK-NEXT:    mov w19, w0
2615 ; CHECK-NEXT:    bl __unordtf2
2616 ; CHECK-NEXT:    cmp w0, #0
2617 ; CHECK-NEXT:    ccmp w19, #0, #4, eq
2618 ; CHECK-NEXT:    ldp x30, x19, [sp, #32] // 16-byte Folded Reload
2619 ; CHECK-NEXT:    cset w0, eq
2620 ; CHECK-NEXT:    add sp, sp, #48
2621 ; CHECK-NEXT:    ret
2622   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0
2623   %conv = zext i1 %cmp to i32
2624   ret i32 %conv
2627 define i32 @fcmp_une_f128(fp128 %a, fp128 %b) #0 {
2628 ; CHECK-LABEL: fcmp_une_f128:
2629 ; CHECK:       // %bb.0:
2630 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2631 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2632 ; CHECK-NEXT:    .cfi_offset w30, -16
2633 ; CHECK-NEXT:    bl __netf2
2634 ; CHECK-NEXT:    cmp w0, #0
2635 ; CHECK-NEXT:    cset w0, ne
2636 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2637 ; CHECK-NEXT:    ret
2638   %cmp = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0
2639   %conv = zext i1 %cmp to i32
2640   ret i32 %conv
2643 define i32 @fcmps_olt_f128(fp128 %a, fp128 %b) #0 {
2644 ; CHECK-LABEL: fcmps_olt_f128:
2645 ; CHECK:       // %bb.0:
2646 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2647 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2648 ; CHECK-NEXT:    .cfi_offset w30, -16
2649 ; CHECK-NEXT:    bl __lttf2
2650 ; CHECK-NEXT:    cmp w0, #0
2651 ; CHECK-NEXT:    cset w0, lt
2652 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2653 ; CHECK-NEXT:    ret
2654   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"olt", metadata !"fpexcept.strict") #0
2655   %conv = zext i1 %cmp to i32
2656   ret i32 %conv
2659 define i32 @fcmps_ole_f128(fp128 %a, fp128 %b) #0 {
2660 ; CHECK-LABEL: fcmps_ole_f128:
2661 ; CHECK:       // %bb.0:
2662 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2663 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2664 ; CHECK-NEXT:    .cfi_offset w30, -16
2665 ; CHECK-NEXT:    bl __letf2
2666 ; CHECK-NEXT:    cmp w0, #0
2667 ; CHECK-NEXT:    cset w0, le
2668 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2669 ; CHECK-NEXT:    ret
2670   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") #0
2671   %conv = zext i1 %cmp to i32
2672   ret i32 %conv
2675 define i32 @fcmps_ogt_f128(fp128 %a, fp128 %b) #0 {
2676 ; CHECK-LABEL: fcmps_ogt_f128:
2677 ; CHECK:       // %bb.0:
2678 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2679 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2680 ; CHECK-NEXT:    .cfi_offset w30, -16
2681 ; CHECK-NEXT:    bl __gttf2
2682 ; CHECK-NEXT:    cmp w0, #0
2683 ; CHECK-NEXT:    cset w0, gt
2684 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2685 ; CHECK-NEXT:    ret
2686   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") #0
2687   %conv = zext i1 %cmp to i32
2688   ret i32 %conv
2691 define i32 @fcmps_oge_f128(fp128 %a, fp128 %b) #0 {
2692 ; CHECK-LABEL: fcmps_oge_f128:
2693 ; CHECK:       // %bb.0:
2694 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2695 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2696 ; CHECK-NEXT:    .cfi_offset w30, -16
2697 ; CHECK-NEXT:    bl __getf2
2698 ; CHECK-NEXT:    cmp w0, #0
2699 ; CHECK-NEXT:    cset w0, ge
2700 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2701 ; CHECK-NEXT:    ret
2702   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") #0
2703   %conv = zext i1 %cmp to i32
2704   ret i32 %conv
2707 define i32 @fcmps_oeq_f128(fp128 %a, fp128 %b) #0 {
2708 ; CHECK-LABEL: fcmps_oeq_f128:
2709 ; CHECK:       // %bb.0:
2710 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2711 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2712 ; CHECK-NEXT:    .cfi_offset w30, -16
2713 ; CHECK-NEXT:    bl __eqtf2
2714 ; CHECK-NEXT:    cmp w0, #0
2715 ; CHECK-NEXT:    cset w0, eq
2716 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2717 ; CHECK-NEXT:    ret
2718   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") #0
2719   %conv = zext i1 %cmp to i32
2720   ret i32 %conv
2723 define i32 @fcmps_one_f128(fp128 %a, fp128 %b) #0 {
2724 ; CHECK-LABEL: fcmps_one_f128:
2725 ; CHECK:       // %bb.0:
2726 ; CHECK-NEXT:    sub sp, sp, #48
2727 ; CHECK-NEXT:    stp x30, x19, [sp, #32] // 16-byte Folded Spill
2728 ; CHECK-NEXT:    .cfi_def_cfa_offset 48
2729 ; CHECK-NEXT:    .cfi_offset w19, -8
2730 ; CHECK-NEXT:    .cfi_offset w30, -16
2731 ; CHECK-NEXT:    stp q0, q1, [sp] // 32-byte Folded Spill
2732 ; CHECK-NEXT:    bl __eqtf2
2733 ; CHECK-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload
2734 ; CHECK-NEXT:    mov w19, w0
2735 ; CHECK-NEXT:    bl __unordtf2
2736 ; CHECK-NEXT:    cmp w0, #0
2737 ; CHECK-NEXT:    ccmp w19, #0, #4, eq
2738 ; CHECK-NEXT:    ldp x30, x19, [sp, #32] // 16-byte Folded Reload
2739 ; CHECK-NEXT:    cset w0, ne
2740 ; CHECK-NEXT:    add sp, sp, #48
2741 ; CHECK-NEXT:    ret
2742   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") #0
2743   %conv = zext i1 %cmp to i32
2744   ret i32 %conv
2747 define i32 @fcmps_ult_f128(fp128 %a, fp128 %b) #0 {
2748 ; CHECK-LABEL: fcmps_ult_f128:
2749 ; CHECK:       // %bb.0:
2750 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2751 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2752 ; CHECK-NEXT:    .cfi_offset w30, -16
2753 ; CHECK-NEXT:    bl __getf2
2754 ; CHECK-NEXT:    cmp w0, #0
2755 ; CHECK-NEXT:    cset w0, lt
2756 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2757 ; CHECK-NEXT:    ret
2758   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") #0
2759   %conv = zext i1 %cmp to i32
2760   ret i32 %conv
2763 define i32 @fcmps_ule_f128(fp128 %a, fp128 %b) #0 {
2764 ; CHECK-LABEL: fcmps_ule_f128:
2765 ; CHECK:       // %bb.0:
2766 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2767 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2768 ; CHECK-NEXT:    .cfi_offset w30, -16
2769 ; CHECK-NEXT:    bl __gttf2
2770 ; CHECK-NEXT:    cmp w0, #0
2771 ; CHECK-NEXT:    cset w0, le
2772 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2773 ; CHECK-NEXT:    ret
2774   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") #0
2775   %conv = zext i1 %cmp to i32
2776   ret i32 %conv
2779 define i32 @fcmps_ugt_f128(fp128 %a, fp128 %b) #0 {
2780 ; CHECK-LABEL: fcmps_ugt_f128:
2781 ; CHECK:       // %bb.0:
2782 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2783 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2784 ; CHECK-NEXT:    .cfi_offset w30, -16
2785 ; CHECK-NEXT:    bl __letf2
2786 ; CHECK-NEXT:    cmp w0, #0
2787 ; CHECK-NEXT:    cset w0, gt
2788 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2789 ; CHECK-NEXT:    ret
2790   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") #0
2791   %conv = zext i1 %cmp to i32
2792   ret i32 %conv
2795 define i32 @fcmps_uge_f128(fp128 %a, fp128 %b) #0 {
2796 ; CHECK-LABEL: fcmps_uge_f128:
2797 ; CHECK:       // %bb.0:
2798 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2799 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2800 ; CHECK-NEXT:    .cfi_offset w30, -16
2801 ; CHECK-NEXT:    bl __lttf2
2802 ; CHECK-NEXT:    cmp w0, #0
2803 ; CHECK-NEXT:    cset w0, ge
2804 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2805 ; CHECK-NEXT:    ret
2806   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") #0
2807   %conv = zext i1 %cmp to i32
2808   ret i32 %conv
2811 define i32 @fcmps_ueq_f128(fp128 %a, fp128 %b) #0 {
2812 ; CHECK-LABEL: fcmps_ueq_f128:
2813 ; CHECK:       // %bb.0:
2814 ; CHECK-NEXT:    sub sp, sp, #48
2815 ; CHECK-NEXT:    stp x30, x19, [sp, #32] // 16-byte Folded Spill
2816 ; CHECK-NEXT:    .cfi_def_cfa_offset 48
2817 ; CHECK-NEXT:    .cfi_offset w19, -8
2818 ; CHECK-NEXT:    .cfi_offset w30, -16
2819 ; CHECK-NEXT:    stp q0, q1, [sp] // 32-byte Folded Spill
2820 ; CHECK-NEXT:    bl __eqtf2
2821 ; CHECK-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload
2822 ; CHECK-NEXT:    mov w19, w0
2823 ; CHECK-NEXT:    bl __unordtf2
2824 ; CHECK-NEXT:    cmp w0, #0
2825 ; CHECK-NEXT:    ccmp w19, #0, #4, eq
2826 ; CHECK-NEXT:    ldp x30, x19, [sp, #32] // 16-byte Folded Reload
2827 ; CHECK-NEXT:    cset w0, eq
2828 ; CHECK-NEXT:    add sp, sp, #48
2829 ; CHECK-NEXT:    ret
2830   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") #0
2831   %conv = zext i1 %cmp to i32
2832   ret i32 %conv
2835 define i32 @fcmps_une_f128(fp128 %a, fp128 %b) #0 {
2836 ; CHECK-LABEL: fcmps_une_f128:
2837 ; CHECK:       // %bb.0:
2838 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2839 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2840 ; CHECK-NEXT:    .cfi_offset w30, -16
2841 ; CHECK-NEXT:    bl __netf2
2842 ; CHECK-NEXT:    cmp w0, #0
2843 ; CHECK-NEXT:    cset w0, ne
2844 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2845 ; CHECK-NEXT:    ret
2846   %cmp = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") #0
2847   %conv = zext i1 %cmp to i32
2848   ret i32 %conv
2852 ; Intrinsics to convert between floating-point types
2854 define float @fptrunc_f32_f64(double %x) #0 {
2855 ; CHECK-LABEL: fptrunc_f32_f64:
2856 ; CHECK:       // %bb.0:
2857 ; CHECK-NEXT:    fcvt s0, d0
2858 ; CHECK-NEXT:    ret
2859   %val = call float @llvm.experimental.constrained.fptrunc.f32.f64(double %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2860   ret float %val
2863 define float @fptrunc_f32_f128(fp128 %x) #0 {
2864 ; CHECK-LABEL: fptrunc_f32_f128:
2865 ; CHECK:       // %bb.0:
2866 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2867 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2868 ; CHECK-NEXT:    .cfi_offset w30, -16
2869 ; CHECK-NEXT:    bl __trunctfsf2
2870 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2871 ; CHECK-NEXT:    ret
2872   %val = call float @llvm.experimental.constrained.fptrunc.f32.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2873   ret float %val
2876 define double @fptrunc_f64_f128(fp128 %x) #0 {
2877 ; CHECK-LABEL: fptrunc_f64_f128:
2878 ; CHECK:       // %bb.0:
2879 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2880 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2881 ; CHECK-NEXT:    .cfi_offset w30, -16
2882 ; CHECK-NEXT:    bl __trunctfdf2
2883 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2884 ; CHECK-NEXT:    ret
2885   %val = call double @llvm.experimental.constrained.fptrunc.f64.f128(fp128 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2886   ret double %val
2889 define double @fpext_f64_f32(float %x) #0 {
2890 ; CHECK-LABEL: fpext_f64_f32:
2891 ; CHECK:       // %bb.0:
2892 ; CHECK-NEXT:    fcvt d0, s0
2893 ; CHECK-NEXT:    ret
2894   %val = call double @llvm.experimental.constrained.fpext.f64.f32(float %x, metadata !"fpexcept.strict") #0
2895   ret double %val
2898 define fp128 @fpext_f128_f32(float %x) #0 {
2899 ; CHECK-LABEL: fpext_f128_f32:
2900 ; CHECK:       // %bb.0:
2901 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2902 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2903 ; CHECK-NEXT:    .cfi_offset w30, -16
2904 ; CHECK-NEXT:    bl __extendsftf2
2905 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2906 ; CHECK-NEXT:    ret
2907   %val = call fp128 @llvm.experimental.constrained.fpext.f128.f32(float %x, metadata !"fpexcept.strict") #0
2908   ret fp128 %val
2911 define fp128 @fpext_f128_f64(double %x) #0 {
2912 ; CHECK-LABEL: fpext_f128_f64:
2913 ; CHECK:       // %bb.0:
2914 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2915 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2916 ; CHECK-NEXT:    .cfi_offset w30, -16
2917 ; CHECK-NEXT:    bl __extenddftf2
2918 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2919 ; CHECK-NEXT:    ret
2920   %val = call fp128 @llvm.experimental.constrained.fpext.f128.f64(double %x, metadata !"fpexcept.strict") #0
2921   ret fp128 %val
2924 define <1 x double> @sin_v1f64(<1 x double> %x, <1 x double> %y) #0 {
2925 ; CHECK-LABEL: sin_v1f64:
2926 ; CHECK:       // %bb.0:
2927 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2928 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2929 ; CHECK-NEXT:    .cfi_offset w30, -16
2930 ; CHECK-NEXT:    bl sin
2931 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2932 ; CHECK-NEXT:    ret
2933   %val = call <1 x double> @llvm.experimental.constrained.sin.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2934   ret <1 x double> %val
2937 define <1 x double> @cos_v1f64(<1 x double> %x, <1 x double> %y) #0 {
2938 ; CHECK-LABEL: cos_v1f64:
2939 ; CHECK:       // %bb.0:
2940 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2941 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2942 ; CHECK-NEXT:    .cfi_offset w30, -16
2943 ; CHECK-NEXT:    bl cos
2944 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2945 ; CHECK-NEXT:    ret
2946   %val = call <1 x double> @llvm.experimental.constrained.cos.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2947   ret <1 x double> %val
2950 define <1 x double> @tan_v1f64(<1 x double> %x, <1 x double> %y) #0 {
2951 ; CHECK-LABEL: tan_v1f64:
2952 ; CHECK:       // %bb.0:
2953 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2954 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2955 ; CHECK-NEXT:    .cfi_offset w30, -16
2956 ; CHECK-NEXT:    bl tan
2957 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2958 ; CHECK-NEXT:    ret
2959   %val = call <1 x double> @llvm.experimental.constrained.tan.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2960   ret <1 x double> %val
2963 define <1 x double> @asin_v1f64(<1 x double> %x, <1 x double> %y) #0 {
2964 ; CHECK-LABEL: asin_v1f64:
2965 ; CHECK:       // %bb.0:
2966 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2967 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2968 ; CHECK-NEXT:    .cfi_offset w30, -16
2969 ; CHECK-NEXT:    bl asin
2970 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2971 ; CHECK-NEXT:    ret
2972   %val = call <1 x double> @llvm.experimental.constrained.asin.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2973   ret <1 x double> %val
2976 define <1 x double> @acos_v1f64(<1 x double> %x, <1 x double> %y) #0 {
2977 ; CHECK-LABEL: acos_v1f64:
2978 ; CHECK:       // %bb.0:
2979 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2980 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2981 ; CHECK-NEXT:    .cfi_offset w30, -16
2982 ; CHECK-NEXT:    bl acos
2983 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2984 ; CHECK-NEXT:    ret
2985   %val = call <1 x double> @llvm.experimental.constrained.acos.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2986   ret <1 x double> %val
2989 define <1 x double> @atan_v1f64(<1 x double> %x, <1 x double> %y) #0 {
2990 ; CHECK-LABEL: atan_v1f64:
2991 ; CHECK:       // %bb.0:
2992 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
2993 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
2994 ; CHECK-NEXT:    .cfi_offset w30, -16
2995 ; CHECK-NEXT:    bl atan
2996 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
2997 ; CHECK-NEXT:    ret
2998   %val = call <1 x double> @llvm.experimental.constrained.atan.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
2999   ret <1 x double> %val
3002 define <1 x double> @atan2_v1f64(<1 x double> %x, <1 x double> %y) #0 {
3003 ; CHECK-LABEL: atan2_v1f64:
3004 ; CHECK:       // %bb.0:
3005 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
3006 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
3007 ; CHECK-NEXT:    .cfi_offset w30, -16
3008 ; CHECK-NEXT:    bl atan2
3009 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
3010 ; CHECK-NEXT:    ret
3011   %val = call <1 x double> @llvm.experimental.constrained.atan2.v1f64(<1 x double> %x, <1 x double> %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
3012   ret <1 x double> %val
3015 define <1 x double> @sinh_v1f64(<1 x double> %x, <1 x double> %y) #0 {
3016 ; CHECK-LABEL: sinh_v1f64:
3017 ; CHECK:       // %bb.0:
3018 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
3019 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
3020 ; CHECK-NEXT:    .cfi_offset w30, -16
3021 ; CHECK-NEXT:    bl sinh
3022 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
3023 ; CHECK-NEXT:    ret
3024   %val = call <1 x double> @llvm.experimental.constrained.sinh.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
3025   ret <1 x double> %val
3028 define <1 x double> @cosh_v1f64(<1 x double> %x, <1 x double> %y) #0 {
3029 ; CHECK-LABEL: cosh_v1f64:
3030 ; CHECK:       // %bb.0:
3031 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
3032 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
3033 ; CHECK-NEXT:    .cfi_offset w30, -16
3034 ; CHECK-NEXT:    bl cosh
3035 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
3036 ; CHECK-NEXT:    ret
3037   %val = call <1 x double> @llvm.experimental.constrained.cosh.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
3038   ret <1 x double> %val
3041 define <1 x double> @tanh_v1f64(<1 x double> %x, <1 x double> %y) #0 {
3042 ; CHECK-LABEL: tanh_v1f64:
3043 ; CHECK:       // %bb.0:
3044 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
3045 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
3046 ; CHECK-NEXT:    .cfi_offset w30, -16
3047 ; CHECK-NEXT:    bl tanh
3048 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
3049 ; CHECK-NEXT:    ret
3050   %val = call <1 x double> @llvm.experimental.constrained.tanh.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
3051   ret <1 x double> %val
3054 define <1 x double> @pow_v1f64(<1 x double> %x, <1 x double> %y) #0 {
3055 ; CHECK-LABEL: pow_v1f64:
3056 ; CHECK:       // %bb.0:
3057 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
3058 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
3059 ; CHECK-NEXT:    .cfi_offset w30, -16
3060 ; CHECK-NEXT:    bl pow
3061 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
3062 ; CHECK-NEXT:    ret
3063   %val = call <1 x double> @llvm.experimental.constrained.pow.v1f64(<1 x double> %x, <1 x double> %y, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
3064   ret <1 x double> %val
3067 define <1 x double> @log_v1f64(<1 x double> %x, <1 x double> %y) #0 {
3068 ; CHECK-LABEL: log_v1f64:
3069 ; CHECK:       // %bb.0:
3070 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
3071 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
3072 ; CHECK-NEXT:    .cfi_offset w30, -16
3073 ; CHECK-NEXT:    bl log
3074 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
3075 ; CHECK-NEXT:    ret
3076   %val = call <1 x double> @llvm.experimental.constrained.log.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
3077   ret <1 x double> %val
3080 define <1 x double> @log2_v1f64(<1 x double> %x, <1 x double> %y) #0 {
3081 ; CHECK-LABEL: log2_v1f64:
3082 ; CHECK:       // %bb.0:
3083 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
3084 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
3085 ; CHECK-NEXT:    .cfi_offset w30, -16
3086 ; CHECK-NEXT:    bl log2
3087 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
3088 ; CHECK-NEXT:    ret
3089   %val = call <1 x double> @llvm.experimental.constrained.log2.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
3090   ret <1 x double> %val
3093 define <1 x double> @log10_v1f64(<1 x double> %x, <1 x double> %y) #0 {
3094 ; CHECK-LABEL: log10_v1f64:
3095 ; CHECK:       // %bb.0:
3096 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
3097 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
3098 ; CHECK-NEXT:    .cfi_offset w30, -16
3099 ; CHECK-NEXT:    bl log10
3100 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
3101 ; CHECK-NEXT:    ret
3102   %val = call <1 x double> @llvm.experimental.constrained.log10.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
3103   ret <1 x double> %val
3106 define <1 x double> @exp_v1f64(<1 x double> %x, <1 x double> %y) #0 {
3107 ; CHECK-LABEL: exp_v1f64:
3108 ; CHECK:       // %bb.0:
3109 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
3110 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
3111 ; CHECK-NEXT:    .cfi_offset w30, -16
3112 ; CHECK-NEXT:    bl exp
3113 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
3114 ; CHECK-NEXT:    ret
3115   %val = call <1 x double> @llvm.experimental.constrained.exp.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
3116   ret <1 x double> %val
3119 define <1 x double> @exp2_v1f64(<1 x double> %x, <1 x double> %y) #0 {
3120 ; CHECK-LABEL: exp2_v1f64:
3121 ; CHECK:       // %bb.0:
3122 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
3123 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
3124 ; CHECK-NEXT:    .cfi_offset w30, -16
3125 ; CHECK-NEXT:    bl exp2
3126 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
3127 ; CHECK-NEXT:    ret
3128   %val = call <1 x double> @llvm.experimental.constrained.exp2.v1f64(<1 x double> %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0
3129   ret <1 x double> %val
3132 attributes #0 = { strictfp }
3134 declare float @llvm.experimental.constrained.fadd.f32(float, float, metadata, metadata)
3135 declare float @llvm.experimental.constrained.fsub.f32(float, float, metadata, metadata)
3136 declare float @llvm.experimental.constrained.fmul.f32(float, float, metadata, metadata)
3137 declare float @llvm.experimental.constrained.fdiv.f32(float, float, metadata, metadata)
3138 declare float @llvm.experimental.constrained.frem.f32(float, float, metadata, metadata)
3139 declare float @llvm.experimental.constrained.fma.f32(float, float, float, metadata, metadata)
3140 declare i32 @llvm.experimental.constrained.fptosi.i32.f32(float, metadata)
3141 declare i32 @llvm.experimental.constrained.fptoui.i32.f32(float, metadata)
3142 declare i64 @llvm.experimental.constrained.fptosi.i64.f32(float, metadata)
3143 declare i64 @llvm.experimental.constrained.fptoui.i64.f32(float, metadata)
3144 declare float @llvm.experimental.constrained.sitofp.f32.i32(i32, metadata, metadata)
3145 declare float @llvm.experimental.constrained.uitofp.f32.i32(i32, metadata, metadata)
3146 declare float @llvm.experimental.constrained.sitofp.f32.i64(i64, metadata, metadata)
3147 declare float @llvm.experimental.constrained.uitofp.f32.i64(i64, metadata, metadata)
3148 declare float @llvm.experimental.constrained.sitofp.f32.i128(i128, metadata, metadata)
3149 declare float @llvm.experimental.constrained.uitofp.f32.i128(i128, metadata, metadata)
3150 declare float @llvm.experimental.constrained.sqrt.f32(float, metadata, metadata)
3151 declare float @llvm.experimental.constrained.powi.f32(float, i32, metadata, metadata)
3152 declare float @llvm.experimental.constrained.sin.f32(float, metadata, metadata)
3153 declare float @llvm.experimental.constrained.cos.f32(float, metadata, metadata)
3154 declare float @llvm.experimental.constrained.tan.f32(float, metadata, metadata)
3155 declare float @llvm.experimental.constrained.asin.f32(float, metadata, metadata)
3156 declare float @llvm.experimental.constrained.acos.f32(float, metadata, metadata)
3157 declare float @llvm.experimental.constrained.atan.f32(float, metadata, metadata)
3158 declare float @llvm.experimental.constrained.atan2.f32(float, float, metadata, metadata)
3159 declare float @llvm.experimental.constrained.sinh.f32(float, metadata, metadata)
3160 declare float @llvm.experimental.constrained.cosh.f32(float, metadata, metadata)
3161 declare float @llvm.experimental.constrained.tanh.f32(float, metadata, metadata)
3162 declare float @llvm.experimental.constrained.pow.f32(float, float, metadata, metadata)
3163 declare float @llvm.experimental.constrained.log.f32(float, metadata, metadata)
3164 declare float @llvm.experimental.constrained.log10.f32(float, metadata, metadata)
3165 declare float @llvm.experimental.constrained.log2.f32(float, metadata, metadata)
3166 declare float @llvm.experimental.constrained.exp.f32(float, metadata, metadata)
3167 declare float @llvm.experimental.constrained.exp2.f32(float, metadata, metadata)
3168 declare float @llvm.experimental.constrained.rint.f32(float, metadata, metadata)
3169 declare float @llvm.experimental.constrained.nearbyint.f32(float, metadata, metadata)
3170 declare i32 @llvm.experimental.constrained.lrint.i32.f32(float, metadata, metadata)
3171 declare i64 @llvm.experimental.constrained.llrint.i64.f32(float, metadata, metadata)
3172 declare float @llvm.experimental.constrained.maxnum.f32(float, float, metadata)
3173 declare float @llvm.experimental.constrained.minnum.f32(float, float, metadata)
3174 declare float @llvm.experimental.constrained.maximum.f32(float, float, metadata)
3175 declare float @llvm.experimental.constrained.minimum.f32(float, float, metadata)
3176 declare float @llvm.experimental.constrained.ceil.f32(float, metadata)
3177 declare float @llvm.experimental.constrained.floor.f32(float, metadata)
3178 declare i32 @llvm.experimental.constrained.lround.i32.f32(float, metadata)
3179 declare i64 @llvm.experimental.constrained.llround.i64.f32(float, metadata)
3180 declare float @llvm.experimental.constrained.round.f32(float, metadata)
3181 declare float @llvm.experimental.constrained.roundeven.f32(float, metadata)
3182 declare float @llvm.experimental.constrained.trunc.f32(float, metadata)
3183 declare i1 @llvm.experimental.constrained.fcmps.f32(float, float, metadata, metadata)
3184 declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata)
3186 declare double @llvm.experimental.constrained.fadd.f64(double, double, metadata, metadata)
3187 declare double @llvm.experimental.constrained.fsub.f64(double, double, metadata, metadata)
3188 declare double @llvm.experimental.constrained.fmul.f64(double, double, metadata, metadata)
3189 declare double @llvm.experimental.constrained.fdiv.f64(double, double, metadata, metadata)
3190 declare double @llvm.experimental.constrained.frem.f64(double, double, metadata, metadata)
3191 declare double @llvm.experimental.constrained.fma.f64(double, double, double, metadata, metadata)
3192 declare i32 @llvm.experimental.constrained.fptosi.i32.f64(double, metadata)
3193 declare i32 @llvm.experimental.constrained.fptoui.i32.f64(double, metadata)
3194 declare i64 @llvm.experimental.constrained.fptosi.i64.f64(double, metadata)
3195 declare i64 @llvm.experimental.constrained.fptoui.i64.f64(double, metadata)
3196 declare double @llvm.experimental.constrained.sitofp.f64.i32(i32, metadata, metadata)
3197 declare double @llvm.experimental.constrained.uitofp.f64.i32(i32, metadata, metadata)
3198 declare double @llvm.experimental.constrained.sitofp.f64.i64(i64, metadata, metadata)
3199 declare double @llvm.experimental.constrained.uitofp.f64.i64(i64, metadata, metadata)
3200 declare double @llvm.experimental.constrained.sitofp.f64.i128(i128, metadata, metadata)
3201 declare double @llvm.experimental.constrained.uitofp.f64.i128(i128, metadata, metadata)
3202 declare double @llvm.experimental.constrained.sqrt.f64(double, metadata, metadata)
3203 declare double @llvm.experimental.constrained.powi.f64(double, i32, metadata, metadata)
3204 declare double @llvm.experimental.constrained.sin.f64(double, metadata, metadata)
3205 declare double @llvm.experimental.constrained.cos.f64(double, metadata, metadata)
3206 declare double @llvm.experimental.constrained.tan.f64(double, metadata, metadata)
3207 declare double @llvm.experimental.constrained.asin.f64(double, metadata, metadata)
3208 declare double @llvm.experimental.constrained.acos.f64(double, metadata, metadata)
3209 declare double @llvm.experimental.constrained.atan.f64(double, metadata, metadata)
3210 declare double @llvm.experimental.constrained.atan2.f64(double, double, metadata, metadata)
3211 declare double @llvm.experimental.constrained.sinh.f64(double, metadata, metadata)
3212 declare double @llvm.experimental.constrained.cosh.f64(double, metadata, metadata)
3213 declare double @llvm.experimental.constrained.tanh.f64(double, metadata, metadata)
3214 declare double @llvm.experimental.constrained.pow.f64(double, double, metadata, metadata)
3215 declare double @llvm.experimental.constrained.log.f64(double, metadata, metadata)
3216 declare double @llvm.experimental.constrained.log10.f64(double, metadata, metadata)
3217 declare double @llvm.experimental.constrained.log2.f64(double, metadata, metadata)
3218 declare double @llvm.experimental.constrained.exp.f64(double, metadata, metadata)
3219 declare double @llvm.experimental.constrained.exp2.f64(double, metadata, metadata)
3220 declare double @llvm.experimental.constrained.rint.f64(double, metadata, metadata)
3221 declare double @llvm.experimental.constrained.nearbyint.f64(double, metadata, metadata)
3222 declare i32 @llvm.experimental.constrained.lrint.i32.f64(double, metadata, metadata)
3223 declare i64 @llvm.experimental.constrained.llrint.i64.f64(double, metadata, metadata)
3224 declare double @llvm.experimental.constrained.maxnum.f64(double, double, metadata)
3225 declare double @llvm.experimental.constrained.minnum.f64(double, double, metadata)
3226 declare double @llvm.experimental.constrained.maximum.f64(double, double, metadata)
3227 declare double @llvm.experimental.constrained.minimum.f64(double, double, metadata)
3228 declare double @llvm.experimental.constrained.ceil.f64(double, metadata)
3229 declare double @llvm.experimental.constrained.floor.f64(double, metadata)
3230 declare i32 @llvm.experimental.constrained.lround.i32.f64(double, metadata)
3231 declare i64 @llvm.experimental.constrained.llround.i64.f64(double, metadata)
3232 declare double @llvm.experimental.constrained.round.f64(double, metadata)
3233 declare double @llvm.experimental.constrained.roundeven.f64(double, metadata)
3234 declare double @llvm.experimental.constrained.trunc.f64(double, metadata)
3235 declare i1 @llvm.experimental.constrained.fcmps.f64(double, double, metadata, metadata)
3236 declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)
3238 declare fp128 @llvm.experimental.constrained.fadd.f128(fp128, fp128, metadata, metadata)
3239 declare fp128 @llvm.experimental.constrained.fsub.f128(fp128, fp128, metadata, metadata)
3240 declare fp128 @llvm.experimental.constrained.fmul.f128(fp128, fp128, metadata, metadata)
3241 declare fp128 @llvm.experimental.constrained.fdiv.f128(fp128, fp128, metadata, metadata)
3242 declare fp128 @llvm.experimental.constrained.frem.f128(fp128, fp128, metadata, metadata)
3243 declare fp128 @llvm.experimental.constrained.fma.f128(fp128, fp128, fp128, metadata, metadata)
3244 declare i32 @llvm.experimental.constrained.fptosi.i32.f128(fp128, metadata)
3245 declare i32 @llvm.experimental.constrained.fptoui.i32.f128(fp128, metadata)
3246 declare i64 @llvm.experimental.constrained.fptosi.i64.f128(fp128, metadata)
3247 declare i64 @llvm.experimental.constrained.fptoui.i64.f128(fp128, metadata)
3248 declare fp128 @llvm.experimental.constrained.sitofp.f128.i32(i32, metadata, metadata)
3249 declare fp128 @llvm.experimental.constrained.uitofp.f128.i32(i32, metadata, metadata)
3250 declare fp128 @llvm.experimental.constrained.sitofp.f128.i64(i64, metadata, metadata)
3251 declare fp128 @llvm.experimental.constrained.uitofp.f128.i64(i64, metadata, metadata)
3252 declare fp128 @llvm.experimental.constrained.sitofp.f128.i128(i128, metadata, metadata)
3253 declare fp128 @llvm.experimental.constrained.uitofp.f128.i128(i128, metadata, metadata)
3254 declare fp128 @llvm.experimental.constrained.sqrt.f128(fp128, metadata, metadata)
3255 declare fp128 @llvm.experimental.constrained.powi.f128(fp128, i32, metadata, metadata)
3256 declare fp128 @llvm.experimental.constrained.sin.f128(fp128, metadata, metadata)
3257 declare fp128 @llvm.experimental.constrained.cos.f128(fp128, metadata, metadata)
3258 declare fp128 @llvm.experimental.constrained.tan.f128(fp128, metadata, metadata)
3259 declare fp128 @llvm.experimental.constrained.asin.f128(fp128, metadata, metadata)
3260 declare fp128 @llvm.experimental.constrained.acos.f128(fp128, metadata, metadata)
3261 declare fp128 @llvm.experimental.constrained.atan.f128(fp128, metadata, metadata)
3262 declare fp128 @llvm.experimental.constrained.atan2.f128(fp128, fp128, metadata, metadata)
3263 declare fp128 @llvm.experimental.constrained.sinh.f128(fp128, metadata, metadata)
3264 declare fp128 @llvm.experimental.constrained.cosh.f128(fp128, metadata, metadata)
3265 declare fp128 @llvm.experimental.constrained.tanh.f128(fp128, metadata, metadata)
3266 declare fp128 @llvm.experimental.constrained.pow.f128(fp128, fp128, metadata, metadata)
3267 declare fp128 @llvm.experimental.constrained.log.f128(fp128, metadata, metadata)
3268 declare fp128 @llvm.experimental.constrained.log10.f128(fp128, metadata, metadata)
3269 declare fp128 @llvm.experimental.constrained.log2.f128(fp128, metadata, metadata)
3270 declare fp128 @llvm.experimental.constrained.exp.f128(fp128, metadata, metadata)
3271 declare fp128 @llvm.experimental.constrained.exp2.f128(fp128, metadata, metadata)
3272 declare fp128 @llvm.experimental.constrained.rint.f128(fp128, metadata, metadata)
3273 declare fp128 @llvm.experimental.constrained.nearbyint.f128(fp128, metadata, metadata)
3274 declare i32 @llvm.experimental.constrained.lrint.i32.f128(fp128, metadata, metadata)
3275 declare i64 @llvm.experimental.constrained.llrint.i64.f128(fp128, metadata, metadata)
3276 declare fp128 @llvm.experimental.constrained.maxnum.f128(fp128, fp128, metadata)
3277 declare fp128 @llvm.experimental.constrained.minnum.f128(fp128, fp128, metadata)
3278 declare fp128 @llvm.experimental.constrained.ceil.f128(fp128, metadata)
3279 declare fp128 @llvm.experimental.constrained.floor.f128(fp128, metadata)
3280 declare i32 @llvm.experimental.constrained.lround.i32.f128(fp128, metadata)
3281 declare i64 @llvm.experimental.constrained.llround.i64.f128(fp128, metadata)
3282 declare fp128 @llvm.experimental.constrained.round.f128(fp128, metadata)
3283 declare fp128 @llvm.experimental.constrained.trunc.f128(fp128, metadata)
3284 declare i1 @llvm.experimental.constrained.fcmps.f128(fp128, fp128, metadata, metadata)
3285 declare i1 @llvm.experimental.constrained.fcmp.f128(fp128, fp128, metadata, metadata)
3287 declare float @llvm.experimental.constrained.fptrunc.f32.f64(double, metadata, metadata)
3288 declare float @llvm.experimental.constrained.fptrunc.f32.f128(fp128, metadata, metadata)
3289 declare double @llvm.experimental.constrained.fptrunc.f64.f128(fp128, metadata, metadata)
3290 declare double @llvm.experimental.constrained.fpext.f64.f32(float, metadata)
3291 declare fp128 @llvm.experimental.constrained.fpext.f128.f32(float, metadata)
3292 declare fp128 @llvm.experimental.constrained.fpext.f128.f64(double, metadata)
3294 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
3295 ; CHECK-GI: {{.*}}
3296 ; CHECK-SD: {{.*}}