1; RUN: llc < %s -march=arm64 -aarch64-neon-syntax=apple | FileCheck %s 2 3define <2 x i32> @fcvtas_2s(<2 x float> %A) nounwind { 4;CHECK-LABEL: fcvtas_2s: 5;CHECK-NOT: ld1 6;CHECK: fcvtas.2s v0, v0 7;CHECK-NEXT: ret 8 %tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtas.v2i32.v2f32(<2 x float> %A) 9 ret <2 x i32> %tmp3 10} 11 12define <4 x i32> @fcvtas_4s(<4 x float> %A) nounwind { 13;CHECK-LABEL: fcvtas_4s: 14;CHECK-NOT: ld1 15;CHECK: fcvtas.4s v0, v0 16;CHECK-NEXT: ret 17 %tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtas.v4i32.v4f32(<4 x float> %A) 18 ret <4 x i32> %tmp3 19} 20 21define <2 x i64> @fcvtas_2d(<2 x double> %A) nounwind { 22;CHECK-LABEL: fcvtas_2d: 23;CHECK-NOT: ld1 24;CHECK: fcvtas.2d v0, v0 25;CHECK-NEXT: ret 26 %tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtas.v2i64.v2f64(<2 x double> %A) 27 ret <2 x i64> %tmp3 28} 29 30declare <2 x i32> @llvm.aarch64.neon.fcvtas.v2i32.v2f32(<2 x float>) nounwind readnone 31declare <4 x i32> @llvm.aarch64.neon.fcvtas.v4i32.v4f32(<4 x float>) nounwind readnone 32declare <2 x i64> @llvm.aarch64.neon.fcvtas.v2i64.v2f64(<2 x double>) nounwind readnone 33 34define <2 x i32> @fcvtau_2s(<2 x float> %A) nounwind { 35;CHECK-LABEL: fcvtau_2s: 36;CHECK-NOT: ld1 37;CHECK: fcvtau.2s v0, v0 38;CHECK-NEXT: ret 39 %tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtau.v2i32.v2f32(<2 x float> %A) 40 ret <2 x i32> %tmp3 41} 42 43define <4 x i32> @fcvtau_4s(<4 x float> %A) nounwind { 44;CHECK-LABEL: fcvtau_4s: 45;CHECK-NOT: ld1 46;CHECK: fcvtau.4s v0, v0 47;CHECK-NEXT: ret 48 %tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtau.v4i32.v4f32(<4 x float> %A) 49 ret <4 x i32> %tmp3 50} 51 52define <2 x i64> @fcvtau_2d(<2 x double> %A) nounwind { 53;CHECK-LABEL: fcvtau_2d: 54;CHECK-NOT: ld1 55;CHECK: fcvtau.2d v0, v0 56;CHECK-NEXT: ret 57 %tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtau.v2i64.v2f64(<2 x double> %A) 58 ret <2 x i64> %tmp3 59} 60 61declare <2 x i32> @llvm.aarch64.neon.fcvtau.v2i32.v2f32(<2 x float>) nounwind readnone 62declare <4 x i32> @llvm.aarch64.neon.fcvtau.v4i32.v4f32(<4 x float>) nounwind readnone 63declare <2 x i64> @llvm.aarch64.neon.fcvtau.v2i64.v2f64(<2 x double>) nounwind readnone 64 65define <2 x i32> @fcvtms_2s(<2 x float> %A) nounwind { 66;CHECK-LABEL: fcvtms_2s: 67;CHECK-NOT: ld1 68;CHECK: fcvtms.2s v0, v0 69;CHECK-NEXT: ret 70 %tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtms.v2i32.v2f32(<2 x float> %A) 71 ret <2 x i32> %tmp3 72} 73 74define <4 x i32> @fcvtms_4s(<4 x float> %A) nounwind { 75;CHECK-LABEL: fcvtms_4s: 76;CHECK-NOT: ld1 77;CHECK: fcvtms.4s v0, v0 78;CHECK-NEXT: ret 79 %tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtms.v4i32.v4f32(<4 x float> %A) 80 ret <4 x i32> %tmp3 81} 82 83define <2 x i64> @fcvtms_2d(<2 x double> %A) nounwind { 84;CHECK-LABEL: fcvtms_2d: 85;CHECK-NOT: ld1 86;CHECK: fcvtms.2d v0, v0 87;CHECK-NEXT: ret 88 %tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtms.v2i64.v2f64(<2 x double> %A) 89 ret <2 x i64> %tmp3 90} 91 92declare <2 x i32> @llvm.aarch64.neon.fcvtms.v2i32.v2f32(<2 x float>) nounwind readnone 93declare <4 x i32> @llvm.aarch64.neon.fcvtms.v4i32.v4f32(<4 x float>) nounwind readnone 94declare <2 x i64> @llvm.aarch64.neon.fcvtms.v2i64.v2f64(<2 x double>) nounwind readnone 95 96define <2 x i32> @fcvtmu_2s(<2 x float> %A) nounwind { 97;CHECK-LABEL: fcvtmu_2s: 98;CHECK-NOT: ld1 99;CHECK: fcvtmu.2s v0, v0 100;CHECK-NEXT: ret 101 %tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtmu.v2i32.v2f32(<2 x float> %A) 102 ret <2 x i32> %tmp3 103} 104 105define <4 x i32> @fcvtmu_4s(<4 x float> %A) nounwind { 106;CHECK-LABEL: fcvtmu_4s: 107;CHECK-NOT: ld1 108;CHECK: fcvtmu.4s v0, v0 109;CHECK-NEXT: ret 110 %tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtmu.v4i32.v4f32(<4 x float> %A) 111 ret <4 x i32> %tmp3 112} 113 114define <2 x i64> @fcvtmu_2d(<2 x double> %A) nounwind { 115;CHECK-LABEL: fcvtmu_2d: 116;CHECK-NOT: ld1 117;CHECK: fcvtmu.2d v0, v0 118;CHECK-NEXT: ret 119 %tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtmu.v2i64.v2f64(<2 x double> %A) 120 ret <2 x i64> %tmp3 121} 122 123declare <2 x i32> @llvm.aarch64.neon.fcvtmu.v2i32.v2f32(<2 x float>) nounwind readnone 124declare <4 x i32> @llvm.aarch64.neon.fcvtmu.v4i32.v4f32(<4 x float>) nounwind readnone 125declare <2 x i64> @llvm.aarch64.neon.fcvtmu.v2i64.v2f64(<2 x double>) nounwind readnone 126 127define <2 x i32> @fcvtps_2s(<2 x float> %A) nounwind { 128;CHECK-LABEL: fcvtps_2s: 129;CHECK-NOT: ld1 130;CHECK: fcvtps.2s v0, v0 131;CHECK-NEXT: ret 132 %tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtps.v2i32.v2f32(<2 x float> %A) 133 ret <2 x i32> %tmp3 134} 135 136define <4 x i32> @fcvtps_4s(<4 x float> %A) nounwind { 137;CHECK-LABEL: fcvtps_4s: 138;CHECK-NOT: ld1 139;CHECK: fcvtps.4s v0, v0 140;CHECK-NEXT: ret 141 %tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtps.v4i32.v4f32(<4 x float> %A) 142 ret <4 x i32> %tmp3 143} 144 145define <2 x i64> @fcvtps_2d(<2 x double> %A) nounwind { 146;CHECK-LABEL: fcvtps_2d: 147;CHECK-NOT: ld1 148;CHECK: fcvtps.2d v0, v0 149;CHECK-NEXT: ret 150 %tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtps.v2i64.v2f64(<2 x double> %A) 151 ret <2 x i64> %tmp3 152} 153 154declare <2 x i32> @llvm.aarch64.neon.fcvtps.v2i32.v2f32(<2 x float>) nounwind readnone 155declare <4 x i32> @llvm.aarch64.neon.fcvtps.v4i32.v4f32(<4 x float>) nounwind readnone 156declare <2 x i64> @llvm.aarch64.neon.fcvtps.v2i64.v2f64(<2 x double>) nounwind readnone 157 158define <2 x i32> @fcvtpu_2s(<2 x float> %A) nounwind { 159;CHECK-LABEL: fcvtpu_2s: 160;CHECK-NOT: ld1 161;CHECK: fcvtpu.2s v0, v0 162;CHECK-NEXT: ret 163 %tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtpu.v2i32.v2f32(<2 x float> %A) 164 ret <2 x i32> %tmp3 165} 166 167define <4 x i32> @fcvtpu_4s(<4 x float> %A) nounwind { 168;CHECK-LABEL: fcvtpu_4s: 169;CHECK-NOT: ld1 170;CHECK: fcvtpu.4s v0, v0 171;CHECK-NEXT: ret 172 %tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtpu.v4i32.v4f32(<4 x float> %A) 173 ret <4 x i32> %tmp3 174} 175 176define <2 x i64> @fcvtpu_2d(<2 x double> %A) nounwind { 177;CHECK-LABEL: fcvtpu_2d: 178;CHECK-NOT: ld1 179;CHECK: fcvtpu.2d v0, v0 180;CHECK-NEXT: ret 181 %tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtpu.v2i64.v2f64(<2 x double> %A) 182 ret <2 x i64> %tmp3 183} 184 185declare <2 x i32> @llvm.aarch64.neon.fcvtpu.v2i32.v2f32(<2 x float>) nounwind readnone 186declare <4 x i32> @llvm.aarch64.neon.fcvtpu.v4i32.v4f32(<4 x float>) nounwind readnone 187declare <2 x i64> @llvm.aarch64.neon.fcvtpu.v2i64.v2f64(<2 x double>) nounwind readnone 188 189define <2 x i32> @fcvtns_2s(<2 x float> %A) nounwind { 190;CHECK-LABEL: fcvtns_2s: 191;CHECK-NOT: ld1 192;CHECK: fcvtns.2s v0, v0 193;CHECK-NEXT: ret 194 %tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtns.v2i32.v2f32(<2 x float> %A) 195 ret <2 x i32> %tmp3 196} 197 198define <4 x i32> @fcvtns_4s(<4 x float> %A) nounwind { 199;CHECK-LABEL: fcvtns_4s: 200;CHECK-NOT: ld1 201;CHECK: fcvtns.4s v0, v0 202;CHECK-NEXT: ret 203 %tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtns.v4i32.v4f32(<4 x float> %A) 204 ret <4 x i32> %tmp3 205} 206 207define <2 x i64> @fcvtns_2d(<2 x double> %A) nounwind { 208;CHECK-LABEL: fcvtns_2d: 209;CHECK-NOT: ld1 210;CHECK: fcvtns.2d v0, v0 211;CHECK-NEXT: ret 212 %tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtns.v2i64.v2f64(<2 x double> %A) 213 ret <2 x i64> %tmp3 214} 215 216declare <2 x i32> @llvm.aarch64.neon.fcvtns.v2i32.v2f32(<2 x float>) nounwind readnone 217declare <4 x i32> @llvm.aarch64.neon.fcvtns.v4i32.v4f32(<4 x float>) nounwind readnone 218declare <2 x i64> @llvm.aarch64.neon.fcvtns.v2i64.v2f64(<2 x double>) nounwind readnone 219 220define <2 x i32> @fcvtnu_2s(<2 x float> %A) nounwind { 221;CHECK-LABEL: fcvtnu_2s: 222;CHECK-NOT: ld1 223;CHECK: fcvtnu.2s v0, v0 224;CHECK-NEXT: ret 225 %tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtnu.v2i32.v2f32(<2 x float> %A) 226 ret <2 x i32> %tmp3 227} 228 229define <4 x i32> @fcvtnu_4s(<4 x float> %A) nounwind { 230;CHECK-LABEL: fcvtnu_4s: 231;CHECK-NOT: ld1 232;CHECK: fcvtnu.4s v0, v0 233;CHECK-NEXT: ret 234 %tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtnu.v4i32.v4f32(<4 x float> %A) 235 ret <4 x i32> %tmp3 236} 237 238define <2 x i64> @fcvtnu_2d(<2 x double> %A) nounwind { 239;CHECK-LABEL: fcvtnu_2d: 240;CHECK-NOT: ld1 241;CHECK: fcvtnu.2d v0, v0 242;CHECK-NEXT: ret 243 %tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtnu.v2i64.v2f64(<2 x double> %A) 244 ret <2 x i64> %tmp3 245} 246 247declare <2 x i32> @llvm.aarch64.neon.fcvtnu.v2i32.v2f32(<2 x float>) nounwind readnone 248declare <4 x i32> @llvm.aarch64.neon.fcvtnu.v4i32.v4f32(<4 x float>) nounwind readnone 249declare <2 x i64> @llvm.aarch64.neon.fcvtnu.v2i64.v2f64(<2 x double>) nounwind readnone 250 251define <2 x i32> @fcvtzs_2s(<2 x float> %A) nounwind { 252;CHECK-LABEL: fcvtzs_2s: 253;CHECK-NOT: ld1 254;CHECK: fcvtzs.2s v0, v0 255;CHECK-NEXT: ret 256 %tmp3 = fptosi <2 x float> %A to <2 x i32> 257 ret <2 x i32> %tmp3 258} 259 260define <4 x i32> @fcvtzs_4s(<4 x float> %A) nounwind { 261;CHECK-LABEL: fcvtzs_4s: 262;CHECK-NOT: ld1 263;CHECK: fcvtzs.4s v0, v0 264;CHECK-NEXT: ret 265 %tmp3 = fptosi <4 x float> %A to <4 x i32> 266 ret <4 x i32> %tmp3 267} 268 269define <2 x i64> @fcvtzs_2d(<2 x double> %A) nounwind { 270;CHECK-LABEL: fcvtzs_2d: 271;CHECK-NOT: ld1 272;CHECK: fcvtzs.2d v0, v0 273;CHECK-NEXT: ret 274 %tmp3 = fptosi <2 x double> %A to <2 x i64> 275 ret <2 x i64> %tmp3 276} 277 278 279define <2 x i32> @fcvtzu_2s(<2 x float> %A) nounwind { 280;CHECK-LABEL: fcvtzu_2s: 281;CHECK-NOT: ld1 282;CHECK: fcvtzu.2s v0, v0 283;CHECK-NEXT: ret 284 %tmp3 = fptoui <2 x float> %A to <2 x i32> 285 ret <2 x i32> %tmp3 286} 287 288define <4 x i32> @fcvtzu_4s(<4 x float> %A) nounwind { 289;CHECK-LABEL: fcvtzu_4s: 290;CHECK-NOT: ld1 291;CHECK: fcvtzu.4s v0, v0 292;CHECK-NEXT: ret 293 %tmp3 = fptoui <4 x float> %A to <4 x i32> 294 ret <4 x i32> %tmp3 295} 296 297define <2 x i64> @fcvtzu_2d(<2 x double> %A) nounwind { 298;CHECK-LABEL: fcvtzu_2d: 299;CHECK-NOT: ld1 300;CHECK: fcvtzu.2d v0, v0 301;CHECK-NEXT: ret 302 %tmp3 = fptoui <2 x double> %A to <2 x i64> 303 ret <2 x i64> %tmp3 304} 305 306define <2 x float> @frinta_2s(<2 x float> %A) nounwind { 307;CHECK-LABEL: frinta_2s: 308;CHECK-NOT: ld1 309;CHECK: frinta.2s v0, v0 310;CHECK-NEXT: ret 311 %tmp3 = call <2 x float> @llvm.round.v2f32(<2 x float> %A) 312 ret <2 x float> %tmp3 313} 314 315define <4 x float> @frinta_4s(<4 x float> %A) nounwind { 316;CHECK-LABEL: frinta_4s: 317;CHECK-NOT: ld1 318;CHECK: frinta.4s v0, v0 319;CHECK-NEXT: ret 320 %tmp3 = call <4 x float> @llvm.round.v4f32(<4 x float> %A) 321 ret <4 x float> %tmp3 322} 323 324define <2 x double> @frinta_2d(<2 x double> %A) nounwind { 325;CHECK-LABEL: frinta_2d: 326;CHECK-NOT: ld1 327;CHECK: frinta.2d v0, v0 328;CHECK-NEXT: ret 329 %tmp3 = call <2 x double> @llvm.round.v2f64(<2 x double> %A) 330 ret <2 x double> %tmp3 331} 332 333declare <2 x float> @llvm.round.v2f32(<2 x float>) nounwind readnone 334declare <4 x float> @llvm.round.v4f32(<4 x float>) nounwind readnone 335declare <2 x double> @llvm.round.v2f64(<2 x double>) nounwind readnone 336 337define <2 x float> @frinti_2s(<2 x float> %A) nounwind { 338;CHECK-LABEL: frinti_2s: 339;CHECK-NOT: ld1 340;CHECK: frinti.2s v0, v0 341;CHECK-NEXT: ret 342 %tmp3 = call <2 x float> @llvm.nearbyint.v2f32(<2 x float> %A) 343 ret <2 x float> %tmp3 344} 345 346define <4 x float> @frinti_4s(<4 x float> %A) nounwind { 347;CHECK-LABEL: frinti_4s: 348;CHECK-NOT: ld1 349;CHECK: frinti.4s v0, v0 350;CHECK-NEXT: ret 351 %tmp3 = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %A) 352 ret <4 x float> %tmp3 353} 354 355define <2 x double> @frinti_2d(<2 x double> %A) nounwind { 356;CHECK-LABEL: frinti_2d: 357;CHECK-NOT: ld1 358;CHECK: frinti.2d v0, v0 359;CHECK-NEXT: ret 360 %tmp3 = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %A) 361 ret <2 x double> %tmp3 362} 363 364declare <2 x float> @llvm.nearbyint.v2f32(<2 x float>) nounwind readnone 365declare <4 x float> @llvm.nearbyint.v4f32(<4 x float>) nounwind readnone 366declare <2 x double> @llvm.nearbyint.v2f64(<2 x double>) nounwind readnone 367 368define <2 x float> @frintm_2s(<2 x float> %A) nounwind { 369;CHECK-LABEL: frintm_2s: 370;CHECK-NOT: ld1 371;CHECK: frintm.2s v0, v0 372;CHECK-NEXT: ret 373 %tmp3 = call <2 x float> @llvm.floor.v2f32(<2 x float> %A) 374 ret <2 x float> %tmp3 375} 376 377define <4 x float> @frintm_4s(<4 x float> %A) nounwind { 378;CHECK-LABEL: frintm_4s: 379;CHECK-NOT: ld1 380;CHECK: frintm.4s v0, v0 381;CHECK-NEXT: ret 382 %tmp3 = call <4 x float> @llvm.floor.v4f32(<4 x float> %A) 383 ret <4 x float> %tmp3 384} 385 386define <2 x double> @frintm_2d(<2 x double> %A) nounwind { 387;CHECK-LABEL: frintm_2d: 388;CHECK-NOT: ld1 389;CHECK: frintm.2d v0, v0 390;CHECK-NEXT: ret 391 %tmp3 = call <2 x double> @llvm.floor.v2f64(<2 x double> %A) 392 ret <2 x double> %tmp3 393} 394 395declare <2 x float> @llvm.floor.v2f32(<2 x float>) nounwind readnone 396declare <4 x float> @llvm.floor.v4f32(<4 x float>) nounwind readnone 397declare <2 x double> @llvm.floor.v2f64(<2 x double>) nounwind readnone 398 399define <2 x float> @frintn_2s(<2 x float> %A) nounwind { 400;CHECK-LABEL: frintn_2s: 401;CHECK-NOT: ld1 402;CHECK: frintn.2s v0, v0 403;CHECK-NEXT: ret 404 %tmp3 = call <2 x float> @llvm.aarch64.neon.frintn.v2f32(<2 x float> %A) 405 ret <2 x float> %tmp3 406} 407 408define <4 x float> @frintn_4s(<4 x float> %A) nounwind { 409;CHECK-LABEL: frintn_4s: 410;CHECK-NOT: ld1 411;CHECK: frintn.4s v0, v0 412;CHECK-NEXT: ret 413 %tmp3 = call <4 x float> @llvm.aarch64.neon.frintn.v4f32(<4 x float> %A) 414 ret <4 x float> %tmp3 415} 416 417define <2 x double> @frintn_2d(<2 x double> %A) nounwind { 418;CHECK-LABEL: frintn_2d: 419;CHECK-NOT: ld1 420;CHECK: frintn.2d v0, v0 421;CHECK-NEXT: ret 422 %tmp3 = call <2 x double> @llvm.aarch64.neon.frintn.v2f64(<2 x double> %A) 423 ret <2 x double> %tmp3 424} 425 426declare <2 x float> @llvm.aarch64.neon.frintn.v2f32(<2 x float>) nounwind readnone 427declare <4 x float> @llvm.aarch64.neon.frintn.v4f32(<4 x float>) nounwind readnone 428declare <2 x double> @llvm.aarch64.neon.frintn.v2f64(<2 x double>) nounwind readnone 429 430define <2 x float> @frintp_2s(<2 x float> %A) nounwind { 431;CHECK-LABEL: frintp_2s: 432;CHECK-NOT: ld1 433;CHECK: frintp.2s v0, v0 434;CHECK-NEXT: ret 435 %tmp3 = call <2 x float> @llvm.ceil.v2f32(<2 x float> %A) 436 ret <2 x float> %tmp3 437} 438 439define <4 x float> @frintp_4s(<4 x float> %A) nounwind { 440;CHECK-LABEL: frintp_4s: 441;CHECK-NOT: ld1 442;CHECK: frintp.4s v0, v0 443;CHECK-NEXT: ret 444 %tmp3 = call <4 x float> @llvm.ceil.v4f32(<4 x float> %A) 445 ret <4 x float> %tmp3 446} 447 448define <2 x double> @frintp_2d(<2 x double> %A) nounwind { 449;CHECK-LABEL: frintp_2d: 450;CHECK-NOT: ld1 451;CHECK: frintp.2d v0, v0 452;CHECK-NEXT: ret 453 %tmp3 = call <2 x double> @llvm.ceil.v2f64(<2 x double> %A) 454 ret <2 x double> %tmp3 455} 456 457declare <2 x float> @llvm.ceil.v2f32(<2 x float>) nounwind readnone 458declare <4 x float> @llvm.ceil.v4f32(<4 x float>) nounwind readnone 459declare <2 x double> @llvm.ceil.v2f64(<2 x double>) nounwind readnone 460 461define <2 x float> @frintx_2s(<2 x float> %A) nounwind { 462;CHECK-LABEL: frintx_2s: 463;CHECK-NOT: ld1 464;CHECK: frintx.2s v0, v0 465;CHECK-NEXT: ret 466 %tmp3 = call <2 x float> @llvm.rint.v2f32(<2 x float> %A) 467 ret <2 x float> %tmp3 468} 469 470define <4 x float> @frintx_4s(<4 x float> %A) nounwind { 471;CHECK-LABEL: frintx_4s: 472;CHECK-NOT: ld1 473;CHECK: frintx.4s v0, v0 474;CHECK-NEXT: ret 475 %tmp3 = call <4 x float> @llvm.rint.v4f32(<4 x float> %A) 476 ret <4 x float> %tmp3 477} 478 479define <2 x double> @frintx_2d(<2 x double> %A) nounwind { 480;CHECK-LABEL: frintx_2d: 481;CHECK-NOT: ld1 482;CHECK: frintx.2d v0, v0 483;CHECK-NEXT: ret 484 %tmp3 = call <2 x double> @llvm.rint.v2f64(<2 x double> %A) 485 ret <2 x double> %tmp3 486} 487 488declare <2 x float> @llvm.rint.v2f32(<2 x float>) nounwind readnone 489declare <4 x float> @llvm.rint.v4f32(<4 x float>) nounwind readnone 490declare <2 x double> @llvm.rint.v2f64(<2 x double>) nounwind readnone 491 492define <2 x float> @frintz_2s(<2 x float> %A) nounwind { 493;CHECK-LABEL: frintz_2s: 494;CHECK-NOT: ld1 495;CHECK: frintz.2s v0, v0 496;CHECK-NEXT: ret 497 %tmp3 = call <2 x float> @llvm.trunc.v2f32(<2 x float> %A) 498 ret <2 x float> %tmp3 499} 500 501define <4 x float> @frintz_4s(<4 x float> %A) nounwind { 502;CHECK-LABEL: frintz_4s: 503;CHECK-NOT: ld1 504;CHECK: frintz.4s v0, v0 505;CHECK-NEXT: ret 506 %tmp3 = call <4 x float> @llvm.trunc.v4f32(<4 x float> %A) 507 ret <4 x float> %tmp3 508} 509 510define <2 x double> @frintz_2d(<2 x double> %A) nounwind { 511;CHECK-LABEL: frintz_2d: 512;CHECK-NOT: ld1 513;CHECK: frintz.2d v0, v0 514;CHECK-NEXT: ret 515 %tmp3 = call <2 x double> @llvm.trunc.v2f64(<2 x double> %A) 516 ret <2 x double> %tmp3 517} 518 519declare <2 x float> @llvm.trunc.v2f32(<2 x float>) nounwind readnone 520declare <4 x float> @llvm.trunc.v4f32(<4 x float>) nounwind readnone 521declare <2 x double> @llvm.trunc.v2f64(<2 x double>) nounwind readnone 522 523define <2 x float> @fcvtxn_2s(<2 x double> %A) nounwind { 524;CHECK-LABEL: fcvtxn_2s: 525;CHECK-NOT: ld1 526;CHECK: fcvtxn v0.2s, v0.2d 527;CHECK-NEXT: ret 528 %tmp3 = call <2 x float> @llvm.aarch64.neon.fcvtxn.v2f32.v2f64(<2 x double> %A) 529 ret <2 x float> %tmp3 530} 531 532define <4 x float> @fcvtxn_4s(<2 x float> %ret, <2 x double> %A) nounwind { 533;CHECK-LABEL: fcvtxn_4s: 534;CHECK-NOT: ld1 535;CHECK: fcvtxn2 v0.4s, v1.2d 536;CHECK-NEXT: ret 537 %tmp3 = call <2 x float> @llvm.aarch64.neon.fcvtxn.v2f32.v2f64(<2 x double> %A) 538 %res = shufflevector <2 x float> %ret, <2 x float> %tmp3, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 539 ret <4 x float> %res 540} 541 542declare <2 x float> @llvm.aarch64.neon.fcvtxn.v2f32.v2f64(<2 x double>) nounwind readnone 543 544define <2 x i32> @fcvtzsc_2s(<2 x float> %A) nounwind { 545;CHECK-LABEL: fcvtzsc_2s: 546;CHECK-NOT: ld1 547;CHECK: fcvtzs.2s v0, v0, #1 548;CHECK-NEXT: ret 549 %tmp3 = call <2 x i32> @llvm.aarch64.neon.vcvtfp2fxs.v2i32.v2f32(<2 x float> %A, i32 1) 550 ret <2 x i32> %tmp3 551} 552 553define <4 x i32> @fcvtzsc_4s(<4 x float> %A) nounwind { 554;CHECK-LABEL: fcvtzsc_4s: 555;CHECK-NOT: ld1 556;CHECK: fcvtzs.4s v0, v0, #1 557;CHECK-NEXT: ret 558 %tmp3 = call <4 x i32> @llvm.aarch64.neon.vcvtfp2fxs.v4i32.v4f32(<4 x float> %A, i32 1) 559 ret <4 x i32> %tmp3 560} 561 562define <2 x i64> @fcvtzsc_2d(<2 x double> %A) nounwind { 563;CHECK-LABEL: fcvtzsc_2d: 564;CHECK-NOT: ld1 565;CHECK: fcvtzs.2d v0, v0, #1 566;CHECK-NEXT: ret 567 %tmp3 = call <2 x i64> @llvm.aarch64.neon.vcvtfp2fxs.v2i64.v2f64(<2 x double> %A, i32 1) 568 ret <2 x i64> %tmp3 569} 570 571declare <2 x i32> @llvm.aarch64.neon.vcvtfp2fxs.v2i32.v2f32(<2 x float>, i32) nounwind readnone 572declare <4 x i32> @llvm.aarch64.neon.vcvtfp2fxs.v4i32.v4f32(<4 x float>, i32) nounwind readnone 573declare <2 x i64> @llvm.aarch64.neon.vcvtfp2fxs.v2i64.v2f64(<2 x double>, i32) nounwind readnone 574 575define <2 x i32> @fcvtzuc_2s(<2 x float> %A) nounwind { 576;CHECK-LABEL: fcvtzuc_2s: 577;CHECK-NOT: ld1 578;CHECK: fcvtzu.2s v0, v0, #1 579;CHECK-NEXT: ret 580 %tmp3 = call <2 x i32> @llvm.aarch64.neon.vcvtfp2fxu.v2i32.v2f32(<2 x float> %A, i32 1) 581 ret <2 x i32> %tmp3 582} 583 584define <4 x i32> @fcvtzuc_4s(<4 x float> %A) nounwind { 585;CHECK-LABEL: fcvtzuc_4s: 586;CHECK-NOT: ld1 587;CHECK: fcvtzu.4s v0, v0, #1 588;CHECK-NEXT: ret 589 %tmp3 = call <4 x i32> @llvm.aarch64.neon.vcvtfp2fxu.v4i32.v4f32(<4 x float> %A, i32 1) 590 ret <4 x i32> %tmp3 591} 592 593define <2 x i64> @fcvtzuc_2d(<2 x double> %A) nounwind { 594;CHECK-LABEL: fcvtzuc_2d: 595;CHECK-NOT: ld1 596;CHECK: fcvtzu.2d v0, v0, #1 597;CHECK-NEXT: ret 598 %tmp3 = call <2 x i64> @llvm.aarch64.neon.vcvtfp2fxu.v2i64.v2f64(<2 x double> %A, i32 1) 599 ret <2 x i64> %tmp3 600} 601 602declare <2 x i32> @llvm.aarch64.neon.vcvtfp2fxu.v2i32.v2f32(<2 x float>, i32) nounwind readnone 603declare <4 x i32> @llvm.aarch64.neon.vcvtfp2fxu.v4i32.v4f32(<4 x float>, i32) nounwind readnone 604declare <2 x i64> @llvm.aarch64.neon.vcvtfp2fxu.v2i64.v2f64(<2 x double>, i32) nounwind readnone 605 606define <2 x float> @scvtf_2sc(<2 x i32> %A) nounwind { 607;CHECK-LABEL: scvtf_2sc: 608;CHECK-NOT: ld1 609;CHECK: scvtf.2s v0, v0, #1 610;CHECK-NEXT: ret 611 %tmp3 = call <2 x float> @llvm.aarch64.neon.vcvtfxs2fp.v2f32.v2i32(<2 x i32> %A, i32 1) 612 ret <2 x float> %tmp3 613} 614 615define <4 x float> @scvtf_4sc(<4 x i32> %A) nounwind { 616;CHECK-LABEL: scvtf_4sc: 617;CHECK-NOT: ld1 618;CHECK: scvtf.4s v0, v0, #1 619;CHECK-NEXT: ret 620 %tmp3 = call <4 x float> @llvm.aarch64.neon.vcvtfxs2fp.v4f32.v4i32(<4 x i32> %A, i32 1) 621 ret <4 x float> %tmp3 622} 623 624define <2 x double> @scvtf_2dc(<2 x i64> %A) nounwind { 625;CHECK-LABEL: scvtf_2dc: 626;CHECK-NOT: ld1 627;CHECK: scvtf.2d v0, v0, #1 628;CHECK-NEXT: ret 629 %tmp3 = call <2 x double> @llvm.aarch64.neon.vcvtfxs2fp.v2f64.v2i64(<2 x i64> %A, i32 1) 630 ret <2 x double> %tmp3 631} 632 633declare <2 x float> @llvm.aarch64.neon.vcvtfxs2fp.v2f32.v2i32(<2 x i32>, i32) nounwind readnone 634declare <4 x float> @llvm.aarch64.neon.vcvtfxs2fp.v4f32.v4i32(<4 x i32>, i32) nounwind readnone 635declare <2 x double> @llvm.aarch64.neon.vcvtfxs2fp.v2f64.v2i64(<2 x i64>, i32) nounwind readnone 636 637define <2 x float> @ucvtf_2sc(<2 x i32> %A) nounwind { 638;CHECK-LABEL: ucvtf_2sc: 639;CHECK-NOT: ld1 640;CHECK: ucvtf.2s v0, v0, #1 641;CHECK-NEXT: ret 642 %tmp3 = call <2 x float> @llvm.aarch64.neon.vcvtfxu2fp.v2f32.v2i32(<2 x i32> %A, i32 1) 643 ret <2 x float> %tmp3 644} 645 646define <4 x float> @ucvtf_4sc(<4 x i32> %A) nounwind { 647;CHECK-LABEL: ucvtf_4sc: 648;CHECK-NOT: ld1 649;CHECK: ucvtf.4s v0, v0, #1 650;CHECK-NEXT: ret 651 %tmp3 = call <4 x float> @llvm.aarch64.neon.vcvtfxu2fp.v4f32.v4i32(<4 x i32> %A, i32 1) 652 ret <4 x float> %tmp3 653} 654 655define <2 x double> @ucvtf_2dc(<2 x i64> %A) nounwind { 656;CHECK-LABEL: ucvtf_2dc: 657;CHECK-NOT: ld1 658;CHECK: ucvtf.2d v0, v0, #1 659;CHECK-NEXT: ret 660 %tmp3 = call <2 x double> @llvm.aarch64.neon.vcvtfxu2fp.v2f64.v2i64(<2 x i64> %A, i32 1) 661 ret <2 x double> %tmp3 662} 663 664 665;CHECK-LABEL: autogen_SD28458: 666;CHECK: fcvt 667;CHECK: ret 668define void @autogen_SD28458(<8 x double> %val.f64, <8 x float>* %addr.f32) { 669 %Tr53 = fptrunc <8 x double> %val.f64 to <8 x float> 670 store <8 x float> %Tr53, <8 x float>* %addr.f32 671 ret void 672} 673 674;CHECK-LABEL: autogen_SD19225: 675;CHECK: fcvt 676;CHECK: ret 677define void @autogen_SD19225(<8 x double>* %addr.f64, <8 x float>* %addr.f32) { 678 %A = load <8 x float>, <8 x float>* %addr.f32 679 %Tr53 = fpext <8 x float> %A to <8 x double> 680 store <8 x double> %Tr53, <8 x double>* %addr.f64 681 ret void 682} 683 684declare <2 x float> @llvm.aarch64.neon.vcvtfxu2fp.v2f32.v2i32(<2 x i32>, i32) nounwind readnone 685declare <4 x float> @llvm.aarch64.neon.vcvtfxu2fp.v4f32.v4i32(<4 x i32>, i32) nounwind readnone 686declare <2 x double> @llvm.aarch64.neon.vcvtfxu2fp.v2f64.v2i64(<2 x i64>, i32) nounwind readnone 687