Lines Matching refs:Rn
617 def : Pat<(sub GPR32sp:$Rn, addsub_shifted_imm32:$imm),
618 (SUBSWri GPR32sp:$Rn, addsub_shifted_imm32:$imm)>;
619 def : Pat<(sub GPR64sp:$Rn, addsub_shifted_imm64:$imm),
620 (SUBSXri GPR64sp:$Rn, addsub_shifted_imm64:$imm)>;
621 def : Pat<(sub GPR32:$Rn, GPR32:$Rm),
622 (SUBSWrr GPR32:$Rn, GPR32:$Rm)>;
623 def : Pat<(sub GPR64:$Rn, GPR64:$Rm),
624 (SUBSXrr GPR64:$Rn, GPR64:$Rm)>;
625 def : Pat<(sub GPR32:$Rn, arith_shifted_reg32:$Rm),
626 (SUBSWrs GPR32:$Rn, arith_shifted_reg32:$Rm)>;
627 def : Pat<(sub GPR64:$Rn, arith_shifted_reg64:$Rm),
628 (SUBSXrs GPR64:$Rn, arith_shifted_reg64:$Rm)>;
640 def : Pat<(add GPR32:$Rn, neg_addsub_shifted_imm32:$imm),
641 (SUBSWri GPR32:$Rn, neg_addsub_shifted_imm32:$imm)>;
642 def : Pat<(add GPR64:$Rn, neg_addsub_shifted_imm64:$imm),
643 (SUBSXri GPR64:$Rn, neg_addsub_shifted_imm64:$imm)>;
644 def : Pat<(sub GPR32:$Rn, neg_addsub_shifted_imm32:$imm),
645 (ADDWri GPR32:$Rn, neg_addsub_shifted_imm32:$imm)>;
646 def : Pat<(sub GPR64:$Rn, neg_addsub_shifted_imm64:$imm),
647 (ADDXri GPR64:$Rn, neg_addsub_shifted_imm64:$imm)>;
654 def : Pat<(AArch64add_flag GPR32:$Rn, neg_addsub_shifted_imm32:$imm),
655 (SUBSWri GPR32:$Rn, neg_addsub_shifted_imm32:$imm)>;
656 def : Pat<(AArch64add_flag GPR64:$Rn, neg_addsub_shifted_imm64:$imm),
657 (SUBSXri GPR64:$Rn, neg_addsub_shifted_imm64:$imm)>;
658 def : Pat<(AArch64sub_flag GPR32:$Rn, neg_addsub_shifted_imm32:$imm),
659 (ADDSWri GPR32:$Rn, neg_addsub_shifted_imm32:$imm)>;
660 def : Pat<(AArch64sub_flag GPR64:$Rn, neg_addsub_shifted_imm64:$imm),
661 (ADDSXri GPR64:$Rn, neg_addsub_shifted_imm64:$imm)>;
707 def : Pat<(i32 (mul GPR32:$Rn, GPR32:$Rm)),
708 (MADDWrrr GPR32:$Rn, GPR32:$Rm, WZR)>;
709 def : Pat<(i64 (mul GPR64:$Rn, GPR64:$Rm)),
710 (MADDXrrr GPR64:$Rn, GPR64:$Rm, XZR)>;
712 def : Pat<(i32 (ineg (mul GPR32:$Rn, GPR32:$Rm))),
713 (MSUBWrrr GPR32:$Rn, GPR32:$Rm, WZR)>;
714 def : Pat<(i64 (ineg (mul GPR64:$Rn, GPR64:$Rm))),
715 (MSUBXrrr GPR64:$Rn, GPR64:$Rm, XZR)>;
716 def : Pat<(i32 (mul (ineg GPR32:$Rn), GPR32:$Rm)),
717 (MSUBWrrr GPR32:$Rn, GPR32:$Rm, WZR)>;
718 def : Pat<(i64 (mul (ineg GPR64:$Rn), GPR64:$Rm)),
719 (MSUBXrrr GPR64:$Rn, GPR64:$Rm, XZR)>;
728 def : Pat<(i64 (mul (sext GPR32:$Rn), (sext GPR32:$Rm))),
729 (SMADDLrrr GPR32:$Rn, GPR32:$Rm, XZR)>;
730 def : Pat<(i64 (mul (zext GPR32:$Rn), (zext GPR32:$Rm))),
731 (UMADDLrrr GPR32:$Rn, GPR32:$Rm, XZR)>;
733 def : Pat<(i64 (ineg (mul (sext GPR32:$Rn), (sext GPR32:$Rm)))),
734 (SMSUBLrrr GPR32:$Rn, GPR32:$Rm, XZR)>;
735 def : Pat<(i64 (ineg (mul (zext GPR32:$Rn), (zext GPR32:$Rm)))),
736 (UMSUBLrrr GPR32:$Rn, GPR32:$Rm, XZR)>;
904 def : Pat<(int_aarch64_rbit GPR32:$Rn), (RBITWr $Rn)>;
905 def : Pat<(int_aarch64_rbit GPR64:$Rn), (RBITXr $Rn)>;
911 def : Pat<(cttz GPR32:$Rn),
912 (CLZWr (RBITWr GPR32:$Rn))>;
913 def : Pat<(cttz GPR64:$Rn),
914 (CLZXr (RBITXr GPR64:$Rn))>;
915 def : Pat<(ctlz (or (shl (xor (sra GPR32:$Rn, (i64 31)), GPR32:$Rn), (i64 1)),
917 (CLSWr GPR32:$Rn)>;
918 def : Pat<(ctlz (or (shl (xor (sra GPR64:$Rn, (i64 63)), GPR64:$Rn), (i64 1)),
920 (CLSXr GPR64:$Rn)>;
930 def : InstAlias<"rev64 $Rd, $Rn", (REVXr GPR64:$Rd, GPR64:$Rn), 0>;
934 def : Pat<(bswap (rotr GPR32:$Rn, (i64 16))), (REV16Wr GPR32:$Rn)>;
935 def : Pat<(bswap (rotr GPR64:$Rn, (i64 32))), (REV32Xr GPR64:$Rn)>;
947 def : Pat<(rotr GPR32:$Rn, (i64 imm0_31:$imm)),
948 (EXTRWrri GPR32:$Rn, GPR32:$Rn, imm0_31:$imm)>;
949 def : Pat<(rotr GPR64:$Rn, (i64 imm0_63:$imm)),
950 (EXTRXrri GPR64:$Rn, GPR64:$Rn, imm0_63:$imm)>;
1016 def : Pat<(shl GPR32:$Rn, (i64 imm0_31:$imm)),
1017 (UBFMWri GPR32:$Rn, (i64 (i32shift_a imm0_31:$imm)),
1019 def : Pat<(shl GPR64:$Rn, (i64 imm0_63:$imm)),
1020 (UBFMXri GPR64:$Rn, (i64 (i64shift_a imm0_63:$imm)),
1024 def : Pat<(sra GPR32:$Rn, (i64 imm0_31:$imm)),
1025 (SBFMWri GPR32:$Rn, imm0_31:$imm, 31)>;
1026 def : Pat<(sra GPR64:$Rn, (i64 imm0_63:$imm)),
1027 (SBFMXri GPR64:$Rn, imm0_63:$imm, 63)>;
1040 def : Pat<(srl GPR32:$Rn, (i64 imm0_31:$imm)),
1041 (UBFMWri GPR32:$Rn, imm0_31:$imm, 31)>;
1042 def : Pat<(srl GPR64:$Rn, (i64 imm0_63:$imm)),
1043 (UBFMXri GPR64:$Rn, imm0_63:$imm, 63)>;
1151 def BLR : BranchReg<0b0001, "blr", [(AArch64call GPR64:$Rn)]>;
1155 def BR : BranchReg<0b0000, "br", [(brind GPR64:$Rn)]>;
1310 (loadop (ro.Wpat GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$offset))))),
1312 (LOADW GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$offset),
1316 (loadop (ro.Xpat GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$offset))))),
1318 (LOADX GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$offset),
1344 (load (ro_Windexed64 GPR64sp:$Rn, GPR32:$Rm,
1346 (LDRDroW GPR64sp:$Rn, GPR32:$Rm, ro_Wextend64:$extend)>;
1349 (load (ro_Xindexed64 GPR64sp:$Rn, GPR64:$Rm,
1351 (LDRDroX GPR64sp:$Rn, GPR64:$Rm, ro_Xextend64:$extend)>;
1358 def : Pat<(VecTy (load (ro.Wpat GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$extend))),
1359 (LOADW GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$extend)>;
1361 def : Pat<(VecTy (load (ro.Xpat GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$extend))),
1362 (LOADX GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$extend)>;
1394 def : Pat<(i64 (loadop (ro.Wpat GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$extend))),
1396 (INSTW GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$extend),
1399 def : Pat<(i64 (loadop (ro.Xpat GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$extend))),
1401 (INSTX GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$extend),
1426 def : Pat<(i32 (loadop (ro.Wpat GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$extend))),
1427 (INSTW GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$extend)>;
1429 def : Pat<(i32 (loadop (ro.Xpat GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$extend))),
1430 (INSTX GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$extend)>;
1449 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset)))]>;
1452 (load (am_indexed32 GPR64sp:$Rn, uimm12s4:$offset)))]>;
1455 (load (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset)))]>;
1458 (load (am_indexed16 GPR64sp:$Rn, uimm12s2:$offset)))]>;
1461 (load (am_indexed32 GPR64sp:$Rn, uimm12s4:$offset)))]>;
1464 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset)))]>;
1467 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset)))]>;
1474 (extloadi8 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))))),
1476 (LDRBui GPR64sp:$Rn, uimm12s1:$offset), bsub)>;
1478 (extloadi8 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))))),
1480 (LDRBui GPR64sp:$Rn, uimm12s1:$offset), bsub)>;
1482 (extloadi16 (am_indexed16 GPR64sp:$Rn, uimm12s2:$offset))))),
1484 (LDRHui GPR64sp:$Rn, uimm12s2:$offset), hsub)>;
1486 (extloadi16 (am_indexed16 GPR64sp:$Rn, uimm12s2:$offset))))),
1488 (LDRHui GPR64sp:$Rn, uimm12s2:$offset), hsub)>;
1490 (load (am_indexed32 GPR64sp:$Rn, uimm12s4:$offset))))),
1492 (LDRSui GPR64sp:$Rn, uimm12s4:$offset), ssub)>;
1494 (load (am_indexed32 GPR64sp:$Rn, uimm12s4:$offset))))),
1496 (LDRSui GPR64sp:$Rn, uimm12s4:$offset), ssub)>;
1498 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))))),
1499 (LDRDui GPR64sp:$Rn, uimm12s8:$offset)>;
1501 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))))),
1503 (LDRDui GPR64sp:$Rn, uimm12s8:$offset), dsub)>;
1508 def : Pat<(v2f32 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))),
1509 (LDRDui GPR64sp:$Rn, uimm12s8:$offset)>;
1510 def : Pat<(v8i8 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))),
1511 (LDRDui GPR64sp:$Rn, uimm12s8:$offset)>;
1512 def : Pat<(v4i16 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))),
1513 (LDRDui GPR64sp:$Rn, uimm12s8:$offset)>;
1514 def : Pat<(v2i32 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))),
1515 (LDRDui GPR64sp:$Rn, uimm12s8:$offset)>;
1516 def : Pat<(v4f16 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))),
1517 (LDRDui GPR64sp:$Rn, uimm12s8:$offset)>;
1519 def : Pat<(v1f64 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))),
1520 (LDRDui GPR64sp:$Rn, uimm12s8:$offset)>;
1521 def : Pat<(v1i64 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))),
1522 (LDRDui GPR64sp:$Rn, uimm12s8:$offset)>;
1527 def : Pat<(v4f32 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset))),
1528 (LDRQui GPR64sp:$Rn, uimm12s16:$offset)>;
1529 def : Pat<(v2f64 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset))),
1530 (LDRQui GPR64sp:$Rn, uimm12s16:$offset)>;
1531 def : Pat<(v16i8 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset))),
1532 (LDRQui GPR64sp:$Rn, uimm12s16:$offset)>;
1533 def : Pat<(v8i16 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset))),
1534 (LDRQui GPR64sp:$Rn, uimm12s16:$offset)>;
1535 def : Pat<(v4i32 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset))),
1536 (LDRQui GPR64sp:$Rn, uimm12s16:$offset)>;
1537 def : Pat<(v2i64 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset))),
1538 (LDRQui GPR64sp:$Rn, uimm12s16:$offset)>;
1539 def : Pat<(v8f16 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset))),
1540 (LDRQui GPR64sp:$Rn, uimm12s16:$offset)>;
1542 def : Pat<(f128 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset))),
1543 (LDRQui GPR64sp:$Rn, uimm12s16:$offset)>;
1547 (zextloadi16 (am_indexed16 GPR64sp:$Rn,
1551 (zextloadi8 (am_indexed8 GPR64sp:$Rn,
1554 def : Pat<(i64 (zextloadi8 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))),
1555 (SUBREG_TO_REG (i64 0), (LDRBBui GPR64sp:$Rn, uimm12s1:$offset), sub_32)>;
1556 def : Pat<(i64 (zextloadi16 (am_indexed16 GPR64sp:$Rn, uimm12s2:$offset))),
1557 (SUBREG_TO_REG (i64 0), (LDRHHui GPR64sp:$Rn, uimm12s2:$offset), sub_32)>;
1560 def : Pat<(i32 (zextloadi1 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))),
1561 (LDRBBui GPR64sp:$Rn, uimm12s1:$offset)>;
1562 def : Pat<(i64 (zextloadi1 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))),
1563 (SUBREG_TO_REG (i64 0), (LDRBBui GPR64sp:$Rn, uimm12s1:$offset), sub_32)>;
1566 def : Pat<(i32 (extloadi16 (am_indexed16 GPR64sp:$Rn, uimm12s2:$offset))),
1567 (LDRHHui GPR64sp:$Rn, uimm12s2:$offset)>;
1568 def : Pat<(i32 (extloadi8 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))),
1569 (LDRBBui GPR64sp:$Rn, uimm12s1:$offset)>;
1570 def : Pat<(i32 (extloadi1 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))),
1571 (LDRBBui GPR64sp:$Rn, uimm12s1:$offset)>;
1572 def : Pat<(i64 (extloadi32 (am_indexed32 GPR64sp:$Rn, uimm12s4:$offset))),
1573 (SUBREG_TO_REG (i64 0), (LDRWui GPR64sp:$Rn, uimm12s4:$offset), sub_32)>;
1574 def : Pat<(i64 (extloadi16 (am_indexed16 GPR64sp:$Rn, uimm12s2:$offset))),
1575 (SUBREG_TO_REG (i64 0), (LDRHHui GPR64sp:$Rn, uimm12s2:$offset), sub_32)>;
1576 def : Pat<(i64 (extloadi8 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))),
1577 (SUBREG_TO_REG (i64 0), (LDRBBui GPR64sp:$Rn, uimm12s1:$offset), sub_32)>;
1578 def : Pat<(i64 (extloadi1 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))),
1579 (SUBREG_TO_REG (i64 0), (LDRBBui GPR64sp:$Rn, uimm12s1:$offset), sub_32)>;
1584 (sextloadi16 (am_indexed16 GPR64sp:$Rn,
1588 (sextloadi16 (am_indexed16 GPR64sp:$Rn,
1594 (sextloadi8 (am_indexed8 GPR64sp:$Rn,
1598 (sextloadi8 (am_indexed8 GPR64sp:$Rn,
1604 (sextloadi32 (am_indexed32 GPR64sp:$Rn,
1608 def : Pat<(i64 (zextloadi32 (am_indexed32 GPR64sp:$Rn, uimm12s4:$offset))),
1609 (SUBREG_TO_REG (i64 0), (LDRWui GPR64sp:$Rn, uimm12s4:$offset), sub_32)>;
1614 (am_indexed64 GPR64sp:$Rn,
1617 def : InstAlias<"prfm $Rt, [$Rn]", (PRFMui prfop:$Rt, GPR64sp:$Rn, 0)>;
1638 (load (am_unscaled64 GPR64sp:$Rn, simm9:$offset)))]>;
1641 (load (am_unscaled32 GPR64sp:$Rn, simm9:$offset)))]>;
1644 (load (am_unscaled8 GPR64sp:$Rn, simm9:$offset)))]>;
1647 (load (am_unscaled16 GPR64sp:$Rn, simm9:$offset)))]>;
1650 (load (am_unscaled32 GPR64sp:$Rn, simm9:$offset)))]>;
1653 (load (am_unscaled64 GPR64sp:$Rn, simm9:$offset)))]>;
1656 (load (am_unscaled128 GPR64sp:$Rn, simm9:$offset)))]>;
1661 (zextloadi16 (am_unscaled16 GPR64sp:$Rn, simm9:$offset)))]>;
1665 (zextloadi8 (am_unscaled16 GPR64sp:$Rn, simm9:$offset)))]>;
1669 def : Pat<(v2f32 (load (am_unscaled64 GPR64sp:$Rn, simm9:$offset))),
1670 (LDURDi GPR64sp:$Rn, simm9:$offset)>;
1671 def : Pat<(v2i32 (load (am_unscaled64 GPR64sp:$Rn, simm9:$offset))),
1672 (LDURDi GPR64sp:$Rn, simm9:$offset)>;
1673 def : Pat<(v4i16 (load (am_unscaled64 GPR64sp:$Rn, simm9:$offset))),
1674 (LDURDi GPR64sp:$Rn, simm9:$offset)>;
1675 def : Pat<(v8i8 (load (am_unscaled64 GPR64sp:$Rn, simm9:$offset))),
1676 (LDURDi GPR64sp:$Rn, simm9:$offset)>;
1677 def : Pat<(v4f16 (load (am_unscaled64 GPR64sp:$Rn, simm9:$offset))),
1678 (LDURDi GPR64sp:$Rn, simm9:$offset)>;
1680 def : Pat<(v1f64 (load (am_unscaled64 GPR64sp:$Rn, simm9:$offset))),
1681 (LDURDi GPR64sp:$Rn, simm9:$offset)>;
1682 def : Pat<(v1i64 (load (am_unscaled64 GPR64sp:$Rn, simm9:$offset))),
1683 (LDURDi GPR64sp:$Rn, simm9:$offset)>;
1687 def : Pat<(v2f64 (load (am_unscaled128 GPR64sp:$Rn, simm9:$offset))),
1688 (LDURQi GPR64sp:$Rn, simm9:$offset)>;
1689 def : Pat<(v2i64 (load (am_unscaled128 GPR64sp:$Rn, simm9:$offset))),
1690 (LDURQi GPR64sp:$Rn, simm9:$offset)>;
1691 def : Pat<(v4f32 (load (am_unscaled128 GPR64sp:$Rn, simm9:$offset))),
1692 (LDURQi GPR64sp:$Rn, simm9:$offset)>;
1693 def : Pat<(v4i32 (load (am_unscaled128 GPR64sp:$Rn, simm9:$offset))),
1694 (LDURQi GPR64sp:$Rn, simm9:$offset)>;
1695 def : Pat<(v8i16 (load (am_unscaled128 GPR64sp:$Rn, simm9:$offset))),
1696 (LDURQi GPR64sp:$Rn, simm9:$offset)>;
1697 def : Pat<(v16i8 (load (am_unscaled128 GPR64sp:$Rn, simm9:$offset))),
1698 (LDURQi GPR64sp:$Rn, simm9:$offset)>;
1699 def : Pat<(v8f16 (load (am_unscaled128 GPR64sp:$Rn, simm9:$offset))),
1700 (LDURQi GPR64sp:$Rn, simm9:$offset)>;
1704 def : Pat<(i32 (extloadi16 (am_unscaled16 GPR64sp:$Rn, simm9:$offset))),
1705 (LDURHHi GPR64sp:$Rn, simm9:$offset)>;
1706 def : Pat<(i32 (extloadi8 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1707 (LDURBBi GPR64sp:$Rn, simm9:$offset)>;
1708 def : Pat<(i32 (extloadi1 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1709 (LDURBBi GPR64sp:$Rn, simm9:$offset)>;
1710 def : Pat<(i64 (extloadi32 (am_unscaled32 GPR64sp:$Rn, simm9:$offset))),
1711 (SUBREG_TO_REG (i64 0), (LDURWi GPR64sp:$Rn, simm9:$offset), sub_32)>;
1712 def : Pat<(i64 (extloadi16 (am_unscaled16 GPR64sp:$Rn, simm9:$offset))),
1713 (SUBREG_TO_REG (i64 0), (LDURHHi GPR64sp:$Rn, simm9:$offset), sub_32)>;
1714 def : Pat<(i64 (extloadi8 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1715 (SUBREG_TO_REG (i64 0), (LDURBBi GPR64sp:$Rn, simm9:$offset), sub_32)>;
1716 def : Pat<(i64 (extloadi1 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1717 (SUBREG_TO_REG (i64 0), (LDURBBi GPR64sp:$Rn, simm9:$offset), sub_32)>;
1719 def : Pat<(i32 (zextloadi16 (am_unscaled16 GPR64sp:$Rn, simm9:$offset))),
1720 (LDURHHi GPR64sp:$Rn, simm9:$offset)>;
1721 def : Pat<(i32 (zextloadi8 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1722 (LDURBBi GPR64sp:$Rn, simm9:$offset)>;
1723 def : Pat<(i32 (zextloadi1 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1724 (LDURBBi GPR64sp:$Rn, simm9:$offset)>;
1725 def : Pat<(i64 (zextloadi32 (am_unscaled32 GPR64sp:$Rn, simm9:$offset))),
1726 (SUBREG_TO_REG (i64 0), (LDURWi GPR64sp:$Rn, simm9:$offset), sub_32)>;
1727 def : Pat<(i64 (zextloadi16 (am_unscaled16 GPR64sp:$Rn, simm9:$offset))),
1728 (SUBREG_TO_REG (i64 0), (LDURHHi GPR64sp:$Rn, simm9:$offset), sub_32)>;
1729 def : Pat<(i64 (zextloadi8 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1730 (SUBREG_TO_REG (i64 0), (LDURBBi GPR64sp:$Rn, simm9:$offset), sub_32)>;
1731 def : Pat<(i64 (zextloadi1 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1732 (SUBREG_TO_REG (i64 0), (LDURBBi GPR64sp:$Rn, simm9:$offset), sub_32)>;
1770 def : InstAlias<"ldr $Rt, [$Rn, $offset]",
1771 (LDURXi GPR64:$Rt, GPR64sp:$Rn, simm9_offset_fb64:$offset), 0>;
1772 def : InstAlias<"ldr $Rt, [$Rn, $offset]",
1773 (LDURWi GPR32:$Rt, GPR64sp:$Rn, simm9_offset_fb32:$offset), 0>;
1774 def : InstAlias<"ldr $Rt, [$Rn, $offset]",
1775 (LDURBi FPR8:$Rt, GPR64sp:$Rn, simm9_offset_fb8:$offset), 0>;
1776 def : InstAlias<"ldr $Rt, [$Rn, $offset]",
1777 (LDURHi FPR16:$Rt, GPR64sp:$Rn, simm9_offset_fb16:$offset), 0>;
1778 def : InstAlias<"ldr $Rt, [$Rn, $offset]",
1779 (LDURSi FPR32:$Rt, GPR64sp:$Rn, simm9_offset_fb32:$offset), 0>;
1780 def : InstAlias<"ldr $Rt, [$Rn, $offset]",
1781 (LDURDi FPR64:$Rt, GPR64sp:$Rn, simm9_offset_fb64:$offset), 0>;
1782 def : InstAlias<"ldr $Rt, [$Rn, $offset]",
1783 (LDURQi FPR128:$Rt, GPR64sp:$Rn, simm9_offset_fb128:$offset), 0>;
1786 def : Pat<(i64 (zextloadi8 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1787 (SUBREG_TO_REG (i64 0), (LDURBBi GPR64sp:$Rn, simm9:$offset), sub_32)>;
1788 def : Pat<(i64 (zextloadi16 (am_unscaled16 GPR64sp:$Rn, simm9:$offset))),
1789 (SUBREG_TO_REG (i64 0), (LDURHHi GPR64sp:$Rn, simm9:$offset), sub_32)>;
1795 (sextloadi16 (am_unscaled16 GPR64sp:$Rn, simm9:$offset)))]>;
1799 (sextloadi16 (am_unscaled16 GPR64sp:$Rn, simm9:$offset)))]>;
1805 (sextloadi8 (am_unscaled8 GPR64sp:$Rn, simm9:$offset)))]>;
1809 (sextloadi8 (am_unscaled8 GPR64sp:$Rn, simm9:$offset)))]>;
1815 (sextloadi32 (am_unscaled32 GPR64sp:$Rn, simm9:$offset)))]>;
1818 def : InstAlias<"ldrb $Rt, [$Rn, $offset]",
1819 (LDURBBi GPR32:$Rt, GPR64sp:$Rn, simm9_offset_fb8:$offset), 0>;
1820 def : InstAlias<"ldrh $Rt, [$Rn, $offset]",
1821 (LDURHHi GPR32:$Rt, GPR64sp:$Rn, simm9_offset_fb16:$offset), 0>;
1822 def : InstAlias<"ldrsb $Rt, [$Rn, $offset]",
1823 (LDURSBWi GPR32:$Rt, GPR64sp:$Rn, simm9_offset_fb8:$offset), 0>;
1824 def : InstAlias<"ldrsb $Rt, [$Rn, $offset]",
1825 (LDURSBXi GPR64:$Rt, GPR64sp:$Rn, simm9_offset_fb8:$offset), 0>;
1826 def : InstAlias<"ldrsh $Rt, [$Rn, $offset]",
1827 (LDURSHWi GPR32:$Rt, GPR64sp:$Rn, simm9_offset_fb16:$offset), 0>;
1828 def : InstAlias<"ldrsh $Rt, [$Rn, $offset]",
1829 (LDURSHXi GPR64:$Rt, GPR64sp:$Rn, simm9_offset_fb16:$offset), 0>;
1830 def : InstAlias<"ldrsw $Rt, [$Rn, $offset]",
1831 (LDURSWi GPR64:$Rt, GPR64sp:$Rn, simm9_offset_fb32:$offset), 0>;
1836 (am_unscaled64 GPR64sp:$Rn, simm9:$offset))]>;
1961 (ro.Wpat GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$extend)),
1963 GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$extend)>;
1966 (ro.Xpat GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$extend)),
1968 GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$extend)>;
1981 (ro.Wpat GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$extend)),
1982 (STRW FPR:$Rt, GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$extend)>;
1985 (ro.Xpat GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$extend)),
1986 (STRX FPR:$Rt, GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$extend)>;
2023 (ro.Wpat GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$extend)),
2025 GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$extend)>;
2028 (ro.Xpat GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$extend)),
2030 GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$extend)>;
2047 (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))]>;
2050 (am_indexed32 GPR64sp:$Rn, uimm12s4:$offset))]>;
2053 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))]>;
2056 (am_indexed16 GPR64sp:$Rn, uimm12s2:$offset))]>;
2059 (am_indexed32 GPR64sp:$Rn, uimm12s4:$offset))]>;
2062 (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))]>;
2067 (am_indexed16 GPR64sp:$Rn,
2071 (am_indexed8 GPR64sp:$Rn,
2079 (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset)),
2080 (STRDui FPR64:$Rt, GPR64sp:$Rn, uimm12s8:$offset)>;
2082 (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset)),
2083 (STRDui FPR64:$Rt, GPR64sp:$Rn, uimm12s8:$offset)>;
2085 (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset)),
2086 (STRDui FPR64:$Rt, GPR64sp:$Rn, uimm12s8:$offset)>;
2088 (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset)),
2089 (STRDui FPR64:$Rt, GPR64sp:$Rn, uimm12s8:$offset)>;
2091 (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset)),
2092 (STRDui FPR64:$Rt, GPR64sp:$Rn, uimm12s8:$offset)>;
2095 (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset)),
2096 (STRDui FPR64:$Rt, GPR64sp:$Rn, uimm12s8:$offset)>;
2098 (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset)),
2099 (STRDui FPR64:$Rt, GPR64sp:$Rn, uimm12s8:$offset)>;
2105 (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset)),
2106 (STRQui FPR128:$Rt, GPR64sp:$Rn, uimm12s16:$offset)>;
2108 (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset)),
2109 (STRQui FPR128:$Rt, GPR64sp:$Rn, uimm12s16:$offset)>;
2111 (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset)),
2112 (STRQui FPR128:$Rt, GPR64sp:$Rn, uimm12s16:$offset)>;
2114 (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset)),
2115 (STRQui FPR128:$Rt, GPR64sp:$Rn, uimm12s16:$offset)>;
2117 (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset)),
2118 (STRQui FPR128:$Rt, GPR64sp:$Rn, uimm12s16:$offset)>;
2120 (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset)),
2121 (STRQui FPR128:$Rt, GPR64sp:$Rn, uimm12s16:$offset)>;
2123 (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset)),
2124 (STRQui FPR128:$Rt, GPR64sp:$Rn, uimm12s16:$offset)>;
2127 (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset)),
2128 (STRQui FPR128:$Rt, GPR64sp:$Rn, uimm12s16:$offset)>;
2132 (am_indexed32 GPR64sp:$Rn, uimm12s4:$offset)),
2133 (STRWui (EXTRACT_SUBREG GPR64:$Rt, sub_32), GPR64sp:$Rn, uimm12s4:$offset)>;
2135 (am_indexed16 GPR64sp:$Rn, uimm12s2:$offset)),
2136 (STRHHui (EXTRACT_SUBREG GPR64:$Rt, sub_32), GPR64sp:$Rn, uimm12s2:$offset)>;
2137 def : Pat<(truncstorei8 GPR64:$Rt, (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset)),
2138 (STRBBui (EXTRACT_SUBREG GPR64:$Rt, sub_32), GPR64sp:$Rn, uimm12s1:$offset)>;
2146 (am_unscaled64 GPR64sp:$Rn, simm9:$offset))]>;
2149 (am_unscaled32 GPR64sp:$Rn, simm9:$offset))]>;
2152 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))]>;
2155 (am_unscaled16 GPR64sp:$Rn, simm9:$offset))]>;
2158 (am_unscaled32 GPR64sp:$Rn, simm9:$offset))]>;
2161 (am_unscaled64 GPR64sp:$Rn, simm9:$offset))]>;
2164 (am_unscaled128 GPR64sp:$Rn, simm9:$offset))]>;
2167 (am_unscaled16 GPR64sp:$Rn, simm9:$offset))]>;
2170 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))]>;
2176 (am_unscaled64 GPR64sp:$Rn, simm9:$offset)),
2177 (STURDi FPR64:$Rt, GPR64sp:$Rn, simm9:$offset)>;
2179 (am_unscaled64 GPR64sp:$Rn, simm9:$offset)),
2180 (STURDi FPR64:$Rt, GPR64sp:$Rn, simm9:$offset)>;
2182 (am_unscaled64 GPR64sp:$Rn, simm9:$offset)),
2183 (STURDi FPR64:$Rt, GPR64sp:$Rn, simm9:$offset)>;
2185 (am_unscaled64 GPR64sp:$Rn, simm9:$offset)),
2186 (STURDi FPR64:$Rt, GPR64sp:$Rn, simm9:$offset)>;
2188 (am_unscaled64 GPR64sp:$Rn, simm9:$offset)),
2189 (STURDi FPR64:$Rt, GPR64sp:$Rn, simm9:$offset)>;
2191 def : Pat<(store (v1f64 FPR64:$Rt), (am_unscaled64 GPR64sp:$Rn, simm9:$offset)),
2192 (STURDi FPR64:$Rt, GPR64sp:$Rn, simm9:$offset)>;
2193 def : Pat<(store (v1i64 FPR64:$Rt), (am_unscaled64 GPR64sp:$Rn, simm9:$offset)),
2194 (STURDi FPR64:$Rt, GPR64sp:$Rn, simm9:$offset)>;
2200 (am_unscaled128 GPR64sp:$Rn, simm9:$offset)),
2201 (STURQi FPR128:$Rt, GPR64sp:$Rn, simm9:$offset)>;
2203 (am_unscaled128 GPR64sp:$Rn, simm9:$offset)),
2204 (STURQi FPR128:$Rt, GPR64sp:$Rn, simm9:$offset)>;
2206 (am_unscaled128 GPR64sp:$Rn, simm9:$offset)),
2207 (STURQi FPR128:$Rt, GPR64sp:$Rn, simm9:$offset)>;
2209 (am_unscaled128 GPR64sp:$Rn, simm9:$offset)),
2210 (STURQi FPR128:$Rt, GPR64sp:$Rn, simm9:$offset)>;
2212 (am_unscaled128 GPR64sp:$Rn, simm9:$offset)),
2213 (STURQi FPR128:$Rt, GPR64sp:$Rn, simm9:$offset)>;
2215 (am_unscaled128 GPR64sp:$Rn, simm9:$offset)),
2216 (STURQi FPR128:$Rt, GPR64sp:$Rn, simm9:$offset)>;
2218 (am_unscaled128 GPR64sp:$Rn, simm9:$offset)),
2219 (STURQi FPR128:$Rt, GPR64sp:$Rn, simm9:$offset)>;
2221 (am_unscaled128 GPR64sp:$Rn, simm9:$offset)),
2222 (STURQi FPR128:$Rt, GPR64sp:$Rn, simm9:$offset)>;
2226 def : Pat<(truncstorei32 GPR64:$Rt, (am_unscaled32 GPR64sp:$Rn, simm9:$offset)),
2227 (STURWi (EXTRACT_SUBREG GPR64:$Rt, sub_32), GPR64sp:$Rn, simm9:$offset)>;
2228 def : Pat<(truncstorei16 GPR64:$Rt, (am_unscaled16 GPR64sp:$Rn, simm9:$offset)),
2229 (STURHHi (EXTRACT_SUBREG GPR64:$Rt, sub_32), GPR64sp:$Rn, simm9:$offset)>;
2230 def : Pat<(truncstorei8 GPR64:$Rt, (am_unscaled8 GPR64sp:$Rn, simm9:$offset)),
2231 (STURBBi (EXTRACT_SUBREG GPR64:$Rt, sub_32), GPR64sp:$Rn, simm9:$offset)>;
2235 def : InstAlias<"str $Rt, [$Rn, $offset]",
2236 (STURXi GPR64:$Rt, GPR64sp:$Rn, simm9_offset_fb64:$offset), 0>;
2237 def : InstAlias<"str $Rt, [$Rn, $offset]",
2238 (STURWi GPR32:$Rt, GPR64sp:$Rn, simm9_offset_fb32:$offset), 0>;
2239 def : InstAlias<"str $Rt, [$Rn, $offset]",
2240 (STURBi FPR8:$Rt, GPR64sp:$Rn, simm9_offset_fb8:$offset), 0>;
2241 def : InstAlias<"str $Rt, [$Rn, $offset]",
2242 (STURHi FPR16:$Rt, GPR64sp:$Rn, simm9_offset_fb16:$offset), 0>;
2243 def : InstAlias<"str $Rt, [$Rn, $offset]",
2244 (STURSi FPR32:$Rt, GPR64sp:$Rn, simm9_offset_fb32:$offset), 0>;
2245 def : InstAlias<"str $Rt, [$Rn, $offset]",
2246 (STURDi FPR64:$Rt, GPR64sp:$Rn, simm9_offset_fb64:$offset), 0>;
2247 def : InstAlias<"str $Rt, [$Rn, $offset]",
2248 (STURQi FPR128:$Rt, GPR64sp:$Rn, simm9_offset_fb128:$offset), 0>;
2250 def : InstAlias<"strb $Rt, [$Rn, $offset]",
2251 (STURBBi GPR32:$Rt, GPR64sp:$Rn, simm9_offset_fb8:$offset), 0>;
2252 def : InstAlias<"strh $Rt, [$Rn, $offset]",
2253 (STURHHi GPR32:$Rt, GPR64sp:$Rn, simm9_offset_fb16:$offset), 0>;
2455 def : Pat<(i32 (to_int (round f32:$Rn))),
2456 (!cast<Instruction>(INST # UWSr) f32:$Rn)>;
2457 def : Pat<(i64 (to_int (round f32:$Rn))),
2458 (!cast<Instruction>(INST # UXSr) f32:$Rn)>;
2459 def : Pat<(i32 (to_int (round f64:$Rn))),
2460 (!cast<Instruction>(INST # UWDr) f64:$Rn)>;
2461 def : Pat<(i64 (to_int (round f64:$Rn))),
2462 (!cast<Instruction>(INST # UXDr) f64:$Rn)>;
2516 def : Pat<(v1f64 (int_aarch64_neon_frintn (v1f64 FPR64:$Rn))),
2517 (FRINTNDr FPR64:$Rn)>;
2544 def : Pat<(v1f64 (fmaxnan (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
2545 (FMAXDrr FPR64:$Rn, FPR64:$Rm)>;
2546 def : Pat<(v1f64 (fminnan (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
2547 (FMINDrr FPR64:$Rn, FPR64:$Rm)>;
2548 def : Pat<(v1f64 (fmaxnum (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
2549 (FMAXNMDrr FPR64:$Rn, FPR64:$Rm)>;
2550 def : Pat<(v1f64 (fminnum (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
2551 (FMINNMDrr FPR64:$Rn, FPR64:$Rm)>;
2570 def : Pat<(f32 (fma (fneg FPR32:$Rn), FPR32:$Rm, FPR32:$Ra)),
2571 (FMSUBSrrr FPR32:$Rn, FPR32:$Rm, FPR32:$Ra)>;
2573 def : Pat<(f64 (fma (fneg FPR64:$Rn), FPR64:$Rm, FPR64:$Ra)),
2574 (FMSUBDrrr FPR64:$Rn, FPR64:$Rm, FPR64:$Ra)>;
2578 def : Pat<(f32 (fma (fneg FPR32:$Rn), FPR32:$Rm, (fneg FPR32:$Ra))),
2579 (FNMADDSrrr FPR32:$Rn, FPR32:$Rm, FPR32:$Ra)>;
2581 def : Pat<(f64 (fma (fneg FPR64:$Rn), FPR64:$Rm, (fneg FPR64:$Ra))),
2582 (FNMADDDrrr FPR64:$Rn, FPR64:$Rm, FPR64:$Ra)>;
2584 def : Pat<(f32 (fma FPR32:$Rn, (fneg FPR32:$Rm), (fneg FPR32:$Ra))),
2585 (FNMADDSrrr FPR32:$Rn, FPR32:$Rm, FPR32:$Ra)>;
2587 def : Pat<(f64 (fma FPR64:$Rn, (fneg FPR64:$Rm), (fneg FPR64:$Ra))),
2588 (FNMADDDrrr FPR64:$Rn, FPR64:$Rm, FPR64:$Ra)>;
2614 (ins FPR128:$Rn, FPR128:$Rm, ccode:$cond),
2616 (AArch64csel FPR128:$Rn, FPR128:$Rm,
2710 def : Pat<(v4f32 (int_aarch64_neon_vcvthf2fp (v4i16 V64:$Rn))),
2711 (FCVTLv4i16 V64:$Rn)>;
2712 def : Pat<(v4f32 (int_aarch64_neon_vcvthf2fp (extract_subvector (v8i16 V128:$Rn),
2714 (FCVTLv8i16 V128:$Rn)>;
2715 def : Pat<(v2f64 (fextend (v2f32 V64:$Rn))), (FCVTLv2i32 V64:$Rn)>;
2716 def : Pat<(v2f64 (fextend (v2f32 (extract_subvector (v4f32 V128:$Rn),
2718 (FCVTLv4i32 V128:$Rn)>;
2720 def : Pat<(v4f32 (fextend (v4f16 V64:$Rn))), (FCVTLv4i16 V64:$Rn)>;
2721 def : Pat<(v4f32 (fextend (v4f16 (extract_subvector (v8f16 V128:$Rn),
2723 (FCVTLv8i16 V128:$Rn)>;
2730 def : Pat<(v4i16 (int_aarch64_neon_vcvtfp2hf (v4f32 V128:$Rn))),
2731 (FCVTNv4i16 V128:$Rn)>;
2733 (v4i16 (int_aarch64_neon_vcvtfp2hf (v4f32 V128:$Rn)))),
2734 (FCVTNv8i16 (INSERT_SUBREG (IMPLICIT_DEF), V64:$Rd, dsub), V128:$Rn)>;
2735 def : Pat<(v2f32 (fround (v2f64 V128:$Rn))), (FCVTNv2i32 V128:$Rn)>;
2736 def : Pat<(v4f16 (fround (v4f32 V128:$Rn))), (FCVTNv4i16 V128:$Rn)>;
2737 def : Pat<(concat_vectors V64:$Rd, (v2f32 (fround (v2f64 V128:$Rn)))),
2738 (FCVTNv4i32 (INSERT_SUBREG (IMPLICIT_DEF), V64:$Rd, dsub), V128:$Rn)>;
2771 def : Pat<(AArch64neg (v8i8 V64:$Rn)), (NEGv8i8 V64:$Rn)>;
2772 def : Pat<(AArch64neg (v16i8 V128:$Rn)), (NEGv16i8 V128:$Rn)>;
2773 def : Pat<(AArch64neg (v4i16 V64:$Rn)), (NEGv4i16 V64:$Rn)>;
2774 def : Pat<(AArch64neg (v8i16 V128:$Rn)), (NEGv8i16 V128:$Rn)>;
2775 def : Pat<(AArch64neg (v2i32 V64:$Rn)), (NEGv2i32 V64:$Rn)>;
2776 def : Pat<(AArch64neg (v4i32 V128:$Rn)), (NEGv4i32 V128:$Rn)>;
2777 def : Pat<(AArch64neg (v2i64 V128:$Rn)), (NEGv2i64 V128:$Rn)>;
2779 def : Pat<(AArch64not (v8i8 V64:$Rn)), (NOTv8i8 V64:$Rn)>;
2780 def : Pat<(AArch64not (v16i8 V128:$Rn)), (NOTv16i8 V128:$Rn)>;
2781 def : Pat<(AArch64not (v4i16 V64:$Rn)), (NOTv8i8 V64:$Rn)>;
2782 def : Pat<(AArch64not (v8i16 V128:$Rn)), (NOTv16i8 V128:$Rn)>;
2783 def : Pat<(AArch64not (v2i32 V64:$Rn)), (NOTv8i8 V64:$Rn)>;
2784 def : Pat<(AArch64not (v1i64 V64:$Rn)), (NOTv8i8 V64:$Rn)>;
2785 def : Pat<(AArch64not (v4i32 V128:$Rn)), (NOTv16i8 V128:$Rn)>;
2786 def : Pat<(AArch64not (v2i64 V128:$Rn)), (NOTv16i8 V128:$Rn)>;
2788 def : Pat<(vnot (v4i16 V64:$Rn)), (NOTv8i8 V64:$Rn)>;
2789 def : Pat<(vnot (v8i16 V128:$Rn)), (NOTv16i8 V128:$Rn)>;
2790 def : Pat<(vnot (v2i32 V64:$Rn)), (NOTv8i8 V64:$Rn)>;
2791 def : Pat<(vnot (v4i32 V128:$Rn)), (NOTv16i8 V128:$Rn)>;
2792 def : Pat<(vnot (v2i64 V128:$Rn)), (NOTv16i8 V128:$Rn)>;
2819 def : Pat<(v4f16 (AArch64rev32 V64:$Rn)), (REV32v4i16 V64:$Rn)>;
2820 def : Pat<(v4f16 (AArch64rev64 V64:$Rn)), (REV64v4i16 V64:$Rn)>;
2821 def : Pat<(v8f16 (AArch64rev32 V128:$Rn)), (REV32v8i16 V128:$Rn)>;
2822 def : Pat<(v8f16 (AArch64rev64 V128:$Rn)), (REV64v8i16 V128:$Rn)>;
2823 def : Pat<(v2f32 (AArch64rev64 V64:$Rn)), (REV64v2i32 V64:$Rn)>;
2824 def : Pat<(v4f32 (AArch64rev64 V128:$Rn)), (REV64v4i32 V128:$Rn)>;
2830 def : Pat<(AArch64vshl (v8i16 (ext (v8i8 V64:$Rn))), (i32 8)),
2831 (SHLLv8i8 V64:$Rn)>;
2832 def : Pat<(AArch64vshl (v8i16 (ext (extract_high_v16i8 V128:$Rn))), (i32 8)),
2833 (SHLLv16i8 V128:$Rn)>;
2834 def : Pat<(AArch64vshl (v4i32 (ext (v4i16 V64:$Rn))), (i32 16)),
2835 (SHLLv4i16 V64:$Rn)>;
2836 def : Pat<(AArch64vshl (v4i32 (ext (extract_high_v8i16 V128:$Rn))), (i32 16)),
2837 (SHLLv8i16 V128:$Rn)>;
2838 def : Pat<(AArch64vshl (v2i64 (ext (v2i32 V64:$Rn))), (i32 32)),
2839 (SHLLv2i32 V64:$Rn)>;
2840 def : Pat<(AArch64vshl (v2i64 (ext (extract_high_v4i32 V128:$Rn))), (i32 32)),
2841 (SHLLv4i32 V128:$Rn)>;
2887 def : Pat<(v2f32 (fma (fneg V64:$Rn), V64:$Rm, V64:$Rd)),
2888 (FMLSv2f32 V64:$Rd, V64:$Rn, V64:$Rm)>;
2890 def : Pat<(v4f32 (fma (fneg V128:$Rn), V128:$Rm, V128:$Rd)),
2891 (FMLSv4f32 V128:$Rd, V128:$Rn, V128:$Rm)>;
2893 def : Pat<(v2f64 (fma (fneg V128:$Rn), V128:$Rm, V128:$Rd)),
2894 (FMLSv2f64 V128:$Rd, V128:$Rn, V128:$Rm)>;
2960 def : Pat<(AArch64bsl (v8i8 V64:$Rd), V64:$Rn, V64:$Rm),
2961 (BSLv8i8 V64:$Rd, V64:$Rn, V64:$Rm)>;
2962 def : Pat<(AArch64bsl (v4i16 V64:$Rd), V64:$Rn, V64:$Rm),
2963 (BSLv8i8 V64:$Rd, V64:$Rn, V64:$Rm)>;
2964 def : Pat<(AArch64bsl (v2i32 V64:$Rd), V64:$Rn, V64:$Rm),
2965 (BSLv8i8 V64:$Rd, V64:$Rn, V64:$Rm)>;
2966 def : Pat<(AArch64bsl (v1i64 V64:$Rd), V64:$Rn, V64:$Rm),
2967 (BSLv8i8 V64:$Rd, V64:$Rn, V64:$Rm)>;
2969 def : Pat<(AArch64bsl (v16i8 V128:$Rd), V128:$Rn, V128:$Rm),
2970 (BSLv16i8 V128:$Rd, V128:$Rn, V128:$Rm)>;
2971 def : Pat<(AArch64bsl (v8i16 V128:$Rd), V128:$Rn, V128:$Rm),
2972 (BSLv16i8 V128:$Rd, V128:$Rn, V128:$Rm)>;
2973 def : Pat<(AArch64bsl (v4i32 V128:$Rd), V128:$Rn, V128:$Rm),
2974 (BSLv16i8 V128:$Rd, V128:$Rn, V128:$Rm)>;
2975 def : Pat<(AArch64bsl (v2i64 V128:$Rd), V128:$Rn, V128:$Rm),
2976 (BSLv16i8 V128:$Rd, V128:$Rn, V128:$Rm)>;
3168 def : Pat<(v1f64 (int_aarch64_neon_fabd (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
3169 (FABD64 FPR64:$Rn, FPR64:$Rm)>;
3200 (i32 (int_aarch64_neon_sqrdmulh (i32 FPR32:$Rn),
3202 (SQRDMLAHv1i32 FPR32:$Rd, FPR32:$Rn, FPR32:$Rm)>;
3205 (i32 (int_aarch64_neon_sqrdmulh (i32 FPR32:$Rn),
3207 (SQRDMLSHv1i32 FPR32:$Rd, FPR32:$Rn, FPR32:$Rm)>;
3244 (i64 (int_aarch64_neon_sqdmulls_scalar (i32 FPR32:$Rn),
3246 (SQDMLALi32 FPR64:$Rd, FPR32:$Rn, FPR32:$Rm)>;
3248 (i64 (int_aarch64_neon_sqdmulls_scalar (i32 FPR32:$Rn),
3250 (SQDMLSLi32 FPR64:$Rd, FPR32:$Rn, FPR32:$Rm)>;
3295 def : Pat<(AArch64neg (v1i64 V64:$Rn)), (NEGv1i64 V64:$Rn)>;
3297 def : Pat<(v1i64 (int_aarch64_neon_fcvtas (v1f64 FPR64:$Rn))),
3298 (FCVTASv1i64 FPR64:$Rn)>;
3299 def : Pat<(v1i64 (int_aarch64_neon_fcvtau (v1f64 FPR64:$Rn))),
3300 (FCVTAUv1i64 FPR64:$Rn)>;
3301 def : Pat<(v1i64 (int_aarch64_neon_fcvtms (v1f64 FPR64:$Rn))),
3302 (FCVTMSv1i64 FPR64:$Rn)>;
3303 def : Pat<(v1i64 (int_aarch64_neon_fcvtmu (v1f64 FPR64:$Rn))),
3304 (FCVTMUv1i64 FPR64:$Rn)>;
3305 def : Pat<(v1i64 (int_aarch64_neon_fcvtns (v1f64 FPR64:$Rn))),
3306 (FCVTNSv1i64 FPR64:$Rn)>;
3307 def : Pat<(v1i64 (int_aarch64_neon_fcvtnu (v1f64 FPR64:$Rn))),
3308 (FCVTNUv1i64 FPR64:$Rn)>;
3309 def : Pat<(v1i64 (int_aarch64_neon_fcvtps (v1f64 FPR64:$Rn))),
3310 (FCVTPSv1i64 FPR64:$Rn)>;
3311 def : Pat<(v1i64 (int_aarch64_neon_fcvtpu (v1f64 FPR64:$Rn))),
3312 (FCVTPUv1i64 FPR64:$Rn)>;
3314 def : Pat<(f32 (int_aarch64_neon_frecpe (f32 FPR32:$Rn))),
3315 (FRECPEv1i32 FPR32:$Rn)>;
3316 def : Pat<(f64 (int_aarch64_neon_frecpe (f64 FPR64:$Rn))),
3317 (FRECPEv1i64 FPR64:$Rn)>;
3318 def : Pat<(v1f64 (int_aarch64_neon_frecpe (v1f64 FPR64:$Rn))),
3319 (FRECPEv1i64 FPR64:$Rn)>;
3321 def : Pat<(f32 (int_aarch64_neon_frecpx (f32 FPR32:$Rn))),
3322 (FRECPXv1i32 FPR32:$Rn)>;
3323 def : Pat<(f64 (int_aarch64_neon_frecpx (f64 FPR64:$Rn))),
3324 (FRECPXv1i64 FPR64:$Rn)>;
3326 def : Pat<(f32 (int_aarch64_neon_frsqrte (f32 FPR32:$Rn))),
3327 (FRSQRTEv1i32 FPR32:$Rn)>;
3328 def : Pat<(f64 (int_aarch64_neon_frsqrte (f64 FPR64:$Rn))),
3329 (FRSQRTEv1i64 FPR64:$Rn)>;
3330 def : Pat<(v1f64 (int_aarch64_neon_frsqrte (v1f64 FPR64:$Rn))),
3331 (FRSQRTEv1i64 FPR64:$Rn)>;
3342 (loadop (ro.Wpat GPR64sp:$Rn, GPR32:$Rm,
3345 (LDRW GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$extend),
3349 (loadop (ro.Xpat GPR64sp:$Rn, GPR64:$Rm,
3352 (LDRX GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$extend),
3359 (zextloadi8 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))))),
3361 (LDRBui GPR64sp:$Rn, uimm12s1:$offset), bsub))>;
3363 (zextloadi8 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))))),
3365 (LDURBi GPR64sp:$Rn, simm9:$offset), bsub))>;
3370 (zextloadi16 (am_indexed16 GPR64sp:$Rn, uimm12s2:$offset))))),
3372 (LDRHui GPR64sp:$Rn, uimm12s2:$offset), hsub))>;
3374 (zextloadi16 (am_unscaled16 GPR64sp:$Rn, simm9:$offset))))),
3376 (LDURHi GPR64sp:$Rn, simm9:$offset), hsub))>;
3388 (zextloadi8 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))))),
3390 (LDRBui GPR64sp:$Rn, uimm12s1:$offset), bsub))>;
3392 (zextloadi8 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))))),
3394 (LDURBi GPR64sp:$Rn, simm9:$offset), bsub))>;
3399 (zextloadi16 (am_indexed16 GPR64sp:$Rn, uimm12s2:$offset))))),
3401 (LDRHui GPR64sp:$Rn, uimm12s2:$offset), hsub))>;
3403 (zextloadi16 (am_unscaled16 GPR64sp:$Rn, simm9:$offset))))),
3405 (LDURHi GPR64sp:$Rn, simm9:$offset), hsub))>;
3410 (load (am_indexed32 GPR64sp:$Rn, uimm12s4:$offset))))),
3412 (LDRSui GPR64sp:$Rn, uimm12s4:$offset), ssub))>;
3414 (load (am_unscaled32 GPR64sp:$Rn, simm9:$offset))))),
3416 (LDURSi GPR64sp:$Rn, simm9:$offset), ssub))>;
3471 def : Pat<(v8i16 (opnode (v8i8 V64:$Rn), (v8i8 V64:$Rm))),
3472 (INST8B V64:$Rn, V64:$Rm)>;
3473 def : Pat<(v4i32 (opnode (v4i16 V64:$Rn), (v4i16 V64:$Rm))),
3474 (INST4H V64:$Rn, V64:$Rm)>;
3475 def : Pat<(v2i64 (opnode (v2i32 V64:$Rn), (v2i32 V64:$Rm))),
3476 (INST2S V64:$Rn, V64:$Rm)>;
3487 def : Pat<(v8i16 (opnode (v8i16 V128:$Rd), (v8i8 V64:$Rn), (v8i8 V64:$Rm))),
3488 (INST8B V128:$Rd, V64:$Rn, V64:$Rm)>;
3489 def : Pat<(v4i32 (opnode (v4i32 V128:$Rd), (v4i16 V64:$Rn), (v4i16 V64:$Rm))),
3490 (INST4H V128:$Rd, V64:$Rn, V64:$Rm)>;
3491 def : Pat<(v2i64 (opnode (v2i64 V128:$Rd), (v2i32 V64:$Rn), (v2i32 V64:$Rm))),
3492 (INST2S V128:$Rd, V64:$Rn, V64:$Rm)>;
3509 def : Pat<(int_aarch64_neon_pmull64 V64:$Rn, V64:$Rm),
3510 (PMULLv1i64 V64:$Rn, V64:$Rm)>;
3511 def : Pat<(int_aarch64_neon_pmull64 (extractelt (v2i64 V128:$Rn), (i64 1)),
3513 (PMULLv2i64 V128:$Rn, V128:$Rm)>;
3519 def : Pat<(v8i8 (trunc (v8i16 (AArch64vlshr (add V128:$Rn, V128:$Rm), (i32 8))))),
3520 (ADDHNv8i16_v8i8 V128:$Rn, V128:$Rm)>;
3521 def : Pat<(v4i16 (trunc (v4i32 (AArch64vlshr (add V128:$Rn, V128:$Rm),
3523 (ADDHNv4i32_v4i16 V128:$Rn, V128:$Rm)>;
3524 def : Pat<(v2i32 (trunc (v2i64 (AArch64vlshr (add V128:$Rn, V128:$Rm),
3526 (ADDHNv2i64_v2i32 V128:$Rn, V128:$Rm)>;
3528 (trunc (v8i16 (AArch64vlshr (add V128:$Rn, V128:$Rm),
3531 V128:$Rn, V128:$Rm)>;
3533 (trunc (v4i32 (AArch64vlshr (add V128:$Rn, V128:$Rm),
3536 V128:$Rn, V128:$Rm)>;
3538 (trunc (v2i64 (AArch64vlshr (add V128:$Rn, V128:$Rm),
3541 V128:$Rn, V128:$Rm)>;
3544 def : Pat<(v8i8 (trunc (v8i16 (AArch64vlshr (sub V128:$Rn, V128:$Rm), (i32 8))))),
3545 (SUBHNv8i16_v8i8 V128:$Rn, V128:$Rm)>;
3546 def : Pat<(v4i16 (trunc (v4i32 (AArch64vlshr (sub V128:$Rn, V128:$Rm),
3548 (SUBHNv4i32_v4i16 V128:$Rn, V128:$Rm)>;
3549 def : Pat<(v2i32 (trunc (v2i64 (AArch64vlshr (sub V128:$Rn, V128:$Rm),
3551 (SUBHNv2i64_v2i32 V128:$Rn, V128:$Rm)>;
3553 (trunc (v8i16 (AArch64vlshr (sub V128:$Rn, V128:$Rm),
3556 V128:$Rn, V128:$Rm)>;
3558 (trunc (v4i32 (AArch64vlshr (sub V128:$Rn, V128:$Rm),
3561 V128:$Rn, V128:$Rm)>;
3563 (trunc (v2i64 (AArch64vlshr (sub V128:$Rn, V128:$Rm),
3566 V128:$Rn, V128:$Rm)>;
3574 def : Pat<(v4i16 (AArch64ext V64:$Rn, V64:$Rm, (i32 imm:$imm))),
3575 (EXTv8i8 V64:$Rn, V64:$Rm, imm:$imm)>;
3576 def : Pat<(v8i16 (AArch64ext V128:$Rn, V128:$Rm, (i32 imm:$imm))),
3577 (EXTv16i8 V128:$Rn, V128:$Rm, imm:$imm)>;
3578 def : Pat<(v2i32 (AArch64ext V64:$Rn, V64:$Rm, (i32 imm:$imm))),
3579 (EXTv8i8 V64:$Rn, V64:$Rm, imm:$imm)>;
3580 def : Pat<(v2f32 (AArch64ext V64:$Rn, V64:$Rm, (i32 imm:$imm))),
3581 (EXTv8i8 V64:$Rn, V64:$Rm, imm:$imm)>;
3582 def : Pat<(v4i32 (AArch64ext V128:$Rn, V128:$Rm, (i32 imm:$imm))),
3583 (EXTv16i8 V128:$Rn, V128:$Rm, imm:$imm)>;
3584 def : Pat<(v4f32 (AArch64ext V128:$Rn, V128:$Rm, (i32 imm:$imm))),
3585 (EXTv16i8 V128:$Rn, V128:$Rm, imm:$imm)>;
3586 def : Pat<(v2i64 (AArch64ext V128:$Rn, V128:$Rm, (i32 imm:$imm))),
3587 (EXTv16i8 V128:$Rn, V128:$Rm, imm:$imm)>;
3588 def : Pat<(v2f64 (AArch64ext V128:$Rn, V128:$Rm, (i32 imm:$imm))),
3589 (EXTv16i8 V128:$Rn, V128:$Rm, imm:$imm)>;
3590 def : Pat<(v4f16 (AArch64ext V64:$Rn, V64:$Rm, (i32 imm:$imm))),
3591 (EXTv8i8 V64:$Rn, V64:$Rm, imm:$imm)>;
3592 def : Pat<(v8f16 (AArch64ext V128:$Rn, V128:$Rm, (i32 imm:$imm))),
3593 (EXTv16i8 V128:$Rn, V128:$Rm, imm:$imm)>;
3597 def : Pat<(v8i8 (extract_subvector V128:$Rn, (i64 8))),
3598 (EXTRACT_SUBREG (EXTv16i8 V128:$Rn, V128:$Rn, 8), dsub)>;
3599 def : Pat<(v4i16 (extract_subvector V128:$Rn, (i64 4))),
3600 (EXTRACT_SUBREG (EXTv16i8 V128:$Rn, V128:$Rn, 8), dsub)>;
3601 def : Pat<(v2i32 (extract_subvector V128:$Rn, (i64 2))),
3602 (EXTRACT_SUBREG (EXTv16i8 V128:$Rn, V128:$Rn, 8), dsub)>;
3603 def : Pat<(v1i64 (extract_subvector V128:$Rn, (i64 1))),
3604 (EXTRACT_SUBREG (EXTv16i8 V128:$Rn, V128:$Rn, 8), dsub)>;
3605 def : Pat<(v4f16 (extract_subvector V128:$Rn, (i64 4))),
3606 (EXTRACT_SUBREG (EXTv16i8 V128:$Rn, V128:$Rn, 8), dsub)>;
3607 def : Pat<(v2f32 (extract_subvector V128:$Rn, (i64 2))),
3608 (EXTRACT_SUBREG (EXTv16i8 V128:$Rn, V128:$Rn, 8), dsub)>;
3609 def : Pat<(v1f64 (extract_subvector V128:$Rn, (i64 1))),
3610 (EXTRACT_SUBREG (EXTv16i8 V128:$Rn, V128:$Rn, 8), dsub)>;
3631 def : Pat<(v8i8 (int_aarch64_neon_tbl1 (v16i8 VecListOne128:$Rn), (v8i8 V64:$Ri))),
3632 (TBLv8i8One VecListOne128:$Rn, V64:$Ri)>;
3633 def : Pat<(v16i8 (int_aarch64_neon_tbl1 (v16i8 V128:$Ri), (v16i8 V128:$Rn))),
3634 (TBLv16i8One V128:$Ri, V128:$Rn)>;
3637 (v16i8 VecListOne128:$Rn), (v8i8 V64:$Ri))),
3638 (TBXv8i8One V64:$Rd, VecListOne128:$Rn, V64:$Ri)>;
3640 (v16i8 V128:$Ri), (v16i8 V128:$Rn))),
3641 (TBXv16i8One V128:$Rd, V128:$Ri, V128:$Rn)>;
3660 def : Pat<(v2i64 (AArch64saddv V128:$Rn)),
3661 (INSERT_SUBREG (v2i64 (IMPLICIT_DEF)), (ADDPv2i64p V128:$Rn), dsub)>;
3662 def : Pat<(v2i64 (AArch64uaddv V128:$Rn)),
3663 (INSERT_SUBREG (v2i64 (IMPLICIT_DEF)), (ADDPv2i64p V128:$Rn), dsub)>;
3664 def : Pat<(f32 (int_aarch64_neon_faddv (v2f32 V64:$Rn))),
3665 (FADDPv2i32p V64:$Rn)>;
3666 def : Pat<(f32 (int_aarch64_neon_faddv (v4f32 V128:$Rn))),
3667 (FADDPv2i32p (EXTRACT_SUBREG (FADDPv4f32 V128:$Rn, V128:$Rn), dsub))>;
3668 def : Pat<(f64 (int_aarch64_neon_faddv (v2f64 V128:$Rn))),
3669 (FADDPv2i64p V128:$Rn)>;
3670 def : Pat<(f32 (int_aarch64_neon_fmaxnmv (v2f32 V64:$Rn))),
3671 (FMAXNMPv2i32p V64:$Rn)>;
3672 def : Pat<(f64 (int_aarch64_neon_fmaxnmv (v2f64 V128:$Rn))),
3673 (FMAXNMPv2i64p V128:$Rn)>;
3674 def : Pat<(f32 (int_aarch64_neon_fmaxv (v2f32 V64:$Rn))),
3675 (FMAXPv2i32p V64:$Rn)>;
3676 def : Pat<(f64 (int_aarch64_neon_fmaxv (v2f64 V128:$Rn))),
3677 (FMAXPv2i64p V128:$Rn)>;
3678 def : Pat<(f32 (int_aarch64_neon_fminnmv (v2f32 V64:$Rn))),
3679 (FMINNMPv2i32p V64:$Rn)>;
3680 def : Pat<(f64 (int_aarch64_neon_fminnmv (v2f64 V128:$Rn))),
3681 (FMINNMPv2i64p V128:$Rn)>;
3682 def : Pat<(f32 (int_aarch64_neon_fminv (v2f32 V64:$Rn))),
3683 (FMINPv2i32p V64:$Rn)>;
3684 def : Pat<(f64 (int_aarch64_neon_fminv (v2f64 V128:$Rn))),
3685 (FMINPv2i64p V128:$Rn)>;
3707 def : Pat<(v2f32 (AArch64dup (f32 FPR32:$Rn))),
3709 (INSERT_SUBREG (v4i32 (IMPLICIT_DEF)), FPR32:$Rn, ssub),
3711 def : Pat<(v4f32 (AArch64dup (f32 FPR32:$Rn))),
3713 (INSERT_SUBREG (v4i32 (IMPLICIT_DEF)), FPR32:$Rn, ssub),
3715 def : Pat<(v2f64 (AArch64dup (f64 FPR64:$Rn))),
3717 (INSERT_SUBREG (v4i32 (IMPLICIT_DEF)), FPR64:$Rn, dsub),
3719 def : Pat<(v4f16 (AArch64dup (f16 FPR16:$Rn))),
3721 (INSERT_SUBREG (v8i16 (IMPLICIT_DEF)), FPR16:$Rn, hsub),
3723 def : Pat<(v8f16 (AArch64dup (f16 FPR16:$Rn))),
3725 (INSERT_SUBREG (v8i16 (IMPLICIT_DEF)), FPR16:$Rn, hsub),
3728 def : Pat<(v4f16 (AArch64duplane16 (v8f16 V128:$Rn), VectorIndexH:$imm)),
3729 (DUPv4i16lane V128:$Rn, VectorIndexH:$imm)>;
3730 def : Pat<(v8f16 (AArch64duplane16 (v8f16 V128:$Rn), VectorIndexH:$imm)),
3731 (DUPv8i16lane V128:$Rn, VectorIndexH:$imm)>;
3733 def : Pat<(v2f32 (AArch64duplane32 (v4f32 V128:$Rn), VectorIndexS:$imm)),
3734 (DUPv2i32lane V128:$Rn, VectorIndexS:$imm)>;
3735 def : Pat<(v4f32 (AArch64duplane32 (v4f32 V128:$Rn), VectorIndexS:$imm)),
3736 (DUPv4i32lane V128:$Rn, VectorIndexS:$imm)>;
3737 def : Pat<(v2f64 (AArch64duplane64 (v2f64 V128:$Rn), VectorIndexD:$imm)),
3738 (DUPv2i64lane V128:$Rn, VectorIndexD:$imm)>;
3756 def : Pat<(ResVT (AArch64dup (ScalVT (vector_extract (Src128VT V128:$Rn),
3758 (DUP V128:$Rn, (IdxXFORM imm:$idx))>;
3760 def : Pat<(ResVT (AArch64dup (ScalVT (vector_extract (Src64VT V64:$Rn),
3762 (DUP (SUBREG_TO_REG (i64 0), V64:$Rn, dsub), (IdxXFORM imm:$idx))>;
3775 def : Pat<(ResVT (AArch64dup (i32 (trunc (extractelt (v2i64 V128:$Rn),
3777 (DUP V128:$Rn, (IdxXFORM imm:$idx))>;
3779 def : Pat<(ResVT (AArch64dup (i32 (trunc (extractelt (v1i64 V64:$Rn),
3781 (DUP (SUBREG_TO_REG (i64 0), V64:$Rn, dsub), (IdxXFORM imm:$idx))>;
3796 def : Pat<(sext_inreg (vector_extract (v16i8 V128:$Rn), VectorIndexB:$idx), i8),
3797 (i32 (SMOVvi8to32 V128:$Rn, VectorIndexB:$idx))>;
3798 def : Pat<(sext_inreg (vector_extract (v16i8 V128:$Rn), VectorIndexB:$idx), i8),
3799 (i64 (SMOVvi8to64 V128:$Rn, VectorIndexB:$idx))>;
3800 def : Pat<(sext_inreg (vector_extract (v8i16 V128:$Rn), VectorIndexH:$idx),i16),
3801 (i32 (SMOVvi16to32 V128:$Rn, VectorIndexH:$idx))>;
3802 def : Pat<(sext_inreg (vector_extract (v8i16 V128:$Rn), VectorIndexH:$idx),i16),
3803 (i64 (SMOVvi16to64 V128:$Rn, VectorIndexH:$idx))>;
3804 def : Pat<(sext_inreg (vector_extract (v8i16 V128:$Rn), VectorIndexH:$idx),i16),
3805 (i32 (SMOVvi16to32 V128:$Rn, VectorIndexH:$idx))>;
3806 def : Pat<(sext (i32 (vector_extract (v4i32 V128:$Rn), VectorIndexS:$idx))),
3807 (i64 (SMOVvi32to64 V128:$Rn, VectorIndexS:$idx))>;
3809 def : Pat<(sext_inreg (i64 (anyext (i32 (vector_extract (v16i8 V128:$Rn),
3811 (i64 (SMOVvi8to64 V128:$Rn, VectorIndexB:$idx))>;
3812 def : Pat<(sext_inreg (i64 (anyext (i32 (vector_extract (v8i16 V128:$Rn),
3814 (i64 (SMOVvi16to64 V128:$Rn, VectorIndexH:$idx))>;
3820 def : Pat<(and (vector_extract (v16i8 V128:$Rn), VectorIndexB:$idx),
3822 (i32 (UMOVvi8 V128:$Rn, VectorIndexB:$idx))>;
3823 def : Pat<(and (vector_extract (v8i16 V128:$Rn), VectorIndexH:$idx),
3825 (i32 (UMOVvi16 V128:$Rn, VectorIndexH:$idx))>;
3829 def : Pat<(v16i8 (scalar_to_vector GPR32:$Rn)),
3831 (f32 (COPY_TO_REGCLASS GPR32:$Rn, FPR32)), ssub)>;
3832 def : Pat<(v8i8 (scalar_to_vector GPR32:$Rn)),
3834 (f32 (COPY_TO_REGCLASS GPR32:$Rn, FPR32)), ssub)>;
3836 def : Pat<(v8i16 (scalar_to_vector GPR32:$Rn)),
3838 (f32 (COPY_TO_REGCLASS GPR32:$Rn, FPR32)), ssub)>;
3839 def : Pat<(v4i16 (scalar_to_vector GPR32:$Rn)),
3841 (f32 (COPY_TO_REGCLASS GPR32:$Rn, FPR32)), ssub)>;
3843 def : Pat<(v2i32 (scalar_to_vector (i32 FPR32:$Rn))),
3845 (i32 FPR32:$Rn), ssub))>;
3846 def : Pat<(v4i32 (scalar_to_vector (i32 FPR32:$Rn))),
3848 (i32 FPR32:$Rn), ssub))>;
3849 def : Pat<(v2i64 (scalar_to_vector (i64 FPR64:$Rn))),
3851 (i64 FPR64:$Rn), dsub))>;
3853 def : Pat<(v4f16 (scalar_to_vector (f16 FPR16:$Rn))),
3854 (INSERT_SUBREG (v4f16 (IMPLICIT_DEF)), FPR16:$Rn, hsub)>;
3855 def : Pat<(v8f16 (scalar_to_vector (f16 FPR16:$Rn))),
3856 (INSERT_SUBREG (v8f16 (IMPLICIT_DEF)), FPR16:$Rn, hsub)>;
3858 def : Pat<(v4f32 (scalar_to_vector (f32 FPR32:$Rn))),
3859 (INSERT_SUBREG (v4f32 (IMPLICIT_DEF)), FPR32:$Rn, ssub)>;
3860 def : Pat<(v2f32 (scalar_to_vector (f32 FPR32:$Rn))),
3861 (INSERT_SUBREG (v2f32 (IMPLICIT_DEF)), FPR32:$Rn, ssub)>;
3862 def : Pat<(v2f64 (scalar_to_vector (f64 FPR64:$Rn))),
3863 (INSERT_SUBREG (v2f64 (IMPLICIT_DEF)), FPR64:$Rn, dsub)>;
3865 def : Pat<(v4f16 (vector_insert (v4f16 V64:$Rn),
3869 (v8f16 (INSERT_SUBREG (v8f16 (IMPLICIT_DEF)), V64:$Rn, dsub)),
3875 def : Pat<(v8f16 (vector_insert (v8f16 V128:$Rn),
3878 V128:$Rn, VectorIndexH:$imm,
3882 def : Pat<(v2f32 (vector_insert (v2f32 V64:$Rn),
3886 (v4f32 (INSERT_SUBREG (v4f32 (IMPLICIT_DEF)), V64:$Rn, dsub)),
3891 def : Pat<(v4f32 (vector_insert (v4f32 V128:$Rn),
3894 V128:$Rn, VectorIndexS:$imm,
3897 def : Pat<(v2f64 (vector_insert (v2f64 V128:$Rn),
3900 V128:$Rn, VectorIndexD:$imm,
3936 (VTScal (vector_extract (VT128 V128:$Rn), imm:$Immn)),
3938 (INS V128:$src, imm:$Immd, V128:$Rn, imm:$Immn)>;
3941 (VTScal (vector_extract (VT64 V64:$Rn), imm:$Immn)),
3944 (SUBREG_TO_REG (i64 0), V64:$Rn, dsub), imm:$Immn)>;
3947 (VTScal (vector_extract (VT128 V128:$Rn), imm:$Immn)),
3950 imm:$Immd, V128:$Rn, imm:$Immn),
3954 (VTScal (vector_extract (VT64 V64:$Rn), imm:$Immn)),
3958 (SUBREG_TO_REG (i64 0), V64:$Rn, dsub), imm:$Immn),
3970 def : Pat<(vector_extract (v2f64 V128:$Rn), 0),
3971 (f64 (EXTRACT_SUBREG V128:$Rn, dsub))>;
3972 def : Pat<(vector_extract (v4f32 V128:$Rn), 0),
3973 (f32 (EXTRACT_SUBREG V128:$Rn, ssub))>;
3974 def : Pat<(vector_extract (v8f16 V128:$Rn), 0),
3975 (f16 (EXTRACT_SUBREG V128:$Rn, hsub))>;
3977 def : Pat<(vector_extract (v2f64 V128:$Rn), VectorIndexD:$idx),
3978 (f64 (CPYi64 V128:$Rn, VectorIndexD:$idx))>;
3979 def : Pat<(vector_extract (v4f32 V128:$Rn), VectorIndexS:$idx),
3980 (f32 (CPYi32 V128:$Rn, VectorIndexS:$idx))>;
3981 def : Pat<(vector_extract (v8f16 V128:$Rn), VectorIndexH:$idx),
3982 (f16 (CPYi16 V128:$Rn, VectorIndexH:$idx))>;
3988 : Pat<(DstTy (concat_vectors (SrcTy V64:$Rd), V64:$Rn)),
3990 (INSERT_SUBREG (IMPLICIT_DEF), V64:$Rn, dsub), 0)>;
4002 : Pat<(DstTy (concat_vectors (SrcTy V64:$Rn), undef)),
4003 (INSERT_SUBREG (IMPLICIT_DEF), V64:$Rn, dsub)>;
4035 def : Pat<(v8i8 (opNode V64:$Rn)),
4037 (!cast<Instruction>(!strconcat(baseOpc, "v8i8v")) V64:$Rn), bsub)>;
4038 def : Pat<(v16i8 (opNode V128:$Rn)),
4040 (!cast<Instruction>(!strconcat(baseOpc, "v16i8v")) V128:$Rn), bsub)>;
4041 def : Pat<(v4i16 (opNode V64:$Rn)),
4043 (!cast<Instruction>(!strconcat(baseOpc, "v4i16v")) V64:$Rn), hsub)>;
4044 def : Pat<(v8i16 (opNode V128:$Rn)),
4046 (!cast<Instruction>(!strconcat(baseOpc, "v8i16v")) V128:$Rn), hsub)>;
4047 def : Pat<(v4i32 (opNode V128:$Rn)),
4049 (!cast<Instruction>(!strconcat(baseOpc, "v4i32v")) V128:$Rn), ssub)>;
4053 def : Pat<(i32 (vector_extract (insert_subvector undef, (v8i8 (opNode V64:$Rn)),
4056 (!cast<Instruction>(!strconcat(baseOpc, "v8i8v")) V64:$Rn),
4058 def : Pat<(i32 (vector_extract (v16i8 (opNode V128:$Rn)), (i64 0))),
4060 (!cast<Instruction>(!strconcat(baseOpc, "v16i8v")) V128:$Rn),
4063 (v4i16 (opNode V64:$Rn)), (i32 0)), (i64 0))),
4065 (!cast<Instruction>(!strconcat(baseOpc, "v4i16v")) V64:$Rn),
4067 def : Pat<(i32 (vector_extract (v8i16 (opNode V128:$Rn)), (i64 0))),
4069 (!cast<Instruction>(!strconcat(baseOpc, "v8i16v")) V128:$Rn),
4071 def : Pat<(i32 (vector_extract (v4i32 (opNode V128:$Rn)), (i64 0))),
4073 (!cast<Instruction>(!strconcat(baseOpc, "v4i32v")) V128:$Rn),
4084 (opNode (v8i8 V64:$Rn)), (i32 0)), (i64 0))), i8)),
4087 (!cast<Instruction>(!strconcat(baseOpc, "v8i8v")) V64:$Rn), bsub),
4090 (opNode (v16i8 V128:$Rn)), (i64 0))), i8)),
4093 (!cast<Instruction>(!strconcat(baseOpc, "v16i8v")) V128:$Rn), bsub),
4096 (opNode (v4i16 V64:$Rn)), (i32 0)), (i64 0))), i16)),
4099 (!cast<Instruction>(!strconcat(baseOpc, "v4i16v")) V64:$Rn), hsub),
4102 (opNode (v8i16 V128:$Rn)), (i64 0))), i16)),
4105 (!cast<Instruction>(!strconcat(baseOpc, "v8i16v")) V128:$Rn), hsub),
4115 (opNode (v8i8 V64:$Rn)), (i32 0)), (i64 0))), maski8_or_more)),
4118 (!cast<Instruction>(!strconcat(baseOpc, "v8i8v")) V64:$Rn), bsub),
4120 def : Pat<(i32 (and (i32 (vector_extract (opNode (v16i8 V128:$Rn)), (i64 0))),
4124 (!cast<Instruction>(!strconcat(baseOpc, "v16i8v")) V128:$Rn), bsub),
4127 (opNode (v4i16 V64:$Rn)), (i32 0)), (i64 0))), maski16_or_more)),
4130 (!cast<Instruction>(!strconcat(baseOpc, "v4i16v")) V64:$Rn), hsub),
4132 def : Pat<(i32 (and (i32 (vector_extract (opNode (v8i16 V128:$Rn)), (i64 0))),
4136 (!cast<Instruction>(!strconcat(baseOpc, "v8i16v")) V128:$Rn), hsub),
4142 def : Pat<(v2i32 (AArch64saddv (v2i32 V64:$Rn))),
4143 (ADDPv2i32 V64:$Rn, V64:$Rn)>;
4147 def : Pat<(v2i32 (AArch64uaddv (v2i32 V64:$Rn))),
4148 (ADDPv2i32 V64:$Rn, V64:$Rn)>;
4151 def : Pat<(v2i32 (AArch64smaxv (v2i32 V64:$Rn))),
4152 (SMAXPv2i32 V64:$Rn, V64:$Rn)>;
4155 def : Pat<(v2i32 (AArch64sminv (v2i32 V64:$Rn))),
4156 (SMINPv2i32 V64:$Rn, V64:$Rn)>;
4159 def : Pat<(v2i32 (AArch64umaxv (v2i32 V64:$Rn))),
4160 (UMAXPv2i32 V64:$Rn, V64:$Rn)>;
4163 def : Pat<(v2i32 (AArch64uminv (v2i32 V64:$Rn))),
4164 (UMINPv2i32 V64:$Rn, V64:$Rn)>;
4167 def : Pat<(i32 (intOp (v8i8 V64:$Rn))),
4170 (!cast<Instruction>(!strconcat(baseOpc, "v8i8v")) V64:$Rn), hsub),
4172 def : Pat<(i32 (intOp (v16i8 V128:$Rn))),
4175 (!cast<Instruction>(!strconcat(baseOpc, "v16i8v")) V128:$Rn), hsub),
4178 def : Pat<(i32 (intOp (v4i16 V64:$Rn))),
4181 (!cast<Instruction>(!strconcat(baseOpc, "v4i16v")) V64:$Rn), ssub),
4183 def : Pat<(i32 (intOp (v8i16 V128:$Rn))),
4186 (!cast<Instruction>(!strconcat(baseOpc, "v8i16v")) V128:$Rn), ssub),
4189 def : Pat<(i64 (intOp (v4i32 V128:$Rn))),
4192 (!cast<Instruction>(!strconcat(baseOpc, "v4i32v")) V128:$Rn), dsub),
4198 def : Pat<(i32 (intOp (v8i8 V64:$Rn))),
4201 (!cast<Instruction>(!strconcat(baseOpc, "v8i8v")) V64:$Rn), hsub),
4203 def : Pat<(i32 (intOp (v16i8 V128:$Rn))),
4206 (!cast<Instruction>(!strconcat(baseOpc, "v16i8v")) V128:$Rn), hsub),
4209 def : Pat<(i32 (intOp (v4i16 V64:$Rn))),
4212 (!cast<Instruction>(!strconcat(baseOpc, "v4i16v")) V64:$Rn), ssub),
4214 def : Pat<(i32 (intOp (v8i16 V128:$Rn))),
4217 (!cast<Instruction>(!strconcat(baseOpc, "v8i16v")) V128:$Rn), ssub),
4220 def : Pat<(i64 (intOp (v4i32 V128:$Rn))),
4223 (!cast<Instruction>(!strconcat(baseOpc, "v4i32v")) V128:$Rn), dsub),
4231 def : Pat<(i64 (int_aarch64_neon_saddlv (v2i32 V64:$Rn))),
4234 (SADDLPv2i32_v1i64 V64:$Rn), dsub),
4237 def : Pat<(i64 (int_aarch64_neon_uaddlv (v2i32 V64:$Rn))),
4240 (UADDLPv2i32_v1i64 V64:$Rn), dsub),
4448 def : Pat<(v2f32 (OpNode (v2f32 V64:$Rd), (v2f32 V64:$Rn),
4451 (FMLSv2i32_indexed V64:$Rd, V64:$Rn, V128:$Rm, VectorIndexS:$idx)>;
4452 def : Pat<(v2f32 (OpNode (v2f32 V64:$Rd), (v2f32 V64:$Rn),
4458 (FMLSv2i32_indexed V64:$Rd, V64:$Rn,
4461 def : Pat<(v2f32 (OpNode (v2f32 V64:$Rd), (v2f32 V64:$Rn),
4463 (FMLSv2i32_indexed V64:$Rd, V64:$Rn,
4468 def : Pat<(v4f32 (OpNode (v4f32 V128:$Rd), (v4f32 V128:$Rn),
4471 (FMLSv4i32_indexed V128:$Rd, V128:$Rn, V128:$Rm,
4473 def : Pat<(v4f32 (OpNode (v4f32 V128:$Rd), (v4f32 V128:$Rn),
4479 (FMLSv4i32_indexed V128:$Rd, V128:$Rn,
4482 def : Pat<(v4f32 (OpNode (v4f32 V128:$Rd), (v4f32 V128:$Rn),
4484 (FMLSv4i32_indexed V128:$Rd, V128:$Rn,
4489 def : Pat<(v2f64 (OpNode (v2f64 V128:$Rd), (v2f64 V128:$Rn),
4493 V128:$Rd, V128:$Rn, V128:$Rm, VectorIndexS:$idx)>;
4494 def : Pat<(v2f64 (OpNode (v2f64 V128:$Rd), (v2f64 V128:$Rn),
4496 (FMLSv2i64_indexed V128:$Rd, V128:$Rn,
4500 def : Pat<(f32 (OpNode (f32 FPR32:$Rd), (f32 FPR32:$Rn),
4503 (FMLSv1i32_indexed FPR32:$Rd, FPR32:$Rn,
4505 def : Pat<(f32 (OpNode (f32 FPR32:$Rd), (f32 FPR32:$Rn),
4510 (FMLSv1i32_indexed FPR32:$Rd, FPR32:$Rn,
4514 def : Pat<(f64 (OpNode (f64 FPR64:$Rd), (f64 FPR64:$Rn),
4517 (FMLSv1i64_indexed FPR64:$Rd, FPR64:$Rn,
4529 def : Pat<(v2f32 (fmul V64:$Rn, (AArch64dup (f32 FPR32:$Rm)))),
4530 (FMULv2i32_indexed V64:$Rn,
4533 def : Pat<(v4f32 (fmul V128:$Rn, (AArch64dup (f32 FPR32:$Rm)))),
4534 (FMULv4i32_indexed V128:$Rn,
4537 def : Pat<(v2f64 (fmul V128:$Rn, (AArch64dup (f64 FPR64:$Rm)))),
4538 (FMULv2i64_indexed V128:$Rn,
4573 def : Pat<(int_aarch64_neon_sqdmulls_scalar (i32 FPR32:$Rn),
4576 (SQDMULLv1i64_indexed FPR32:$Rn, V128:$Vm, VectorIndexS:$idx)>;
4588 def : Pat<(int_aarch64_neon_vcvtfp2fxs FPR32:$Rn, vecshiftR32:$imm),
4589 (FCVTZSs FPR32:$Rn, vecshiftR32:$imm)>;
4590 def : Pat<(int_aarch64_neon_vcvtfp2fxu FPR32:$Rn, vecshiftR32:$imm),
4591 (FCVTZUs FPR32:$Rn, vecshiftR32:$imm)>;
4592 def : Pat<(i64 (int_aarch64_neon_vcvtfp2fxs (f64 FPR64:$Rn), vecshiftR64:$imm)),
4593 (FCVTZSd FPR64:$Rn, vecshiftR64:$imm)>;
4594 def : Pat<(i64 (int_aarch64_neon_vcvtfp2fxu (f64 FPR64:$Rn), vecshiftR64:$imm)),
4595 (FCVTZUd FPR64:$Rn, vecshiftR64:$imm)>;
4596 def : Pat<(v1i64 (int_aarch64_neon_vcvtfp2fxs (v1f64 FPR64:$Rn),
4598 (FCVTZSd FPR64:$Rn, vecshiftR64:$imm)>;
4599 def : Pat<(v1i64 (int_aarch64_neon_vcvtfp2fxu (v1f64 FPR64:$Rn),
4601 (FCVTZUd FPR64:$Rn, vecshiftR64:$imm)>;
4602 def : Pat<(int_aarch64_neon_vcvtfxs2fp FPR32:$Rn, vecshiftR32:$imm),
4603 (SCVTFs FPR32:$Rn, vecshiftR32:$imm)>;
4604 def : Pat<(int_aarch64_neon_vcvtfxu2fp FPR32:$Rn, vecshiftR32:$imm),
4605 (UCVTFs FPR32:$Rn, vecshiftR32:$imm)>;
4606 def : Pat<(f64 (int_aarch64_neon_vcvtfxs2fp (i64 FPR64:$Rn), vecshiftR64:$imm)),
4607 (SCVTFd FPR64:$Rn, vecshiftR64:$imm)>;
4608 def : Pat<(f64 (int_aarch64_neon_vcvtfxu2fp (i64 FPR64:$Rn), vecshiftR64:$imm)),
4609 (UCVTFd FPR64:$Rn, vecshiftR64:$imm)>;
4610 def : Pat<(v1f64 (int_aarch64_neon_vcvtfxs2fp (v1i64 FPR64:$Rn),
4612 (SCVTFd FPR64:$Rn, vecshiftR64:$imm)>;
4613 def : Pat<(v1f64 (int_aarch64_neon_vcvtfxu2fp (v1i64 FPR64:$Rn),
4615 (UCVTFd FPR64:$Rn, vecshiftR64:$imm)>;
4665 def : Pat<(v1i64 (int_aarch64_neon_vsli (v1i64 FPR64:$Rd), (v1i64 FPR64:$Rn),
4667 (SLId FPR64:$Rd, FPR64:$Rn, vecshiftL64:$imm)>;
4679 def : Pat<(v1i64 (int_aarch64_neon_vsri (v1i64 FPR64:$Rd), (v1i64 FPR64:$Rn),
4681 (SRId FPR64:$Rd, FPR64:$Rn, vecshiftR64:$imm)>;
4712 def : Pat<(v8i8 (trunc (AArch64vlshr (v8i16 V128:$Rn), vecshiftR16Narrow:$imm))),
4713 (SHRNv8i8_shift V128:$Rn, vecshiftR16Narrow:$imm)>;
4714 def : Pat<(v4i16 (trunc (AArch64vlshr (v4i32 V128:$Rn), vecshiftR32Narrow:$imm))),
4715 (SHRNv4i16_shift V128:$Rn, vecshiftR32Narrow:$imm)>;
4716 def : Pat<(v2i32 (trunc (AArch64vlshr (v2i64 V128:$Rn), vecshiftR64Narrow:$imm))),
4717 (SHRNv2i32_shift V128:$Rn, vecshiftR64Narrow:$imm)>;
4720 (trunc (AArch64vlshr (v8i16 V128:$Rn),
4723 V128:$Rn, vecshiftR16Narrow:$imm)>;
4725 (trunc (AArch64vlshr (v4i32 V128:$Rn),
4728 V128:$Rn, vecshiftR32Narrow:$imm)>;
4730 (trunc (AArch64vlshr (v2i64 V128:$Rn),
4733 V128:$Rn, vecshiftR32Narrow:$imm)>;
4737 def : Pat<(v8i16 (sext (v8i8 V64:$Rn))), (SSHLLv8i8_shift V64:$Rn, (i32 0))>;
4738 def : Pat<(v8i16 (zext (v8i8 V64:$Rn))), (USHLLv8i8_shift V64:$Rn, (i32 0))>;
4739 def : Pat<(v8i16 (anyext (v8i8 V64:$Rn))), (USHLLv8i8_shift V64:$Rn, (i32 0))>;
4740 def : Pat<(v4i32 (sext (v4i16 V64:$Rn))), (SSHLLv4i16_shift V64:$Rn, (i32 0))>;
4741 def : Pat<(v4i32 (zext (v4i16 V64:$Rn))), (USHLLv4i16_shift V64:$Rn, (i32 0))>;
4742 def : Pat<(v4i32 (anyext (v4i16 V64:$Rn))), (USHLLv4i16_shift V64:$Rn, (i32 0))>;
4743 def : Pat<(v2i64 (sext (v2i32 V64:$Rn))), (SSHLLv2i32_shift V64:$Rn, (i32 0))>;
4744 def : Pat<(v2i64 (zext (v2i32 V64:$Rn))), (USHLLv2i32_shift V64:$Rn, (i32 0))>;
4745 def : Pat<(v2i64 (anyext (v2i32 V64:$Rn))), (USHLLv2i32_shift V64:$Rn, (i32 0))>;
4747 def : Pat<(v8i16 (anyext (v8i8 (extract_subvector V128:$Rn, (i64 8)) ))),
4748 (USHLLv16i8_shift V128:$Rn, (i32 0))>;
4749 def : Pat<(v8i16 (zext (v8i8 (extract_subvector V128:$Rn, (i64 8)) ))),
4750 (USHLLv16i8_shift V128:$Rn, (i32 0))>;
4751 def : Pat<(v8i16 (sext (v8i8 (extract_subvector V128:$Rn, (i64 8)) ))),
4752 (SSHLLv16i8_shift V128:$Rn, (i32 0))>;
4753 def : Pat<(v4i32 (anyext (v4i16 (extract_subvector V128:$Rn, (i64 4)) ))),
4754 (USHLLv8i16_shift V128:$Rn, (i32 0))>;
4755 def : Pat<(v4i32 (zext (v4i16 (extract_subvector V128:$Rn, (i64 4)) ))),
4756 (USHLLv8i16_shift V128:$Rn, (i32 0))>;
4757 def : Pat<(v4i32 (sext (v4i16 (extract_subvector V128:$Rn, (i64 4)) ))),
4758 (SSHLLv8i16_shift V128:$Rn, (i32 0))>;
4759 def : Pat<(v2i64 (anyext (v2i32 (extract_subvector V128:$Rn, (i64 2)) ))),
4760 (USHLLv4i32_shift V128:$Rn, (i32 0))>;
4761 def : Pat<(v2i64 (zext (v2i32 (extract_subvector V128:$Rn, (i64 2)) ))),
4762 (USHLLv4i32_shift V128:$Rn, (i32 0))>;
4763 def : Pat<(v2i64 (sext (v2i32 (extract_subvector V128:$Rn, (i64 2)) ))),
4764 (SSHLLv4i32_shift V128:$Rn, (i32 0))>;
4850 def : SExtLoadi8CVTf32Pat<(ro8.Wpat GPR64sp:$Rn, GPR32:$Rm, ro8.Wext:$ext),
4851 (LDRBroW GPR64sp:$Rn, GPR32:$Rm, ro8.Wext:$ext)>;
4852 def : SExtLoadi8CVTf32Pat<(ro8.Xpat GPR64sp:$Rn, GPR64:$Rm, ro8.Xext:$ext),
4853 (LDRBroX GPR64sp:$Rn, GPR64:$Rm, ro8.Xext:$ext)>;
4854 def : SExtLoadi8CVTf32Pat<(am_indexed8 GPR64sp:$Rn, uimm12s1:$offset),
4855 (LDRBui GPR64sp:$Rn, uimm12s1:$offset)>;
4856 def : SExtLoadi8CVTf32Pat<(am_unscaled8 GPR64sp:$Rn, simm9:$offset),
4857 (LDURBi GPR64sp:$Rn, simm9:$offset)>;
4870 def : SExtLoadi16CVTf32Pat<(ro16.Wpat GPR64sp:$Rn, GPR32:$Rm, ro16.Wext:$ext),
4871 (LDRHroW GPR64sp:$Rn, GPR32:$Rm, ro16.Wext:$ext)>;
4872 def : SExtLoadi16CVTf32Pat<(ro16.Xpat GPR64sp:$Rn, GPR64:$Rm, ro16.Xext:$ext),
4873 (LDRHroX GPR64sp:$Rn, GPR64:$Rm, ro16.Xext:$ext)>;
4874 def : SExtLoadi16CVTf32Pat<(am_indexed16 GPR64sp:$Rn, uimm12s2:$offset),
4875 (LDRHui GPR64sp:$Rn, uimm12s2:$offset)>;
4876 def : SExtLoadi16CVTf32Pat<(am_unscaled16 GPR64sp:$Rn, simm9:$offset),
4877 (LDURHi GPR64sp:$Rn, simm9:$offset)>;
4903 def : SExtLoadi16CVTf64Pat<(ro16.Wpat GPR64sp:$Rn, GPR32:$Rm, ro16.Wext:$ext),
4904 (LDRHroW GPR64sp:$Rn, GPR32:$Rm, ro16.Wext:$ext)>;
4905 def : SExtLoadi16CVTf64Pat<(ro16.Xpat GPR64sp:$Rn, GPR64:$Rm, ro16.Xext:$ext),
4906 (LDRHroX GPR64sp:$Rn, GPR64:$Rm, ro16.Xext:$ext)>;
4907 def : SExtLoadi16CVTf64Pat<(am_indexed16 GPR64sp:$Rn, uimm12s2:$offset),
4908 (LDRHui GPR64sp:$Rn, uimm12s2:$offset)>;
4909 def : SExtLoadi16CVTf64Pat<(am_unscaled16 GPR64sp:$Rn, simm9:$offset),
4910 (LDURHi GPR64sp:$Rn, simm9:$offset)>;
4922 def : SExtLoadi32CVTf64Pat<(ro32.Wpat GPR64sp:$Rn, GPR32:$Rm, ro32.Wext:$ext),
4923 (LDRSroW GPR64sp:$Rn, GPR32:$Rm, ro32.Wext:$ext)>;
4924 def : SExtLoadi32CVTf64Pat<(ro32.Xpat GPR64sp:$Rn, GPR64:$Rm, ro32.Xext:$ext),
4925 (LDRSroX GPR64sp:$Rn, GPR64:$Rm, ro32.Xext:$ext)>;
4926 def : SExtLoadi32CVTf64Pat<(am_indexed32 GPR64sp:$Rn, uimm12s4:$offset),
4927 (LDRSui GPR64sp:$Rn, uimm12s4:$offset)>;
4928 def : SExtLoadi32CVTf64Pat<(am_unscaled32 GPR64sp:$Rn, simm9:$offset),
4929 (LDURSi GPR64sp:$Rn, simm9:$offset)>;
4949 : Pat<(ty (load GPR64sp:$Rn)), (INST GPR64sp:$Rn)>;
4961 : Pat<(store ty:$Vt, GPR64sp:$Rn),
4962 (INST ty:$Vt, GPR64sp:$Rn)>;
5000 def : Pat<(v8i8 (AArch64dup (i32 (extloadi8 GPR64sp:$Rn)))),
5001 (LD1Rv8b GPR64sp:$Rn)>;
5002 def : Pat<(v16i8 (AArch64dup (i32 (extloadi8 GPR64sp:$Rn)))),
5003 (LD1Rv16b GPR64sp:$Rn)>;
5004 def : Pat<(v4i16 (AArch64dup (i32 (extloadi16 GPR64sp:$Rn)))),
5005 (LD1Rv4h GPR64sp:$Rn)>;
5006 def : Pat<(v8i16 (AArch64dup (i32 (extloadi16 GPR64sp:$Rn)))),
5007 (LD1Rv8h GPR64sp:$Rn)>;
5008 def : Pat<(v2i32 (AArch64dup (i32 (load GPR64sp:$Rn)))),
5009 (LD1Rv2s GPR64sp:$Rn)>;
5010 def : Pat<(v4i32 (AArch64dup (i32 (load GPR64sp:$Rn)))),
5011 (LD1Rv4s GPR64sp:$Rn)>;
5012 def : Pat<(v2i64 (AArch64dup (i64 (load GPR64sp:$Rn)))),
5013 (LD1Rv2d GPR64sp:$Rn)>;
5014 def : Pat<(v1i64 (AArch64dup (i64 (load GPR64sp:$Rn)))),
5015 (LD1Rv1d GPR64sp:$Rn)>;
5017 def : Pat<(v2f32 (AArch64dup (f32 (load GPR64sp:$Rn)))),
5018 (LD1Rv2s GPR64sp:$Rn)>;
5019 def : Pat<(v4f32 (AArch64dup (f32 (load GPR64sp:$Rn)))),
5020 (LD1Rv4s GPR64sp:$Rn)>;
5021 def : Pat<(v2f64 (AArch64dup (f64 (load GPR64sp:$Rn)))),
5022 (LD1Rv2d GPR64sp:$Rn)>;
5023 def : Pat<(v1f64 (AArch64dup (f64 (load GPR64sp:$Rn)))),
5024 (LD1Rv1d GPR64sp:$Rn)>;
5025 def : Pat<(v4f16 (AArch64dup (f16 (load GPR64sp:$Rn)))),
5026 (LD1Rv4h GPR64sp:$Rn)>;
5027 def : Pat<(v8f16 (AArch64dup (f16 (load GPR64sp:$Rn)))),
5028 (LD1Rv8h GPR64sp:$Rn)>;
5033 (STy (scalar_load GPR64sp:$Rn)), VecIndex:$idx),
5034 (LD1 VecListOne128:$Rd, VecIndex:$idx, GPR64sp:$Rn)>;
5047 (STy (scalar_load GPR64sp:$Rn)), VecIndex:$idx),
5050 VecIndex:$idx, GPR64sp:$Rn),
5076 GPR64sp:$Rn),
5077 (ST1 VecListOne128:$Vt, VecIndex:$idx, GPR64sp:$Rn)>;
5092 GPR64sp:$Rn),
5094 VecIndex:$idx, GPR64sp:$Rn)>;
5107 GPR64sp:$Rn, offset),
5109 VecIndex:$idx, GPR64sp:$Rn, XZR)>;
5113 GPR64sp:$Rn, GPR64:$Rm),
5115 VecIndex:$idx, GPR64sp:$Rn, $Rm)>;
5132 GPR64sp:$Rn, offset),
5133 (ST1 VecListOne128:$Vt, VecIndex:$idx, GPR64sp:$Rn, XZR)>;
5137 GPR64sp:$Rn, GPR64:$Rm),
5138 (ST1 VecListOne128:$Vt, VecIndex:$idx, GPR64sp:$Rn, $Rm)>;
5234 def : Pat<(shl (sext_inreg GPR32:$Rn, i8), (i64 imm0_31:$imm)),
5235 (SBFMWri GPR32:$Rn, (i64 (i32shift_a imm0_31:$imm)),
5237 def : Pat<(shl (sext_inreg GPR64:$Rn, i8), (i64 imm0_63:$imm)),
5238 (SBFMXri GPR64:$Rn, (i64 (i64shift_a imm0_63:$imm)),
5241 def : Pat<(shl (sext_inreg GPR32:$Rn, i16), (i64 imm0_31:$imm)),
5242 (SBFMWri GPR32:$Rn, (i64 (i32shift_a imm0_31:$imm)),
5244 def : Pat<(shl (sext_inreg GPR64:$Rn, i16), (i64 imm0_63:$imm)),
5245 (SBFMXri GPR64:$Rn, (i64 (i64shift_a imm0_63:$imm)),
5248 def : Pat<(shl (i64 (sext GPR32:$Rn)), (i64 imm0_63:$imm)),
5249 (SBFMXri (INSERT_SUBREG (i64 (IMPLICIT_DEF)), GPR32:$Rn, sub_32),
5260 def : Pat<(sra (sext_inreg GPR32:$Rn, i8), (i64 imm0_7:$imm)),
5261 (SBFMWri GPR32:$Rn, (i64 imm0_7:$imm), 7)>;
5262 def : Pat<(sra (sext_inreg GPR64:$Rn, i8), (i64 imm0_7:$imm)),
5263 (SBFMXri GPR64:$Rn, (i64 imm0_7:$imm), 7)>;
5265 def : Pat<(sra (sext_inreg GPR32:$Rn, i16), (i64 imm0_15:$imm)),
5266 (SBFMWri GPR32:$Rn, (i64 imm0_15:$imm), 15)>;
5267 def : Pat<(sra (sext_inreg GPR64:$Rn, i16), (i64 imm0_15:$imm)),
5268 (SBFMXri GPR64:$Rn, (i64 imm0_15:$imm), 15)>;
5270 def : Pat<(sra (i64 (sext GPR32:$Rn)), (i64 imm0_31:$imm)),
5271 (SBFMXri (INSERT_SUBREG (i64 (IMPLICIT_DEF)), GPR32:$Rn, sub_32),
5885 def : Pat<(v4i16 (extract_subvector V128:$Rn, (i64 0))),
5886 (EXTRACT_SUBREG V128:$Rn, dsub)>;
5887 def : Pat<(v8i8 (extract_subvector V128:$Rn, (i64 0))),
5888 (EXTRACT_SUBREG V128:$Rn, dsub)>;
5889 def : Pat<(v2f32 (extract_subvector V128:$Rn, (i64 0))),
5890 (EXTRACT_SUBREG V128:$Rn, dsub)>;
5891 def : Pat<(v4f16 (extract_subvector V128:$Rn, (i64 0))),
5892 (EXTRACT_SUBREG V128:$Rn, dsub)>;
5893 def : Pat<(v2i32 (extract_subvector V128:$Rn, (i64 0))),
5894 (EXTRACT_SUBREG V128:$Rn, dsub)>;
5895 def : Pat<(v1i64 (extract_subvector V128:$Rn, (i64 0))),
5896 (EXTRACT_SUBREG V128:$Rn, dsub)>;
5897 def : Pat<(v1f64 (extract_subvector V128:$Rn, (i64 0))),
5898 (EXTRACT_SUBREG V128:$Rn, dsub)>;
5900 def : Pat<(v8i8 (extract_subvector (v16i8 FPR128:$Rn), (i64 1))),
5901 (EXTRACT_SUBREG (DUPv2i64lane FPR128:$Rn, 1), dsub)>;
5902 def : Pat<(v4i16 (extract_subvector (v8i16 FPR128:$Rn), (i64 1))),
5903 (EXTRACT_SUBREG (DUPv2i64lane FPR128:$Rn, 1), dsub)>;
5904 def : Pat<(v2i32 (extract_subvector (v4i32 FPR128:$Rn), (i64 1))),
5905 (EXTRACT_SUBREG (DUPv2i64lane FPR128:$Rn, 1), dsub)>;
5906 def : Pat<(v1i64 (extract_subvector (v2i64 FPR128:$Rn), (i64 1))),
5907 (EXTRACT_SUBREG (DUPv2i64lane FPR128:$Rn, 1), dsub)>;
5928 def : Pat<(i64 (add (vector_extract (v2i64 FPR128:$Rn), (i64 0)),
5929 (vector_extract (v2i64 FPR128:$Rn), (i64 1)))),
5930 (i64 (ADDPv2i64p (v2i64 FPR128:$Rn)))>;
5931 def : Pat<(f64 (fadd (vector_extract (v2f64 FPR128:$Rn), (i64 0)),
5932 (vector_extract (v2f64 FPR128:$Rn), (i64 1)))),
5933 (f64 (FADDPv2i64p (v2f64 FPR128:$Rn)))>;
5937 def : Pat<(fadd (vector_extract (v4f32 FPR128:$Rn), (i64 0)),
5938 (vector_extract (v4f32 FPR128:$Rn), (i64 1))),
5939 (f32 (FADDPv2i32p (EXTRACT_SUBREG FPR128:$Rn, dsub)))>;
5942 def : Pat<(i64 (int_aarch64_neon_sshl (i64 FPR64:$Rn), (i64 FPR64:$Rm))),
5943 (SSHLv1i64 FPR64:$Rn, FPR64:$Rm)>;
5944 def : Pat<(i64 (int_aarch64_neon_ushl (i64 FPR64:$Rn), (i64 FPR64:$Rm))),
5945 (USHLv1i64 FPR64:$Rn, FPR64:$Rm)>;
5946 def : Pat<(i64 (int_aarch64_neon_srshl (i64 FPR64:$Rn), (i64 FPR64:$Rm))),
5947 (SRSHLv1i64 FPR64:$Rn, FPR64:$Rm)>;
5948 def : Pat<(i64 (int_aarch64_neon_urshl (i64 FPR64:$Rn), (i64 FPR64:$Rm))),
5949 (URSHLv1i64 FPR64:$Rn, FPR64:$Rm)>;
5958 (am_indexed7s64 GPR64sp:$Rn, simm7s8:$offset)),
5961 GPR64sp:$Rn, simm7s8:$offset)>;
5970 (am_indexed7s32 GPR64sp:$Rn, simm7s4:$offset)),
5973 GPR64sp:$Rn, simm7s4:$offset)>;
5983 (am_indexed7s32 GPR64sp:$Rn, simm7s4:$offset)),
5986 GPR64sp:$Rn, simm7s4:$offset)>;