comparison test/CodeGen/AArch64/arm64-st1.ll @ 134:3a76565eade5 LLVM5.0.1

update 5.0.1
author mir3636
date Sat, 17 Feb 2018 09:57:20 +0900
parents 1172e4bd9c6f
children c2174574ed3a
comparison
equal deleted inserted replaced
133:c60214abe0e8 134:3a76565eade5
1 ; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple -verify-machineinstrs | FileCheck %s 1 ; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple -verify-machineinstrs | FileCheck %s
2 ; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple -verify-machineinstrs -mcpu=exynos-m1 | FileCheck --check-prefix=EXYNOS %s
3 ; The instruction latencies of Exynos-M1 trigger the transform we see under the Exynos check.
2 4
3 define void @st1lane_16b(<16 x i8> %A, i8* %D) { 5 define void @st1lane_16b(<16 x i8> %A, i8* %D) {
4 ; CHECK-LABEL: st1lane_16b 6 ; CHECK-LABEL: st1lane_16b
5 ; CHECK: st1.b 7 ; CHECK: st1.b
6 %tmp = extractelement <16 x i8> %A, i32 1 8 %tmp = extractelement <16 x i8> %A, i32 1
373 375
374 376
375 define void @st2_8b(<8 x i8> %A, <8 x i8> %B, i8* %P) nounwind { 377 define void @st2_8b(<8 x i8> %A, <8 x i8> %B, i8* %P) nounwind {
376 ; CHECK-LABEL: st2_8b 378 ; CHECK-LABEL: st2_8b
377 ; CHECK: st2.8b 379 ; CHECK: st2.8b
380 ; EXYNOS-LABEL: st2_8b
381 ; EXYNOS: zip1.8b
382 ; EXYNOS: zip2.8b
383 ; EXYNOS: stp
378 call void @llvm.aarch64.neon.st2.v8i8.p0i8(<8 x i8> %A, <8 x i8> %B, i8* %P) 384 call void @llvm.aarch64.neon.st2.v8i8.p0i8(<8 x i8> %A, <8 x i8> %B, i8* %P)
379 ret void 385 ret void
380 } 386 }
381 387
382 define void @st3_8b(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C, i8* %P) nounwind { 388 define void @st3_8b(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C, i8* %P) nounwind {
387 } 393 }
388 394
389 define void @st4_8b(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i8* %P) nounwind { 395 define void @st4_8b(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i8* %P) nounwind {
390 ; CHECK-LABEL: st4_8b 396 ; CHECK-LABEL: st4_8b
391 ; CHECK: st4.8b 397 ; CHECK: st4.8b
398 ; EXYNOS-LABEL: st4_8b
399 ; EXYNOS: zip1.8b
400 ; EXYNOS: zip2.8b
401 ; EXYNOS: zip1.8b
402 ; EXYNOS: zip2.8b
403 ; EXYNOS: zip1.8b
404 ; EXYNOS: zip2.8b
405 ; EXYNOS: stp
406 ; EXYNOS: zip1.8b
407 ; EXYNOS: zip2.8b
408 ; EXYNOS: stp
392 call void @llvm.aarch64.neon.st4.v8i8.p0i8(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i8* %P) 409 call void @llvm.aarch64.neon.st4.v8i8.p0i8(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i8* %P)
393 ret void 410 ret void
394 } 411 }
395 412
396 declare void @llvm.aarch64.neon.st2.v8i8.p0i8(<8 x i8>, <8 x i8>, i8*) nounwind readonly 413 declare void @llvm.aarch64.neon.st2.v8i8.p0i8(<8 x i8>, <8 x i8>, i8*) nounwind readonly
398 declare void @llvm.aarch64.neon.st4.v8i8.p0i8(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, i8*) nounwind readonly 415 declare void @llvm.aarch64.neon.st4.v8i8.p0i8(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, i8*) nounwind readonly
399 416
400 define void @st2_16b(<16 x i8> %A, <16 x i8> %B, i8* %P) nounwind { 417 define void @st2_16b(<16 x i8> %A, <16 x i8> %B, i8* %P) nounwind {
401 ; CHECK-LABEL: st2_16b 418 ; CHECK-LABEL: st2_16b
402 ; CHECK: st2.16b 419 ; CHECK: st2.16b
420 ; EXYNOS-LABEL: st2_16b
421 ; EXYNOS: zip1.16b
422 ; EXYNOS: zip2.16b
423 ; EXYNOS: stp
403 call void @llvm.aarch64.neon.st2.v16i8.p0i8(<16 x i8> %A, <16 x i8> %B, i8* %P) 424 call void @llvm.aarch64.neon.st2.v16i8.p0i8(<16 x i8> %A, <16 x i8> %B, i8* %P)
404 ret void 425 ret void
405 } 426 }
406 427
407 define void @st3_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, i8* %P) nounwind { 428 define void @st3_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, i8* %P) nounwind {
412 } 433 }
413 434
414 define void @st4_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i8* %P) nounwind { 435 define void @st4_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i8* %P) nounwind {
415 ; CHECK-LABEL: st4_16b 436 ; CHECK-LABEL: st4_16b
416 ; CHECK: st4.16b 437 ; CHECK: st4.16b
438 ; EXYNOS-LABEL: st4_16b
439 ; EXYNOS: zip1.16b
440 ; EXYNOS: zip2.16b
441 ; EXYNOS: zip1.16b
442 ; EXYNOS: zip2.16b
443 ; EXYNOS: zip1.16b
444 ; EXYNOS: zip2.16b
445 ; EXYNOS: stp
446 ; EXYNOS: zip1.16b
447 ; EXYNOS: zip2.16b
448 ; EXYNOS: stp
417 call void @llvm.aarch64.neon.st4.v16i8.p0i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i8* %P) 449 call void @llvm.aarch64.neon.st4.v16i8.p0i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i8* %P)
418 ret void 450 ret void
419 } 451 }
420 452
421 declare void @llvm.aarch64.neon.st2.v16i8.p0i8(<16 x i8>, <16 x i8>, i8*) nounwind readonly 453 declare void @llvm.aarch64.neon.st2.v16i8.p0i8(<16 x i8>, <16 x i8>, i8*) nounwind readonly
423 declare void @llvm.aarch64.neon.st4.v16i8.p0i8(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, i8*) nounwind readonly 455 declare void @llvm.aarch64.neon.st4.v16i8.p0i8(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, i8*) nounwind readonly
424 456
425 define void @st2_4h(<4 x i16> %A, <4 x i16> %B, i16* %P) nounwind { 457 define void @st2_4h(<4 x i16> %A, <4 x i16> %B, i16* %P) nounwind {
426 ; CHECK-LABEL: st2_4h 458 ; CHECK-LABEL: st2_4h
427 ; CHECK: st2.4h 459 ; CHECK: st2.4h
460 ; EXYNOS-LABEL: st2_4h
461 ; EXYNOS: zip1.4h
462 ; EXYNOS: zip2.4h
463 ; EXYNOS: stp
428 call void @llvm.aarch64.neon.st2.v4i16.p0i16(<4 x i16> %A, <4 x i16> %B, i16* %P) 464 call void @llvm.aarch64.neon.st2.v4i16.p0i16(<4 x i16> %A, <4 x i16> %B, i16* %P)
429 ret void 465 ret void
430 } 466 }
431 467
432 define void @st3_4h(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C, i16* %P) nounwind { 468 define void @st3_4h(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C, i16* %P) nounwind {
437 } 473 }
438 474
439 define void @st4_4h(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i16* %P) nounwind { 475 define void @st4_4h(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i16* %P) nounwind {
440 ; CHECK-LABEL: st4_4h 476 ; CHECK-LABEL: st4_4h
441 ; CHECK: st4.4h 477 ; CHECK: st4.4h
478 ; EXYNOS-LABEL: st4_4h
479 ; EXYNOS: zip1.4h
480 ; EXYNOS: zip2.4h
481 ; EXYNOS: zip1.4h
482 ; EXYNOS: zip2.4h
483 ; EXYNOS: zip1.4h
484 ; EXYNOS: zip2.4h
485 ; EXYNOS: stp
486 ; EXYNOS: zip1.4h
487 ; EXYNOS: zip2.4h
488 ; EXYNOS: stp
442 call void @llvm.aarch64.neon.st4.v4i16.p0i16(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i16* %P) 489 call void @llvm.aarch64.neon.st4.v4i16.p0i16(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i16* %P)
443 ret void 490 ret void
444 } 491 }
445 492
446 declare void @llvm.aarch64.neon.st2.v4i16.p0i16(<4 x i16>, <4 x i16>, i16*) nounwind readonly 493 declare void @llvm.aarch64.neon.st2.v4i16.p0i16(<4 x i16>, <4 x i16>, i16*) nounwind readonly
448 declare void @llvm.aarch64.neon.st4.v4i16.p0i16(<4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>, i16*) nounwind readonly 495 declare void @llvm.aarch64.neon.st4.v4i16.p0i16(<4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>, i16*) nounwind readonly
449 496
450 define void @st2_8h(<8 x i16> %A, <8 x i16> %B, i16* %P) nounwind { 497 define void @st2_8h(<8 x i16> %A, <8 x i16> %B, i16* %P) nounwind {
451 ; CHECK-LABEL: st2_8h 498 ; CHECK-LABEL: st2_8h
452 ; CHECK: st2.8h 499 ; CHECK: st2.8h
500 ; EXYNOS-LABEL: st2_8h
501 ; EXYNOS: zip1.8h
502 ; EXYNOS: zip2.8h
503 ; EXYNOS: stp
453 call void @llvm.aarch64.neon.st2.v8i16.p0i16(<8 x i16> %A, <8 x i16> %B, i16* %P) 504 call void @llvm.aarch64.neon.st2.v8i16.p0i16(<8 x i16> %A, <8 x i16> %B, i16* %P)
454 ret void 505 ret void
455 } 506 }
456 507
457 define void @st3_8h(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, i16* %P) nounwind { 508 define void @st3_8h(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, i16* %P) nounwind {
462 } 513 }
463 514
464 define void @st4_8h(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i16* %P) nounwind { 515 define void @st4_8h(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i16* %P) nounwind {
465 ; CHECK-LABEL: st4_8h 516 ; CHECK-LABEL: st4_8h
466 ; CHECK: st4.8h 517 ; CHECK: st4.8h
518 ; EXYNOS-LABEL: st4_8h
519 ; EXYNOS: zip1.8h
520 ; EXYNOS: zip2.8h
521 ; EXYNOS: zip1.8h
522 ; EXYNOS: zip2.8h
523 ; EXYNOS: zip1.8h
524 ; EXYNOS: zip2.8h
525 ; EXYNOS: stp
526 ; EXYNOS: zip1.8h
527 ; EXYNOS: zip2.8h
528 ; EXYNOS: stp
467 call void @llvm.aarch64.neon.st4.v8i16.p0i16(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i16* %P) 529 call void @llvm.aarch64.neon.st4.v8i16.p0i16(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i16* %P)
468 ret void 530 ret void
469 } 531 }
470 532
471 declare void @llvm.aarch64.neon.st2.v8i16.p0i16(<8 x i16>, <8 x i16>, i16*) nounwind readonly 533 declare void @llvm.aarch64.neon.st2.v8i16.p0i16(<8 x i16>, <8 x i16>, i16*) nounwind readonly
473 declare void @llvm.aarch64.neon.st4.v8i16.p0i16(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i16*) nounwind readonly 535 declare void @llvm.aarch64.neon.st4.v8i16.p0i16(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i16*) nounwind readonly
474 536
475 define void @st2_2s(<2 x i32> %A, <2 x i32> %B, i32* %P) nounwind { 537 define void @st2_2s(<2 x i32> %A, <2 x i32> %B, i32* %P) nounwind {
476 ; CHECK-LABEL: st2_2s 538 ; CHECK-LABEL: st2_2s
477 ; CHECK: st2.2s 539 ; CHECK: st2.2s
540 ; EXYNOS-LABEL: st2_2s
541 ; EXYNOS: zip1.2s
542 ; EXYNOS: zip2.2s
543 ; EXYNOS: stp
478 call void @llvm.aarch64.neon.st2.v2i32.p0i32(<2 x i32> %A, <2 x i32> %B, i32* %P) 544 call void @llvm.aarch64.neon.st2.v2i32.p0i32(<2 x i32> %A, <2 x i32> %B, i32* %P)
479 ret void 545 ret void
480 } 546 }
481 547
482 define void @st3_2s(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C, i32* %P) nounwind { 548 define void @st3_2s(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C, i32* %P) nounwind {
487 } 553 }
488 554
489 define void @st4_2s(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i32* %P) nounwind { 555 define void @st4_2s(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i32* %P) nounwind {
490 ; CHECK-LABEL: st4_2s 556 ; CHECK-LABEL: st4_2s
491 ; CHECK: st4.2s 557 ; CHECK: st4.2s
558 ; EXYNOS-LABEL: st4_2s
559 ; EXYNOS: zip1.2s
560 ; EXYNOS: zip2.2s
561 ; EXYNOS: zip1.2s
562 ; EXYNOS: zip2.2s
563 ; EXYNOS: zip1.2s
564 ; EXYNOS: zip2.2s
565 ; EXYNOS: stp
566 ; EXYNOS: zip1.2s
567 ; EXYNOS: zip2.2s
568 ; EXYNOS: stp
492 call void @llvm.aarch64.neon.st4.v2i32.p0i32(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i32* %P) 569 call void @llvm.aarch64.neon.st4.v2i32.p0i32(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i32* %P)
493 ret void 570 ret void
494 } 571 }
495 572
496 declare void @llvm.aarch64.neon.st2.v2i32.p0i32(<2 x i32>, <2 x i32>, i32*) nounwind readonly 573 declare void @llvm.aarch64.neon.st2.v2i32.p0i32(<2 x i32>, <2 x i32>, i32*) nounwind readonly
498 declare void @llvm.aarch64.neon.st4.v2i32.p0i32(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i32*) nounwind readonly 575 declare void @llvm.aarch64.neon.st4.v2i32.p0i32(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i32*) nounwind readonly
499 576
500 define void @st2_4s(<4 x i32> %A, <4 x i32> %B, i32* %P) nounwind { 577 define void @st2_4s(<4 x i32> %A, <4 x i32> %B, i32* %P) nounwind {
501 ; CHECK-LABEL: st2_4s 578 ; CHECK-LABEL: st2_4s
502 ; CHECK: st2.4s 579 ; CHECK: st2.4s
580 ; EXYNOS-LABEL: st2_4s
581 ; EXYNOS: zip1.4s
582 ; EXYNOS: zip2.4s
583 ; EXYNOS: stp
503 call void @llvm.aarch64.neon.st2.v4i32.p0i32(<4 x i32> %A, <4 x i32> %B, i32* %P) 584 call void @llvm.aarch64.neon.st2.v4i32.p0i32(<4 x i32> %A, <4 x i32> %B, i32* %P)
504 ret void 585 ret void
505 } 586 }
506 587
507 define void @st3_4s(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, i32* %P) nounwind { 588 define void @st3_4s(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, i32* %P) nounwind {
512 } 593 }
513 594
514 define void @st4_4s(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i32* %P) nounwind { 595 define void @st4_4s(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i32* %P) nounwind {
515 ; CHECK-LABEL: st4_4s 596 ; CHECK-LABEL: st4_4s
516 ; CHECK: st4.4s 597 ; CHECK: st4.4s
598 ; EXYNOS-LABEL: st4_4s
599 ; EXYNOS: zip1.4s
600 ; EXYNOS: zip2.4s
601 ; EXYNOS: zip1.4s
602 ; EXYNOS: zip2.4s
603 ; EXYNOS: zip1.4s
604 ; EXYNOS: zip2.4s
605 ; EXYNOS: stp
606 ; EXYNOS: zip1.4s
607 ; EXYNOS: zip2.4s
608 ; EXYNOS: stp
517 call void @llvm.aarch64.neon.st4.v4i32.p0i32(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i32* %P) 609 call void @llvm.aarch64.neon.st4.v4i32.p0i32(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i32* %P)
518 ret void 610 ret void
519 } 611 }
520 612
521 declare void @llvm.aarch64.neon.st2.v4i32.p0i32(<4 x i32>, <4 x i32>, i32*) nounwind readonly 613 declare void @llvm.aarch64.neon.st2.v4i32.p0i32(<4 x i32>, <4 x i32>, i32*) nounwind readonly
549 declare void @llvm.aarch64.neon.st4.v1i64.p0i64(<1 x i64>, <1 x i64>, <1 x i64>, <1 x i64>, i64*) nounwind readonly 641 declare void @llvm.aarch64.neon.st4.v1i64.p0i64(<1 x i64>, <1 x i64>, <1 x i64>, <1 x i64>, i64*) nounwind readonly
550 642
551 define void @st2_2d(<2 x i64> %A, <2 x i64> %B, i64* %P) nounwind { 643 define void @st2_2d(<2 x i64> %A, <2 x i64> %B, i64* %P) nounwind {
552 ; CHECK-LABEL: st2_2d 644 ; CHECK-LABEL: st2_2d
553 ; CHECK: st2.2d 645 ; CHECK: st2.2d
646 ; EXYNOS-LABEL: st2_2d
647 ; EXYNOS: zip1.2d
648 ; EXYNOS: zip2.2d
649 ; EXYNOS: stp
554 call void @llvm.aarch64.neon.st2.v2i64.p0i64(<2 x i64> %A, <2 x i64> %B, i64* %P) 650 call void @llvm.aarch64.neon.st2.v2i64.p0i64(<2 x i64> %A, <2 x i64> %B, i64* %P)
555 ret void 651 ret void
556 } 652 }
557 653
558 define void @st3_2d(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, i64* %P) nounwind { 654 define void @st3_2d(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, i64* %P) nounwind {
563 } 659 }
564 660
565 define void @st4_2d(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64* %P) nounwind { 661 define void @st4_2d(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64* %P) nounwind {
566 ; CHECK-LABEL: st4_2d 662 ; CHECK-LABEL: st4_2d
567 ; CHECK: st4.2d 663 ; CHECK: st4.2d
664 ; EXYNOS-LABEL: st4_2d
665 ; EXYNOS: zip1.2d
666 ; EXYNOS: zip2.2d
667 ; EXYNOS: zip1.2d
668 ; EXYNOS: zip2.2d
669 ; EXYNOS: zip1.2d
670 ; EXYNOS: zip2.2d
671 ; EXYNOS: stp
672 ; EXYNOS: zip1.2d
673 ; EXYNOS: zip2.2d
674 ; EXYNOS: stp
568 call void @llvm.aarch64.neon.st4.v2i64.p0i64(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64* %P) 675 call void @llvm.aarch64.neon.st4.v2i64.p0i64(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64* %P)
569 ret void 676 ret void
570 } 677 }
571 678
572 declare void @llvm.aarch64.neon.st2.v2i64.p0i64(<2 x i64>, <2 x i64>, i64*) nounwind readonly 679 declare void @llvm.aarch64.neon.st2.v2i64.p0i64(<2 x i64>, <2 x i64>, i64*) nounwind readonly