1 ; RUN: llc < %s -march=arm64 -aarch64-neon-syntax=apple | FileCheck %s 2 3 ; 4 ; Floating-point scalar convert to signed integer (to nearest with ties to away) 5 ; 6 define i32 @fcvtas_1w1s(float %A) nounwind { 7 ;CHECK-LABEL: fcvtas_1w1s: 8 ;CHECK: fcvtas w0, s0 9 ;CHECK-NEXT: ret 10 %tmp3 = call i32 @llvm.aarch64.neon.fcvtas.i32.f32(float %A) 11 ret i32 %tmp3 12 } 13 14 define i64 @fcvtas_1x1s(float %A) nounwind { 15 ;CHECK-LABEL: fcvtas_1x1s: 16 ;CHECK: fcvtas x0, s0 17 ;CHECK-NEXT: ret 18 %tmp3 = call i64 @llvm.aarch64.neon.fcvtas.i64.f32(float %A) 19 ret i64 %tmp3 20 } 21 22 define i32 @fcvtas_1w1d(double %A) nounwind { 23 ;CHECK-LABEL: fcvtas_1w1d: 24 ;CHECK: fcvtas w0, d0 25 ;CHECK-NEXT: ret 26 %tmp3 = call i32 @llvm.aarch64.neon.fcvtas.i32.f64(double %A) 27 ret i32 %tmp3 28 } 29 30 define i64 @fcvtas_1x1d(double %A) nounwind { 31 ;CHECK-LABEL: fcvtas_1x1d: 32 ;CHECK: fcvtas x0, d0 33 ;CHECK-NEXT: ret 34 %tmp3 = call i64 @llvm.aarch64.neon.fcvtas.i64.f64(double %A) 35 ret i64 %tmp3 36 } 37 38 declare i32 @llvm.aarch64.neon.fcvtas.i32.f32(float) nounwind readnone 39 declare i64 @llvm.aarch64.neon.fcvtas.i64.f32(float) nounwind readnone 40 declare i32 @llvm.aarch64.neon.fcvtas.i32.f64(double) nounwind readnone 41 declare i64 @llvm.aarch64.neon.fcvtas.i64.f64(double) nounwind readnone 42 43 ; 44 ; Floating-point scalar convert to unsigned integer 45 ; 46 define i32 @fcvtau_1w1s(float %A) nounwind { 47 ;CHECK-LABEL: fcvtau_1w1s: 48 ;CHECK: fcvtau w0, s0 49 ;CHECK-NEXT: ret 50 %tmp3 = call i32 @llvm.aarch64.neon.fcvtau.i32.f32(float %A) 51 ret i32 %tmp3 52 } 53 54 define i64 @fcvtau_1x1s(float %A) nounwind { 55 ;CHECK-LABEL: fcvtau_1x1s: 56 ;CHECK: fcvtau x0, s0 57 ;CHECK-NEXT: ret 58 %tmp3 = call i64 @llvm.aarch64.neon.fcvtau.i64.f32(float %A) 59 ret i64 %tmp3 60 } 61 62 define i32 @fcvtau_1w1d(double %A) nounwind { 63 ;CHECK-LABEL: fcvtau_1w1d: 64 ;CHECK: fcvtau w0, d0 65 ;CHECK-NEXT: ret 66 %tmp3 = call i32 @llvm.aarch64.neon.fcvtau.i32.f64(double %A) 67 ret i32 %tmp3 68 } 69 70 define i64 @fcvtau_1x1d(double %A) nounwind { 71 ;CHECK-LABEL: fcvtau_1x1d: 72 ;CHECK: fcvtau x0, d0 73 ;CHECK-NEXT: ret 74 %tmp3 = call i64 @llvm.aarch64.neon.fcvtau.i64.f64(double %A) 75 ret i64 %tmp3 76 } 77 78 declare i32 @llvm.aarch64.neon.fcvtau.i32.f32(float) nounwind readnone 79 declare i64 @llvm.aarch64.neon.fcvtau.i64.f32(float) nounwind readnone 80 declare i32 @llvm.aarch64.neon.fcvtau.i32.f64(double) nounwind readnone 81 declare i64 @llvm.aarch64.neon.fcvtau.i64.f64(double) nounwind readnone 82 83 ; 84 ; Floating-point scalar convert to signed integer (toward -Inf) 85 ; 86 define i32 @fcvtms_1w1s(float %A) nounwind { 87 ;CHECK-LABEL: fcvtms_1w1s: 88 ;CHECK: fcvtms w0, s0 89 ;CHECK-NEXT: ret 90 %tmp3 = call i32 @llvm.aarch64.neon.fcvtms.i32.f32(float %A) 91 ret i32 %tmp3 92 } 93 94 define i64 @fcvtms_1x1s(float %A) nounwind { 95 ;CHECK-LABEL: fcvtms_1x1s: 96 ;CHECK: fcvtms x0, s0 97 ;CHECK-NEXT: ret 98 %tmp3 = call i64 @llvm.aarch64.neon.fcvtms.i64.f32(float %A) 99 ret i64 %tmp3 100 } 101 102 define i32 @fcvtms_1w1d(double %A) nounwind { 103 ;CHECK-LABEL: fcvtms_1w1d: 104 ;CHECK: fcvtms w0, d0 105 ;CHECK-NEXT: ret 106 %tmp3 = call i32 @llvm.aarch64.neon.fcvtms.i32.f64(double %A) 107 ret i32 %tmp3 108 } 109 110 define i64 @fcvtms_1x1d(double %A) nounwind { 111 ;CHECK-LABEL: fcvtms_1x1d: 112 ;CHECK: fcvtms x0, d0 113 ;CHECK-NEXT: ret 114 %tmp3 = call i64 @llvm.aarch64.neon.fcvtms.i64.f64(double %A) 115 ret i64 %tmp3 116 } 117 118 declare i32 @llvm.aarch64.neon.fcvtms.i32.f32(float) nounwind readnone 119 declare i64 @llvm.aarch64.neon.fcvtms.i64.f32(float) nounwind readnone 120 declare i32 @llvm.aarch64.neon.fcvtms.i32.f64(double) nounwind readnone 121 declare i64 @llvm.aarch64.neon.fcvtms.i64.f64(double) nounwind readnone 122 123 ; 124 ; Floating-point scalar convert to unsigned integer (toward -Inf) 125 ; 126 define i32 @fcvtmu_1w1s(float %A) nounwind { 127 ;CHECK-LABEL: fcvtmu_1w1s: 128 ;CHECK: fcvtmu w0, s0 129 ;CHECK-NEXT: ret 130 %tmp3 = call i32 @llvm.aarch64.neon.fcvtmu.i32.f32(float %A) 131 ret i32 %tmp3 132 } 133 134 define i64 @fcvtmu_1x1s(float %A) nounwind { 135 ;CHECK-LABEL: fcvtmu_1x1s: 136 ;CHECK: fcvtmu x0, s0 137 ;CHECK-NEXT: ret 138 %tmp3 = call i64 @llvm.aarch64.neon.fcvtmu.i64.f32(float %A) 139 ret i64 %tmp3 140 } 141 142 define i32 @fcvtmu_1w1d(double %A) nounwind { 143 ;CHECK-LABEL: fcvtmu_1w1d: 144 ;CHECK: fcvtmu w0, d0 145 ;CHECK-NEXT: ret 146 %tmp3 = call i32 @llvm.aarch64.neon.fcvtmu.i32.f64(double %A) 147 ret i32 %tmp3 148 } 149 150 define i64 @fcvtmu_1x1d(double %A) nounwind { 151 ;CHECK-LABEL: fcvtmu_1x1d: 152 ;CHECK: fcvtmu x0, d0 153 ;CHECK-NEXT: ret 154 %tmp3 = call i64 @llvm.aarch64.neon.fcvtmu.i64.f64(double %A) 155 ret i64 %tmp3 156 } 157 158 declare i32 @llvm.aarch64.neon.fcvtmu.i32.f32(float) nounwind readnone 159 declare i64 @llvm.aarch64.neon.fcvtmu.i64.f32(float) nounwind readnone 160 declare i32 @llvm.aarch64.neon.fcvtmu.i32.f64(double) nounwind readnone 161 declare i64 @llvm.aarch64.neon.fcvtmu.i64.f64(double) nounwind readnone 162 163 ; 164 ; Floating-point scalar convert to signed integer (to nearest with ties to even) 165 ; 166 define i32 @fcvtns_1w1s(float %A) nounwind { 167 ;CHECK-LABEL: fcvtns_1w1s: 168 ;CHECK: fcvtns w0, s0 169 ;CHECK-NEXT: ret 170 %tmp3 = call i32 @llvm.aarch64.neon.fcvtns.i32.f32(float %A) 171 ret i32 %tmp3 172 } 173 174 define i64 @fcvtns_1x1s(float %A) nounwind { 175 ;CHECK-LABEL: fcvtns_1x1s: 176 ;CHECK: fcvtns x0, s0 177 ;CHECK-NEXT: ret 178 %tmp3 = call i64 @llvm.aarch64.neon.fcvtns.i64.f32(float %A) 179 ret i64 %tmp3 180 } 181 182 define i32 @fcvtns_1w1d(double %A) nounwind { 183 ;CHECK-LABEL: fcvtns_1w1d: 184 ;CHECK: fcvtns w0, d0 185 ;CHECK-NEXT: ret 186 %tmp3 = call i32 @llvm.aarch64.neon.fcvtns.i32.f64(double %A) 187 ret i32 %tmp3 188 } 189 190 define i64 @fcvtns_1x1d(double %A) nounwind { 191 ;CHECK-LABEL: fcvtns_1x1d: 192 ;CHECK: fcvtns x0, d0 193 ;CHECK-NEXT: ret 194 %tmp3 = call i64 @llvm.aarch64.neon.fcvtns.i64.f64(double %A) 195 ret i64 %tmp3 196 } 197 198 declare i32 @llvm.aarch64.neon.fcvtns.i32.f32(float) nounwind readnone 199 declare i64 @llvm.aarch64.neon.fcvtns.i64.f32(float) nounwind readnone 200 declare i32 @llvm.aarch64.neon.fcvtns.i32.f64(double) nounwind readnone 201 declare i64 @llvm.aarch64.neon.fcvtns.i64.f64(double) nounwind readnone 202 203 ; 204 ; Floating-point scalar convert to unsigned integer (to nearest with ties to even) 205 ; 206 define i32 @fcvtnu_1w1s(float %A) nounwind { 207 ;CHECK-LABEL: fcvtnu_1w1s: 208 ;CHECK: fcvtnu w0, s0 209 ;CHECK-NEXT: ret 210 %tmp3 = call i32 @llvm.aarch64.neon.fcvtnu.i32.f32(float %A) 211 ret i32 %tmp3 212 } 213 214 define i64 @fcvtnu_1x1s(float %A) nounwind { 215 ;CHECK-LABEL: fcvtnu_1x1s: 216 ;CHECK: fcvtnu x0, s0 217 ;CHECK-NEXT: ret 218 %tmp3 = call i64 @llvm.aarch64.neon.fcvtnu.i64.f32(float %A) 219 ret i64 %tmp3 220 } 221 222 define i32 @fcvtnu_1w1d(double %A) nounwind { 223 ;CHECK-LABEL: fcvtnu_1w1d: 224 ;CHECK: fcvtnu w0, d0 225 ;CHECK-NEXT: ret 226 %tmp3 = call i32 @llvm.aarch64.neon.fcvtnu.i32.f64(double %A) 227 ret i32 %tmp3 228 } 229 230 define i64 @fcvtnu_1x1d(double %A) nounwind { 231 ;CHECK-LABEL: fcvtnu_1x1d: 232 ;CHECK: fcvtnu x0, d0 233 ;CHECK-NEXT: ret 234 %tmp3 = call i64 @llvm.aarch64.neon.fcvtnu.i64.f64(double %A) 235 ret i64 %tmp3 236 } 237 238 declare i32 @llvm.aarch64.neon.fcvtnu.i32.f32(float) nounwind readnone 239 declare i64 @llvm.aarch64.neon.fcvtnu.i64.f32(float) nounwind readnone 240 declare i32 @llvm.aarch64.neon.fcvtnu.i32.f64(double) nounwind readnone 241 declare i64 @llvm.aarch64.neon.fcvtnu.i64.f64(double) nounwind readnone 242 243 ; 244 ; Floating-point scalar convert to signed integer (toward +Inf) 245 ; 246 define i32 @fcvtps_1w1s(float %A) nounwind { 247 ;CHECK-LABEL: fcvtps_1w1s: 248 ;CHECK: fcvtps w0, s0 249 ;CHECK-NEXT: ret 250 %tmp3 = call i32 @llvm.aarch64.neon.fcvtps.i32.f32(float %A) 251 ret i32 %tmp3 252 } 253 254 define i64 @fcvtps_1x1s(float %A) nounwind { 255 ;CHECK-LABEL: fcvtps_1x1s: 256 ;CHECK: fcvtps x0, s0 257 ;CHECK-NEXT: ret 258 %tmp3 = call i64 @llvm.aarch64.neon.fcvtps.i64.f32(float %A) 259 ret i64 %tmp3 260 } 261 262 define i32 @fcvtps_1w1d(double %A) nounwind { 263 ;CHECK-LABEL: fcvtps_1w1d: 264 ;CHECK: fcvtps w0, d0 265 ;CHECK-NEXT: ret 266 %tmp3 = call i32 @llvm.aarch64.neon.fcvtps.i32.f64(double %A) 267 ret i32 %tmp3 268 } 269 270 define i64 @fcvtps_1x1d(double %A) nounwind { 271 ;CHECK-LABEL: fcvtps_1x1d: 272 ;CHECK: fcvtps x0, d0 273 ;CHECK-NEXT: ret 274 %tmp3 = call i64 @llvm.aarch64.neon.fcvtps.i64.f64(double %A) 275 ret i64 %tmp3 276 } 277 278 declare i32 @llvm.aarch64.neon.fcvtps.i32.f32(float) nounwind readnone 279 declare i64 @llvm.aarch64.neon.fcvtps.i64.f32(float) nounwind readnone 280 declare i32 @llvm.aarch64.neon.fcvtps.i32.f64(double) nounwind readnone 281 declare i64 @llvm.aarch64.neon.fcvtps.i64.f64(double) nounwind readnone 282 283 ; 284 ; Floating-point scalar convert to unsigned integer (toward +Inf) 285 ; 286 define i32 @fcvtpu_1w1s(float %A) nounwind { 287 ;CHECK-LABEL: fcvtpu_1w1s: 288 ;CHECK: fcvtpu w0, s0 289 ;CHECK-NEXT: ret 290 %tmp3 = call i32 @llvm.aarch64.neon.fcvtpu.i32.f32(float %A) 291 ret i32 %tmp3 292 } 293 294 define i64 @fcvtpu_1x1s(float %A) nounwind { 295 ;CHECK-LABEL: fcvtpu_1x1s: 296 ;CHECK: fcvtpu x0, s0 297 ;CHECK-NEXT: ret 298 %tmp3 = call i64 @llvm.aarch64.neon.fcvtpu.i64.f32(float %A) 299 ret i64 %tmp3 300 } 301 302 define i32 @fcvtpu_1w1d(double %A) nounwind { 303 ;CHECK-LABEL: fcvtpu_1w1d: 304 ;CHECK: fcvtpu w0, d0 305 ;CHECK-NEXT: ret 306 %tmp3 = call i32 @llvm.aarch64.neon.fcvtpu.i32.f64(double %A) 307 ret i32 %tmp3 308 } 309 310 define i64 @fcvtpu_1x1d(double %A) nounwind { 311 ;CHECK-LABEL: fcvtpu_1x1d: 312 ;CHECK: fcvtpu x0, d0 313 ;CHECK-NEXT: ret 314 %tmp3 = call i64 @llvm.aarch64.neon.fcvtpu.i64.f64(double %A) 315 ret i64 %tmp3 316 } 317 318 declare i32 @llvm.aarch64.neon.fcvtpu.i32.f32(float) nounwind readnone 319 declare i64 @llvm.aarch64.neon.fcvtpu.i64.f32(float) nounwind readnone 320 declare i32 @llvm.aarch64.neon.fcvtpu.i32.f64(double) nounwind readnone 321 declare i64 @llvm.aarch64.neon.fcvtpu.i64.f64(double) nounwind readnone 322 323 ; 324 ; Floating-point scalar convert to signed integer (toward zero) 325 ; 326 define i32 @fcvtzs_1w1s(float %A) nounwind { 327 ;CHECK-LABEL: fcvtzs_1w1s: 328 ;CHECK: fcvtzs w0, s0 329 ;CHECK-NEXT: ret 330 %tmp3 = call i32 @llvm.aarch64.neon.fcvtzs.i32.f32(float %A) 331 ret i32 %tmp3 332 } 333 334 define i64 @fcvtzs_1x1s(float %A) nounwind { 335 ;CHECK-LABEL: fcvtzs_1x1s: 336 ;CHECK: fcvtzs x0, s0 337 ;CHECK-NEXT: ret 338 %tmp3 = call i64 @llvm.aarch64.neon.fcvtzs.i64.f32(float %A) 339 ret i64 %tmp3 340 } 341 342 define i32 @fcvtzs_1w1d(double %A) nounwind { 343 ;CHECK-LABEL: fcvtzs_1w1d: 344 ;CHECK: fcvtzs w0, d0 345 ;CHECK-NEXT: ret 346 %tmp3 = call i32 @llvm.aarch64.neon.fcvtzs.i32.f64(double %A) 347 ret i32 %tmp3 348 } 349 350 define i64 @fcvtzs_1x1d(double %A) nounwind { 351 ;CHECK-LABEL: fcvtzs_1x1d: 352 ;CHECK: fcvtzs x0, d0 353 ;CHECK-NEXT: ret 354 %tmp3 = call i64 @llvm.aarch64.neon.fcvtzs.i64.f64(double %A) 355 ret i64 %tmp3 356 } 357 358 declare i32 @llvm.aarch64.neon.fcvtzs.i32.f32(float) nounwind readnone 359 declare i64 @llvm.aarch64.neon.fcvtzs.i64.f32(float) nounwind readnone 360 declare i32 @llvm.aarch64.neon.fcvtzs.i32.f64(double) nounwind readnone 361 declare i64 @llvm.aarch64.neon.fcvtzs.i64.f64(double) nounwind readnone 362 363 ; 364 ; Floating-point scalar convert to unsigned integer (toward zero) 365 ; 366 define i32 @fcvtzu_1w1s(float %A) nounwind { 367 ;CHECK-LABEL: fcvtzu_1w1s: 368 ;CHECK: fcvtzu w0, s0 369 ;CHECK-NEXT: ret 370 %tmp3 = call i32 @llvm.aarch64.neon.fcvtzu.i32.f32(float %A) 371 ret i32 %tmp3 372 } 373 374 define i64 @fcvtzu_1x1s(float %A) nounwind { 375 ;CHECK-LABEL: fcvtzu_1x1s: 376 ;CHECK: fcvtzu x0, s0 377 ;CHECK-NEXT: ret 378 %tmp3 = call i64 @llvm.aarch64.neon.fcvtzu.i64.f32(float %A) 379 ret i64 %tmp3 380 } 381 382 define i32 @fcvtzu_1w1d(double %A) nounwind { 383 ;CHECK-LABEL: fcvtzu_1w1d: 384 ;CHECK: fcvtzu w0, d0 385 ;CHECK-NEXT: ret 386 %tmp3 = call i32 @llvm.aarch64.neon.fcvtzu.i32.f64(double %A) 387 ret i32 %tmp3 388 } 389 390 define i64 @fcvtzu_1x1d(double %A) nounwind { 391 ;CHECK-LABEL: fcvtzu_1x1d: 392 ;CHECK: fcvtzu x0, d0 393 ;CHECK-NEXT: ret 394 %tmp3 = call i64 @llvm.aarch64.neon.fcvtzu.i64.f64(double %A) 395 ret i64 %tmp3 396 } 397 398 declare i32 @llvm.aarch64.neon.fcvtzu.i32.f32(float) nounwind readnone 399 declare i64 @llvm.aarch64.neon.fcvtzu.i64.f32(float) nounwind readnone 400 declare i32 @llvm.aarch64.neon.fcvtzu.i32.f64(double) nounwind readnone 401 declare i64 @llvm.aarch64.neon.fcvtzu.i64.f64(double) nounwind readnone 402