1; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon -verify-machineinstrs < %s | FileCheck %s 2 3; From <8 x i8> 4 5define <1 x i64> @test_v8i8_to_v1i64(<8 x i8> %in) nounwind { 6; CHECK: test_v8i8_to_v1i64: 7; CHECK-NEXT: // %bb.0: 8; CHECK-NEXT: ret 9 10 %val = bitcast <8 x i8> %in to <1 x i64> 11 ret <1 x i64> %val 12} 13 14define <2 x i32> @test_v8i8_to_v2i32(<8 x i8> %in) nounwind { 15; CHECK: test_v8i8_to_v2i32: 16; CHECK-NEXT: // %bb.0: 17; CHECK-NEXT: ret 18 19 %val = bitcast <8 x i8> %in to <2 x i32> 20 ret <2 x i32> %val 21} 22 23define <2 x float> @test_v8i8_to_v2f32(<8 x i8> %in) nounwind{ 24; CHECK: test_v8i8_to_v2f32: 25; CHECK-NEXT: // %bb.0: 26; CHECK-NEXT: ret 27 28 %val = bitcast <8 x i8> %in to <2 x float> 29 ret <2 x float> %val 30} 31 32define <4 x i16> @test_v8i8_to_v4i16(<8 x i8> %in) nounwind{ 33; CHECK: test_v8i8_to_v4i16: 34; CHECK-NEXT: // %bb.0: 35; CHECK-NEXT: ret 36 37 %val = bitcast <8 x i8> %in to <4 x i16> 38 ret <4 x i16> %val 39} 40 41define <8 x i8> @test_v8i8_to_v8i8(<8 x i8> %in) nounwind{ 42; CHECK: test_v8i8_to_v8i8: 43; CHECK-NEXT: // %bb.0: 44; CHECK-NEXT: ret 45 46 %val = bitcast <8 x i8> %in to <8 x i8> 47 ret <8 x i8> %val 48} 49 50; From <4 x i16> 51 52define <1 x i64> @test_v4i16_to_v1i64(<4 x i16> %in) nounwind { 53; CHECK: test_v4i16_to_v1i64: 54; CHECK-NEXT: // %bb.0: 55; CHECK-NEXT: ret 56 57 %val = bitcast <4 x i16> %in to <1 x i64> 58 ret <1 x i64> %val 59} 60 61define <2 x i32> @test_v4i16_to_v2i32(<4 x i16> %in) nounwind { 62; CHECK: test_v4i16_to_v2i32: 63; CHECK-NEXT: // %bb.0: 64; CHECK-NEXT: ret 65 66 %val = bitcast <4 x i16> %in to <2 x i32> 67 ret <2 x i32> %val 68} 69 70define <2 x float> @test_v4i16_to_v2f32(<4 x i16> %in) nounwind{ 71; CHECK: test_v4i16_to_v2f32: 72; CHECK-NEXT: // %bb.0: 73; CHECK-NEXT: ret 74 75 %val = bitcast <4 x i16> %in to <2 x float> 76 ret <2 x float> %val 77} 78 79define <4 x i16> @test_v4i16_to_v4i16(<4 x i16> %in) nounwind{ 80; CHECK: test_v4i16_to_v4i16: 81; CHECK-NEXT: // %bb.0: 82; CHECK-NEXT: ret 83 84 %val = bitcast <4 x i16> %in to <4 x i16> 85 ret <4 x i16> %val 86} 87 88define <8 x i8> @test_v4i16_to_v8i8(<4 x i16> %in) nounwind{ 89; CHECK: test_v4i16_to_v8i8: 90; CHECK-NEXT: // %bb.0: 91; CHECK-NEXT: ret 92 93 %val = bitcast <4 x i16> %in to <8 x i8> 94 ret <8 x i8> %val 95} 96 97; From <2 x i32> 98 99define <1 x i64> @test_v2i32_to_v1i64(<2 x i32> %in) nounwind { 100; CHECK: test_v2i32_to_v1i64: 101; CHECK-NEXT: // %bb.0: 102; CHECK-NEXT: ret 103 104 %val = bitcast <2 x i32> %in to <1 x i64> 105 ret <1 x i64> %val 106} 107 108define <2 x i32> @test_v2i32_to_v2i32(<2 x i32> %in) nounwind { 109; CHECK: test_v2i32_to_v2i32: 110; CHECK-NEXT: // %bb.0: 111; CHECK-NEXT: ret 112 113 %val = bitcast <2 x i32> %in to <2 x i32> 114 ret <2 x i32> %val 115} 116 117define <2 x float> @test_v2i32_to_v2f32(<2 x i32> %in) nounwind{ 118; CHECK: test_v2i32_to_v2f32: 119; CHECK-NEXT: // %bb.0: 120; CHECK-NEXT: ret 121 122 %val = bitcast <2 x i32> %in to <2 x float> 123 ret <2 x float> %val 124} 125 126define <4 x i16> @test_v2i32_to_v4i16(<2 x i32> %in) nounwind{ 127; CHECK: test_v2i32_to_v4i16: 128; CHECK-NEXT: // %bb.0: 129; CHECK-NEXT: ret 130 131 %val = bitcast <2 x i32> %in to <4 x i16> 132 ret <4 x i16> %val 133} 134 135define <8 x i8> @test_v2i32_to_v8i8(<2 x i32> %in) nounwind{ 136; CHECK: test_v2i32_to_v8i8: 137; CHECK-NEXT: // %bb.0: 138; CHECK-NEXT: ret 139 140 %val = bitcast <2 x i32> %in to <8 x i8> 141 ret <8 x i8> %val 142} 143 144; From <2 x float> 145 146define <1 x i64> @test_v2f32_to_v1i64(<2 x float> %in) nounwind { 147; CHECK: test_v2f32_to_v1i64: 148; CHECK-NEXT: // %bb.0: 149; CHECK-NEXT: ret 150 151 %val = bitcast <2 x float> %in to <1 x i64> 152 ret <1 x i64> %val 153} 154 155define <2 x i32> @test_v2f32_to_v2i32(<2 x float> %in) nounwind { 156; CHECK: test_v2f32_to_v2i32: 157; CHECK-NEXT: // %bb.0: 158; CHECK-NEXT: ret 159 160 %val = bitcast <2 x float> %in to <2 x i32> 161 ret <2 x i32> %val 162} 163 164define <2 x float> @test_v2f32_to_v2f32(<2 x float> %in) nounwind{ 165; CHECK: test_v2f32_to_v2f32: 166; CHECK-NEXT: // %bb.0: 167; CHECK-NEXT: ret 168 169 %val = bitcast <2 x float> %in to <2 x float> 170 ret <2 x float> %val 171} 172 173define <4 x i16> @test_v2f32_to_v4i16(<2 x float> %in) nounwind{ 174; CHECK: test_v2f32_to_v4i16: 175; CHECK-NEXT: // %bb.0: 176; CHECK-NEXT: ret 177 178 %val = bitcast <2 x float> %in to <4 x i16> 179 ret <4 x i16> %val 180} 181 182define <8 x i8> @test_v2f32_to_v8i8(<2 x float> %in) nounwind{ 183; CHECK: test_v2f32_to_v8i8: 184; CHECK-NEXT: // %bb.0: 185; CHECK-NEXT: ret 186 187 %val = bitcast <2 x float> %in to <8 x i8> 188 ret <8 x i8> %val 189} 190 191; From <1 x i64> 192 193define <1 x i64> @test_v1i64_to_v1i64(<1 x i64> %in) nounwind { 194; CHECK: test_v1i64_to_v1i64: 195; CHECK-NEXT: // %bb.0: 196; CHECK-NEXT: ret 197 198 %val = bitcast <1 x i64> %in to <1 x i64> 199 ret <1 x i64> %val 200} 201 202define <2 x i32> @test_v1i64_to_v2i32(<1 x i64> %in) nounwind { 203; CHECK: test_v1i64_to_v2i32: 204; CHECK-NEXT: // %bb.0: 205; CHECK-NEXT: ret 206 207 %val = bitcast <1 x i64> %in to <2 x i32> 208 ret <2 x i32> %val 209} 210 211define <2 x float> @test_v1i64_to_v2f32(<1 x i64> %in) nounwind{ 212; CHECK: test_v1i64_to_v2f32: 213; CHECK-NEXT: // %bb.0: 214; CHECK-NEXT: ret 215 216 %val = bitcast <1 x i64> %in to <2 x float> 217 ret <2 x float> %val 218} 219 220define <4 x i16> @test_v1i64_to_v4i16(<1 x i64> %in) nounwind{ 221; CHECK: test_v1i64_to_v4i16: 222; CHECK-NEXT: // %bb.0: 223; CHECK-NEXT: ret 224 225 %val = bitcast <1 x i64> %in to <4 x i16> 226 ret <4 x i16> %val 227} 228 229define <8 x i8> @test_v1i64_to_v8i8(<1 x i64> %in) nounwind{ 230; CHECK: test_v1i64_to_v8i8: 231; CHECK-NEXT: // %bb.0: 232; CHECK-NEXT: ret 233 234 %val = bitcast <1 x i64> %in to <8 x i8> 235 ret <8 x i8> %val 236} 237 238 239; From <16 x i8> 240 241define <2 x double> @test_v16i8_to_v2f64(<16 x i8> %in) nounwind { 242; CHECK: test_v16i8_to_v2f64: 243; CHECK-NEXT: // %bb.0: 244; CHECK-NEXT: ret 245 246 %val = bitcast <16 x i8> %in to <2 x double> 247 ret <2 x double> %val 248} 249 250define <2 x i64> @test_v16i8_to_v2i64(<16 x i8> %in) nounwind { 251; CHECK: test_v16i8_to_v2i64: 252; CHECK-NEXT: // %bb.0: 253; CHECK-NEXT: ret 254 255 %val = bitcast <16 x i8> %in to <2 x i64> 256 ret <2 x i64> %val 257} 258 259define <4 x i32> @test_v16i8_to_v4i32(<16 x i8> %in) nounwind { 260; CHECK: test_v16i8_to_v4i32: 261; CHECK-NEXT: // %bb.0: 262; CHECK-NEXT: ret 263 264 %val = bitcast <16 x i8> %in to <4 x i32> 265 ret <4 x i32> %val 266} 267 268define <4 x float> @test_v16i8_to_v2f32(<16 x i8> %in) nounwind{ 269; CHECK: test_v16i8_to_v2f32: 270; CHECK-NEXT: // %bb.0: 271; CHECK-NEXT: ret 272 273 %val = bitcast <16 x i8> %in to <4 x float> 274 ret <4 x float> %val 275} 276 277define <8 x i16> @test_v16i8_to_v8i16(<16 x i8> %in) nounwind{ 278; CHECK: test_v16i8_to_v8i16: 279; CHECK-NEXT: // %bb.0: 280; CHECK-NEXT: ret 281 282 %val = bitcast <16 x i8> %in to <8 x i16> 283 ret <8 x i16> %val 284} 285 286define <16 x i8> @test_v16i8_to_v16i8(<16 x i8> %in) nounwind{ 287; CHECK: test_v16i8_to_v16i8: 288; CHECK-NEXT: // %bb.0: 289; CHECK-NEXT: ret 290 291 %val = bitcast <16 x i8> %in to <16 x i8> 292 ret <16 x i8> %val 293} 294 295; From <8 x i16> 296 297define <2 x double> @test_v8i16_to_v2f64(<8 x i16> %in) nounwind { 298; CHECK: test_v8i16_to_v2f64: 299; CHECK-NEXT: // %bb.0: 300; CHECK-NEXT: ret 301 302 %val = bitcast <8 x i16> %in to <2 x double> 303 ret <2 x double> %val 304} 305 306define <2 x i64> @test_v8i16_to_v2i64(<8 x i16> %in) nounwind { 307; CHECK: test_v8i16_to_v2i64: 308; CHECK-NEXT: // %bb.0: 309; CHECK-NEXT: ret 310 311 %val = bitcast <8 x i16> %in to <2 x i64> 312 ret <2 x i64> %val 313} 314 315define <4 x i32> @test_v8i16_to_v4i32(<8 x i16> %in) nounwind { 316; CHECK: test_v8i16_to_v4i32: 317; CHECK-NEXT: // %bb.0: 318; CHECK-NEXT: ret 319 320 %val = bitcast <8 x i16> %in to <4 x i32> 321 ret <4 x i32> %val 322} 323 324define <4 x float> @test_v8i16_to_v2f32(<8 x i16> %in) nounwind{ 325; CHECK: test_v8i16_to_v2f32: 326; CHECK-NEXT: // %bb.0: 327; CHECK-NEXT: ret 328 329 %val = bitcast <8 x i16> %in to <4 x float> 330 ret <4 x float> %val 331} 332 333define <8 x i16> @test_v8i16_to_v8i16(<8 x i16> %in) nounwind{ 334; CHECK: test_v8i16_to_v8i16: 335; CHECK-NEXT: // %bb.0: 336; CHECK-NEXT: ret 337 338 %val = bitcast <8 x i16> %in to <8 x i16> 339 ret <8 x i16> %val 340} 341 342define <16 x i8> @test_v8i16_to_v16i8(<8 x i16> %in) nounwind{ 343; CHECK: test_v8i16_to_v16i8: 344; CHECK-NEXT: // %bb.0: 345; CHECK-NEXT: ret 346 347 %val = bitcast <8 x i16> %in to <16 x i8> 348 ret <16 x i8> %val 349} 350 351; From <4 x i32> 352 353define <2 x double> @test_v4i32_to_v2f64(<4 x i32> %in) nounwind { 354; CHECK: test_v4i32_to_v2f64: 355; CHECK-NEXT: // %bb.0: 356; CHECK-NEXT: ret 357 358 %val = bitcast <4 x i32> %in to <2 x double> 359 ret <2 x double> %val 360} 361 362define <2 x i64> @test_v4i32_to_v2i64(<4 x i32> %in) nounwind { 363; CHECK: test_v4i32_to_v2i64: 364; CHECK-NEXT: // %bb.0: 365; CHECK-NEXT: ret 366 367 %val = bitcast <4 x i32> %in to <2 x i64> 368 ret <2 x i64> %val 369} 370 371define <4 x i32> @test_v4i32_to_v4i32(<4 x i32> %in) nounwind { 372; CHECK: test_v4i32_to_v4i32: 373; CHECK-NEXT: // %bb.0: 374; CHECK-NEXT: ret 375 376 %val = bitcast <4 x i32> %in to <4 x i32> 377 ret <4 x i32> %val 378} 379 380define <4 x float> @test_v4i32_to_v2f32(<4 x i32> %in) nounwind{ 381; CHECK: test_v4i32_to_v2f32: 382; CHECK-NEXT: // %bb.0: 383; CHECK-NEXT: ret 384 385 %val = bitcast <4 x i32> %in to <4 x float> 386 ret <4 x float> %val 387} 388 389define <8 x i16> @test_v4i32_to_v8i16(<4 x i32> %in) nounwind{ 390; CHECK: test_v4i32_to_v8i16: 391; CHECK-NEXT: // %bb.0: 392; CHECK-NEXT: ret 393 394 %val = bitcast <4 x i32> %in to <8 x i16> 395 ret <8 x i16> %val 396} 397 398define <16 x i8> @test_v4i32_to_v16i8(<4 x i32> %in) nounwind{ 399; CHECK: test_v4i32_to_v16i8: 400; CHECK-NEXT: // %bb.0: 401; CHECK-NEXT: ret 402 403 %val = bitcast <4 x i32> %in to <16 x i8> 404 ret <16 x i8> %val 405} 406 407; From <4 x float> 408 409define <2 x double> @test_v4f32_to_v2f64(<4 x float> %in) nounwind { 410; CHECK: test_v4f32_to_v2f64: 411; CHECK-NEXT: // %bb.0: 412; CHECK-NEXT: ret 413 414 %val = bitcast <4 x float> %in to <2 x double> 415 ret <2 x double> %val 416} 417 418define <2 x i64> @test_v4f32_to_v2i64(<4 x float> %in) nounwind { 419; CHECK: test_v4f32_to_v2i64: 420; CHECK-NEXT: // %bb.0: 421; CHECK-NEXT: ret 422 423 %val = bitcast <4 x float> %in to <2 x i64> 424 ret <2 x i64> %val 425} 426 427define <4 x i32> @test_v4f32_to_v4i32(<4 x float> %in) nounwind { 428; CHECK: test_v4f32_to_v4i32: 429; CHECK-NEXT: // %bb.0: 430; CHECK-NEXT: ret 431 432 %val = bitcast <4 x float> %in to <4 x i32> 433 ret <4 x i32> %val 434} 435 436define <4 x float> @test_v4f32_to_v4f32(<4 x float> %in) nounwind{ 437; CHECK: test_v4f32_to_v4f32: 438; CHECK-NEXT: // %bb.0: 439; CHECK-NEXT: ret 440 441 %val = bitcast <4 x float> %in to <4 x float> 442 ret <4 x float> %val 443} 444 445define <8 x i16> @test_v4f32_to_v8i16(<4 x float> %in) nounwind{ 446; CHECK: test_v4f32_to_v8i16: 447; CHECK-NEXT: // %bb.0: 448; CHECK-NEXT: ret 449 450 %val = bitcast <4 x float> %in to <8 x i16> 451 ret <8 x i16> %val 452} 453 454define <16 x i8> @test_v4f32_to_v16i8(<4 x float> %in) nounwind{ 455; CHECK: test_v4f32_to_v16i8: 456; CHECK-NEXT: // %bb.0: 457; CHECK-NEXT: ret 458 459 %val = bitcast <4 x float> %in to <16 x i8> 460 ret <16 x i8> %val 461} 462 463; From <2 x i64> 464 465define <2 x double> @test_v2i64_to_v2f64(<2 x i64> %in) nounwind { 466; CHECK: test_v2i64_to_v2f64: 467; CHECK-NEXT: // %bb.0: 468; CHECK-NEXT: ret 469 470 %val = bitcast <2 x i64> %in to <2 x double> 471 ret <2 x double> %val 472} 473 474define <2 x i64> @test_v2i64_to_v2i64(<2 x i64> %in) nounwind { 475; CHECK: test_v2i64_to_v2i64: 476; CHECK-NEXT: // %bb.0: 477; CHECK-NEXT: ret 478 479 %val = bitcast <2 x i64> %in to <2 x i64> 480 ret <2 x i64> %val 481} 482 483define <4 x i32> @test_v2i64_to_v4i32(<2 x i64> %in) nounwind { 484; CHECK: test_v2i64_to_v4i32: 485; CHECK-NEXT: // %bb.0: 486; CHECK-NEXT: ret 487 488 %val = bitcast <2 x i64> %in to <4 x i32> 489 ret <4 x i32> %val 490} 491 492define <4 x float> @test_v2i64_to_v4f32(<2 x i64> %in) nounwind{ 493; CHECK: test_v2i64_to_v4f32: 494; CHECK-NEXT: // %bb.0: 495; CHECK-NEXT: ret 496 497 %val = bitcast <2 x i64> %in to <4 x float> 498 ret <4 x float> %val 499} 500 501define <8 x i16> @test_v2i64_to_v8i16(<2 x i64> %in) nounwind{ 502; CHECK: test_v2i64_to_v8i16: 503; CHECK-NEXT: // %bb.0: 504; CHECK-NEXT: ret 505 506 %val = bitcast <2 x i64> %in to <8 x i16> 507 ret <8 x i16> %val 508} 509 510define <16 x i8> @test_v2i64_to_v16i8(<2 x i64> %in) nounwind{ 511; CHECK: test_v2i64_to_v16i8: 512; CHECK-NEXT: // %bb.0: 513; CHECK-NEXT: ret 514 515 %val = bitcast <2 x i64> %in to <16 x i8> 516 ret <16 x i8> %val 517} 518 519; From <2 x double> 520 521define <2 x double> @test_v2f64_to_v2f64(<2 x double> %in) nounwind { 522; CHECK: test_v2f64_to_v2f64: 523; CHECK-NEXT: // %bb.0: 524; CHECK-NEXT: ret 525 526 %val = bitcast <2 x double> %in to <2 x double> 527 ret <2 x double> %val 528} 529 530define <2 x i64> @test_v2f64_to_v2i64(<2 x double> %in) nounwind { 531; CHECK: test_v2f64_to_v2i64: 532; CHECK-NEXT: // %bb.0: 533; CHECK-NEXT: ret 534 535 %val = bitcast <2 x double> %in to <2 x i64> 536 ret <2 x i64> %val 537} 538 539define <4 x i32> @test_v2f64_to_v4i32(<2 x double> %in) nounwind { 540; CHECK: test_v2f64_to_v4i32: 541; CHECK-NEXT: // %bb.0: 542; CHECK-NEXT: ret 543 544 %val = bitcast <2 x double> %in to <4 x i32> 545 ret <4 x i32> %val 546} 547 548define <4 x float> @test_v2f64_to_v4f32(<2 x double> %in) nounwind{ 549; CHECK: test_v2f64_to_v4f32: 550; CHECK-NEXT: // %bb.0: 551; CHECK-NEXT: ret 552 553 %val = bitcast <2 x double> %in to <4 x float> 554 ret <4 x float> %val 555} 556 557define <8 x i16> @test_v2f64_to_v8i16(<2 x double> %in) nounwind{ 558; CHECK: test_v2f64_to_v8i16: 559; CHECK-NEXT: // %bb.0: 560; CHECK-NEXT: ret 561 562 %val = bitcast <2 x double> %in to <8 x i16> 563 ret <8 x i16> %val 564} 565 566define <16 x i8> @test_v2f64_to_v16i8(<2 x double> %in) nounwind{ 567; CHECK: test_v2f64_to_v16i8: 568; CHECK-NEXT: // %bb.0: 569; CHECK-NEXT: ret 570 571 %val = bitcast <2 x double> %in to <16 x i8> 572 ret <16 x i8> %val 573} 574 575