• Home
  • Raw
  • Download

Lines Matching refs:Pat

372 def : Pat<(AArch64LOADgot tglobaltlsaddr:$addr),
375 def : Pat<(AArch64LOADgot texternalsym:$addr),
378 def : Pat<(AArch64LOADgot tconstpool:$addr),
424 def : Pat<(AArch64threadpointer), (MRS 0xde82)>;
428 def : Pat<(readcyclecounter), (MRS 0xdce8)>;
548 def : Pat<(i64 i64imm_32bit:$src),
563 def : Pat<(f32 fpimm:$in),
565 def : Pat<(f64 fpimm:$in),
571 def : Pat<(AArch64WrapperLarge tglobaladdr:$g3, tglobaladdr:$g2,
578 def : Pat<(AArch64WrapperLarge tblockaddress:$g3, tblockaddress:$g2,
585 def : Pat<(AArch64WrapperLarge tconstpool:$g3, tconstpool:$g2,
592 def : Pat<(AArch64WrapperLarge tjumptable:$g3, tjumptable:$g2,
630 def : Pat<(sub GPR32sp:$Rn, addsub_shifted_imm32:$imm),
632 def : Pat<(sub GPR64sp:$Rn, addsub_shifted_imm64:$imm),
634 def : Pat<(sub GPR32:$Rn, GPR32:$Rm),
636 def : Pat<(sub GPR64:$Rn, GPR64:$Rm),
638 def : Pat<(sub GPR32:$Rn, arith_shifted_reg32:$Rm),
640 def : Pat<(sub GPR64:$Rn, arith_shifted_reg64:$Rm),
643 def : Pat<(sub GPR32sp:$R2, arith_extended_reg32<i32>:$R3),
645 def : Pat<(sub GPR64sp:$R2, arith_extended_reg32to64<i64>:$R3),
653 def : Pat<(add GPR32:$Rn, neg_addsub_shifted_imm32:$imm),
655 def : Pat<(add GPR64:$Rn, neg_addsub_shifted_imm64:$imm),
657 def : Pat<(sub GPR32:$Rn, neg_addsub_shifted_imm32:$imm),
659 def : Pat<(sub GPR64:$Rn, neg_addsub_shifted_imm64:$imm),
667 def : Pat<(AArch64add_flag GPR32:$Rn, neg_addsub_shifted_imm32:$imm),
669 def : Pat<(AArch64add_flag GPR64:$Rn, neg_addsub_shifted_imm64:$imm),
671 def : Pat<(AArch64sub_flag GPR32:$Rn, neg_addsub_shifted_imm32:$imm),
673 def : Pat<(AArch64sub_flag GPR64:$Rn, neg_addsub_shifted_imm64:$imm),
696 def : Pat<(int_aarch64_udiv GPR32:$Rn, GPR32:$Rm), (UDIVWr $Rn, $Rm)>;
697 def : Pat<(int_aarch64_udiv GPR64:$Rn, GPR64:$Rm), (UDIVXr $Rn, $Rm)>;
698 def : Pat<(int_aarch64_sdiv GPR32:$Rn, GPR32:$Rm), (SDIVWr $Rn, $Rm)>;
699 def : Pat<(int_aarch64_sdiv GPR64:$Rn, GPR64:$Rm), (SDIVXr $Rn, $Rm)>;
721 def : Pat<(i32 (mul GPR32:$Rn, GPR32:$Rm)),
723 def : Pat<(i64 (mul GPR64:$Rn, GPR64:$Rm)),
726 def : Pat<(i32 (ineg (mul GPR32:$Rn, GPR32:$Rm))),
728 def : Pat<(i64 (ineg (mul GPR64:$Rn, GPR64:$Rm))),
730 def : Pat<(i32 (mul (ineg GPR32:$Rn), GPR32:$Rm)),
732 def : Pat<(i64 (mul (ineg GPR64:$Rn), GPR64:$Rm)),
742 def : Pat<(i64 (mul (sext GPR32:$Rn), (sext GPR32:$Rm))),
744 def : Pat<(i64 (mul (zext GPR32:$Rn), (zext GPR32:$Rm))),
747 def : Pat<(i64 (ineg (mul (sext GPR32:$Rn), (sext GPR32:$Rm)))),
749 def : Pat<(i64 (ineg (mul (zext GPR32:$Rn), (zext GPR32:$Rm)))),
752 def : Pat<(i64 (mul (sext GPR32:$Rn), (s64imm_32bit:$C))),
754 def : Pat<(i64 (mul (zext GPR32:$Rn), (i64imm_32bit:$C))),
756 def : Pat<(i64 (mul (sext_inreg GPR64:$Rn, i32), (s64imm_32bit:$C))),
760 def : Pat<(i64 (ineg (mul (sext GPR32:$Rn), (s64imm_32bit:$C)))),
762 def : Pat<(i64 (ineg (mul (zext GPR32:$Rn), (i64imm_32bit:$C)))),
764 def : Pat<(i64 (ineg (mul (sext_inreg GPR64:$Rn, i32), (s64imm_32bit:$C)))),
768 def : Pat<(i64 (add (mul (sext GPR32:$Rn), (s64imm_32bit:$C)), GPR64:$Ra)),
770 def : Pat<(i64 (add (mul (zext GPR32:$Rn), (i64imm_32bit:$C)), GPR64:$Ra)),
772 def : Pat<(i64 (add (mul (sext_inreg GPR64:$Rn, i32), (s64imm_32bit:$C)),
777 def : Pat<(i64 (sub GPR64:$Ra, (mul (sext GPR32:$Rn), (s64imm_32bit:$C)))),
779 def : Pat<(i64 (sub GPR64:$Ra, (mul (zext GPR32:$Rn), (i64imm_32bit:$C)))),
781 def : Pat<(i64 (sub GPR64:$Ra, (mul (sext_inreg GPR64:$Rn, i32),
940 def : Pat<(not GPR32:$Wm), (ORNWrr WZR, GPR32:$Wm)>;
941 def : Pat<(not GPR64:$Xm), (ORNXrr XZR, GPR64:$Xm)>;
952 def : Pat<(int_aarch64_rbit GPR32:$Rn), (RBITWr $Rn)>;
953 def : Pat<(int_aarch64_rbit GPR64:$Rn), (RBITXr $Rn)>;
959 def : Pat<(cttz GPR32:$Rn),
961 def : Pat<(cttz GPR64:$Rn),
963 def : Pat<(ctlz (or (shl (xor (sra GPR32:$Rn, (i64 31)), GPR32:$Rn), (i64 1)),
966 def : Pat<(ctlz (or (shl (xor (sra GPR64:$Rn, (i64 63)), GPR64:$Rn), (i64 1)),
982 def : Pat<(bswap (rotr GPR32:$Rn, (i64 16))), (REV16Wr GPR32:$Rn)>;
983 def : Pat<(bswap (rotr GPR64:$Rn, (i64 32))), (REV32Xr GPR64:$Rn)>;
995 def : Pat<(rotr GPR32:$Rn, (i64 imm0_31:$imm)),
997 def : Pat<(rotr GPR64:$Rn, (i64 imm0_63:$imm)),
1064 def : Pat<(shl GPR32:$Rn, (i64 imm0_31:$imm)),
1067 def : Pat<(shl GPR64:$Rn, (i64 imm0_63:$imm)),
1072 def : Pat<(sra GPR32:$Rn, (i64 imm0_31:$imm)),
1074 def : Pat<(sra GPR64:$Rn, (i64 imm0_63:$imm)),
1088 def : Pat<(srl GPR32:$Rn, (i64 imm0_31:$imm)),
1090 def : Pat<(srl GPR64:$Rn, (i64 imm0_63:$imm)),
1119 def : Pat<(AArch64csinv GPR32:$tval, GPR32:$fval, (i32 imm:$cc), NZCV),
1121 def : Pat<(AArch64csinv GPR64:$tval, GPR64:$fval, (i32 imm:$cc), NZCV),
1123 def : Pat<(AArch64csneg GPR32:$tval, GPR32:$fval, (i32 imm:$cc), NZCV),
1125 def : Pat<(AArch64csneg GPR64:$tval, GPR64:$fval, (i32 imm:$cc), NZCV),
1127 def : Pat<(AArch64csinc GPR32:$tval, GPR32:$fval, (i32 imm:$cc), NZCV),
1129 def : Pat<(AArch64csinc GPR64:$tval, GPR64:$fval, (i32 imm:$cc), NZCV),
1132 def : Pat<(AArch64csel (i32 0), (i32 1), (i32 imm:$cc), NZCV),
1134 def : Pat<(AArch64csel (i64 0), (i64 1), (i32 imm:$cc), NZCV),
1136 def : Pat<(AArch64csel (i32 0), (i32 -1), (i32 imm:$cc), NZCV),
1138 def : Pat<(AArch64csel (i64 0), (i64 -1), (i32 imm:$cc), NZCV),
1140 def : Pat<(AArch64csel GPR32:$tval, (i32 -1), (i32 imm:$cc), NZCV),
1142 def : Pat<(AArch64csel GPR64:$tval, (i64 -1), (i32 imm:$cc), NZCV),
1144 def : Pat<(AArch64csel (i32 -1), GPR32:$fval, (i32 imm:$cc), NZCV),
1146 def : Pat<(AArch64csel (i64 -1), GPR64:$fval, (i32 imm:$cc), NZCV),
1190 def : Pat<(AArch64adrp tconstpool:$cp), (ADRP tconstpool:$cp)>;
1191 def : Pat<(AArch64adrp tblockaddress:$cp), (ADRP tblockaddress:$cp)>;
1240 def : Pat<(AArch64tlsdesc_callseq texternalsym:$sym),
1270 def : Pat<(AArch64call texternalsym:$func), (BL texternalsym:$func)>;
1367 def : Pat<(VecTy (scalar_to_vector (ScalTy
1373 def : Pat<(VecTy (scalar_to_vector (ScalTy
1401 def : Pat <(v1i64 (scalar_to_vector (i64
1406 def : Pat <(v1i64 (scalar_to_vector (i64
1416 def : Pat<(VecTy (load (ro.Wpat GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$extend))),
1419 def : Pat<(VecTy (load (ro.Xpat GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$extend))),
1452 def : Pat<(i64 (loadop (ro.Wpat GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$extend))),
1457 def : Pat<(i64 (loadop (ro.Xpat GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$extend))),
1484 def : Pat<(i32 (loadop (ro.Wpat GPR64sp:$Rn, GPR32:$Rm, ro.Wext:$extend))),
1487 def : Pat<(i32 (loadop (ro.Xpat GPR64sp:$Rn, GPR64:$Rm, ro.Xext:$extend))),
1531 def : Pat <(v8i8 (scalar_to_vector (i32
1535 def : Pat <(v16i8 (scalar_to_vector (i32
1539 def : Pat <(v4i16 (scalar_to_vector (i32
1543 def : Pat <(v8i16 (scalar_to_vector (i32
1547 def : Pat <(v2i32 (scalar_to_vector (i32
1551 def : Pat <(v4i32 (scalar_to_vector (i32
1555 def : Pat <(v1i64 (scalar_to_vector (i64
1558 def : Pat <(v2i64 (scalar_to_vector (i64
1566 def : Pat<(v2f32 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))),
1568 def : Pat<(v8i8 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))),
1570 def : Pat<(v4i16 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))),
1572 def : Pat<(v2i32 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))),
1574 def : Pat<(v4f16 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))),
1577 def : Pat<(v1f64 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))),
1579 def : Pat<(v1i64 (load (am_indexed64 GPR64sp:$Rn, uimm12s8:$offset))),
1585 def : Pat<(v4f32 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset))),
1587 def : Pat<(v2f64 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset))),
1589 def : Pat<(v16i8 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset))),
1591 def : Pat<(v8i16 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset))),
1593 def : Pat<(v4i32 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset))),
1595 def : Pat<(v2i64 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset))),
1597 def : Pat<(v8f16 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset))),
1600 def : Pat<(f128 (load (am_indexed128 GPR64sp:$Rn, uimm12s16:$offset))),
1612 def : Pat<(i64 (zextloadi8 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))),
1614 def : Pat<(i64 (zextloadi16 (am_indexed16 GPR64sp:$Rn, uimm12s2:$offset))),
1618 def : Pat<(i32 (zextloadi1 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))),
1620 def : Pat<(i64 (zextloadi1 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))),
1624 def : Pat<(i32 (extloadi16 (am_indexed16 GPR64sp:$Rn, uimm12s2:$offset))),
1626 def : Pat<(i32 (extloadi8 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))),
1628 def : Pat<(i32 (extloadi1 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))),
1630 def : Pat<(i64 (extloadi32 (am_indexed32 GPR64sp:$Rn, uimm12s4:$offset))),
1632 def : Pat<(i64 (extloadi16 (am_indexed16 GPR64sp:$Rn, uimm12s2:$offset))),
1634 def : Pat<(i64 (extloadi8 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))),
1636 def : Pat<(i64 (extloadi1 (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset))),
1666 def : Pat<(i64 (zextloadi32 (am_indexed32 GPR64sp:$Rn, uimm12s4:$offset))),
1727 def : Pat<(v2f32 (load (am_unscaled64 GPR64sp:$Rn, simm9:$offset))),
1729 def : Pat<(v2i32 (load (am_unscaled64 GPR64sp:$Rn, simm9:$offset))),
1731 def : Pat<(v4i16 (load (am_unscaled64 GPR64sp:$Rn, simm9:$offset))),
1733 def : Pat<(v8i8 (load (am_unscaled64 GPR64sp:$Rn, simm9:$offset))),
1735 def : Pat<(v4f16 (load (am_unscaled64 GPR64sp:$Rn, simm9:$offset))),
1738 def : Pat<(v1f64 (load (am_unscaled64 GPR64sp:$Rn, simm9:$offset))),
1740 def : Pat<(v1i64 (load (am_unscaled64 GPR64sp:$Rn, simm9:$offset))),
1745 def : Pat<(v2f64 (load (am_unscaled128 GPR64sp:$Rn, simm9:$offset))),
1747 def : Pat<(v2i64 (load (am_unscaled128 GPR64sp:$Rn, simm9:$offset))),
1749 def : Pat<(v4f32 (load (am_unscaled128 GPR64sp:$Rn, simm9:$offset))),
1751 def : Pat<(v4i32 (load (am_unscaled128 GPR64sp:$Rn, simm9:$offset))),
1753 def : Pat<(v8i16 (load (am_unscaled128 GPR64sp:$Rn, simm9:$offset))),
1755 def : Pat<(v16i8 (load (am_unscaled128 GPR64sp:$Rn, simm9:$offset))),
1757 def : Pat<(v8f16 (load (am_unscaled128 GPR64sp:$Rn, simm9:$offset))),
1762 def : Pat<(i32 (extloadi16 (am_unscaled16 GPR64sp:$Rn, simm9:$offset))),
1764 def : Pat<(i32 (extloadi8 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1766 def : Pat<(i32 (extloadi1 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1768 def : Pat<(i64 (extloadi32 (am_unscaled32 GPR64sp:$Rn, simm9:$offset))),
1770 def : Pat<(i64 (extloadi16 (am_unscaled16 GPR64sp:$Rn, simm9:$offset))),
1772 def : Pat<(i64 (extloadi8 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1774 def : Pat<(i64 (extloadi1 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1777 def : Pat<(i32 (zextloadi16 (am_unscaled16 GPR64sp:$Rn, simm9:$offset))),
1779 def : Pat<(i32 (zextloadi8 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1781 def : Pat<(i32 (zextloadi1 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1783 def : Pat<(i64 (zextloadi32 (am_unscaled32 GPR64sp:$Rn, simm9:$offset))),
1785 def : Pat<(i64 (zextloadi16 (am_unscaled16 GPR64sp:$Rn, simm9:$offset))),
1787 def : Pat<(i64 (zextloadi8 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1789 def : Pat<(i64 (zextloadi1 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1844 def : Pat<(i64 (zextloadi8 (am_unscaled8 GPR64sp:$Rn, simm9:$offset))),
1846 def : Pat<(i64 (zextloadi16 (am_unscaled16 GPR64sp:$Rn, simm9:$offset))),
2018 def : Pat<(storeop GPR64:$Rt,
2023 def : Pat<(storeop GPR64:$Rt,
2038 def : Pat<(store (VecTy FPR:$Rt),
2042 def : Pat<(store (VecTy FPR:$Rt),
2080 def : Pat<(storeop (STy (vector_extract (VecTy VecListOne128:$Vt), 0)),
2085 def : Pat<(storeop (STy (vector_extract (VecTy VecListOne128:$Vt), 0)),
2136 def : Pat<(store (v2f32 FPR64:$Rt),
2139 def : Pat<(store (v8i8 FPR64:$Rt),
2142 def : Pat<(store (v4i16 FPR64:$Rt),
2145 def : Pat<(store (v2i32 FPR64:$Rt),
2148 def : Pat<(store (v4f16 FPR64:$Rt),
2152 def : Pat<(store (v1f64 FPR64:$Rt),
2155 def : Pat<(store (v1i64 FPR64:$Rt),
2162 def : Pat<(store (v4f32 FPR128:$Rt),
2165 def : Pat<(store (v2f64 FPR128:$Rt),
2168 def : Pat<(store (v16i8 FPR128:$Rt),
2171 def : Pat<(store (v8i16 FPR128:$Rt),
2174 def : Pat<(store (v4i32 FPR128:$Rt),
2177 def : Pat<(store (v2i64 FPR128:$Rt),
2180 def : Pat<(store (v8f16 FPR128:$Rt),
2184 def : Pat<(store (f128 FPR128:$Rt),
2189 def : Pat<(truncstorei32 GPR64:$Rt,
2192 def : Pat<(truncstorei16 GPR64:$Rt,
2195 def : Pat<(truncstorei8 GPR64:$Rt, (am_indexed8 GPR64sp:$Rn, uimm12s1:$offset)),
2233 def : Pat<(store (v2f32 FPR64:$Rt),
2236 def : Pat<(store (v8i8 FPR64:$Rt),
2239 def : Pat<(store (v4i16 FPR64:$Rt),
2242 def : Pat<(store (v2i32 FPR64:$Rt),
2245 def : Pat<(store (v4f16 FPR64:$Rt),
2249 def : Pat<(store (v1f64 FPR64:$Rt), (am_unscaled64 GPR64sp:$Rn, simm9:$offset)),
2251 def : Pat<(store (v1i64 FPR64:$Rt), (am_unscaled64 GPR64sp:$Rn, simm9:$offset)),
2257 def : Pat<(store (v4f32 FPR128:$Rt),
2260 def : Pat<(store (v2f64 FPR128:$Rt),
2263 def : Pat<(store (v16i8 FPR128:$Rt),
2266 def : Pat<(store (v8i16 FPR128:$Rt),
2269 def : Pat<(store (v4i32 FPR128:$Rt),
2272 def : Pat<(store (v2i64 FPR128:$Rt),
2275 def : Pat<(store (v2f64 FPR128:$Rt),
2278 def : Pat<(store (v8f16 FPR128:$Rt),
2284 def : Pat<(truncstorei32 GPR64:$Rt, (am_unscaled32 GPR64sp:$Rn, simm9:$offset)),
2286 def : Pat<(truncstorei16 GPR64:$Rt, (am_unscaled16 GPR64sp:$Rn, simm9:$offset)),
2288 def : Pat<(truncstorei8 GPR64:$Rt, (am_unscaled8 GPR64sp:$Rn, simm9:$offset)),
2335 def : Pat<(pre_truncsti32 GPR64:$Rt, GPR64sp:$addr, simm9:$off),
2338 def : Pat<(pre_truncsti16 GPR64:$Rt, GPR64sp:$addr, simm9:$off),
2341 def : Pat<(pre_truncsti8 GPR64:$Rt, GPR64sp:$addr, simm9:$off),
2345 def : Pat<(pre_store (v8i8 FPR64:$Rt), GPR64sp:$addr, simm9:$off),
2347 def : Pat<(pre_store (v4i16 FPR64:$Rt), GPR64sp:$addr, simm9:$off),
2349 def : Pat<(pre_store (v2i32 FPR64:$Rt), GPR64sp:$addr, simm9:$off),
2351 def : Pat<(pre_store (v2f32 FPR64:$Rt), GPR64sp:$addr, simm9:$off),
2353 def : Pat<(pre_store (v1i64 FPR64:$Rt), GPR64sp:$addr, simm9:$off),
2355 def : Pat<(pre_store (v1f64 FPR64:$Rt), GPR64sp:$addr, simm9:$off),
2357 def : Pat<(pre_store (v4f16 FPR64:$Rt), GPR64sp:$addr, simm9:$off),
2360 def : Pat<(pre_store (v16i8 FPR128:$Rt), GPR64sp:$addr, simm9:$off),
2362 def : Pat<(pre_store (v8i16 FPR128:$Rt), GPR64sp:$addr, simm9:$off),
2364 def : Pat<(pre_store (v4i32 FPR128:$Rt), GPR64sp:$addr, simm9:$off),
2366 def : Pat<(pre_store (v4f32 FPR128:$Rt), GPR64sp:$addr, simm9:$off),
2368 def : Pat<(pre_store (v2i64 FPR128:$Rt), GPR64sp:$addr, simm9:$off),
2370 def : Pat<(pre_store (v2f64 FPR128:$Rt), GPR64sp:$addr, simm9:$off),
2372 def : Pat<(pre_store (v8f16 FPR128:$Rt), GPR64sp:$addr, simm9:$off),
2389 def : Pat<(post_truncsti32 GPR64:$Rt, GPR64sp:$addr, simm9:$off),
2392 def : Pat<(post_truncsti16 GPR64:$Rt, GPR64sp:$addr, simm9:$off),
2395 def : Pat<(post_truncsti8 GPR64:$Rt, GPR64sp:$addr, simm9:$off),
2399 def : Pat<(post_store (v8i8 FPR64:$Rt), GPR64sp:$addr, simm9:$off),
2401 def : Pat<(post_store (v4i16 FPR64:$Rt), GPR64sp:$addr, simm9:$off),
2403 def : Pat<(post_store (v2i32 FPR64:$Rt), GPR64sp:$addr, simm9:$off),
2405 def : Pat<(post_store (v2f32 FPR64:$Rt), GPR64sp:$addr, simm9:$off),
2407 def : Pat<(post_store (v1i64 FPR64:$Rt), GPR64sp:$addr, simm9:$off),
2409 def : Pat<(post_store (v1f64 FPR64:$Rt), GPR64sp:$addr, simm9:$off),
2411 def : Pat<(post_store (v4f16 FPR64:$Rt), GPR64sp:$addr, simm9:$off),
2414 def : Pat<(post_store (v16i8 FPR128:$Rt), GPR64sp:$addr, simm9:$off),
2416 def : Pat<(post_store (v8i16 FPR128:$Rt), GPR64sp:$addr, simm9:$off),
2418 def : Pat<(post_store (v4i32 FPR128:$Rt), GPR64sp:$addr, simm9:$off),
2420 def : Pat<(post_store (v4f32 FPR128:$Rt), GPR64sp:$addr, simm9:$off),
2422 def : Pat<(post_store (v2i64 FPR128:$Rt), GPR64sp:$addr, simm9:$off),
2424 def : Pat<(post_store (v2f64 FPR128:$Rt), GPR64sp:$addr, simm9:$off),
2426 def : Pat<(post_store (v8f16 FPR128:$Rt), GPR64sp:$addr, simm9:$off),
2507 def : Pat<(i32 (round f16:$Rn)), (!cast<Instruction>(INST # UWHr) $Rn)>;
2508 def : Pat<(i64 (round f16:$Rn)), (!cast<Instruction>(INST # UXHr) $Rn)>;
2509 def : Pat<(i32 (round f32:$Rn)), (!cast<Instruction>(INST # UWSr) $Rn)>;
2510 def : Pat<(i64 (round f32:$Rn)), (!cast<Instruction>(INST # UXSr) $Rn)>;
2511 def : Pat<(i32 (round f64:$Rn)), (!cast<Instruction>(INST # UWDr) $Rn)>;
2512 def : Pat<(i64 (round f64:$Rn)), (!cast<Instruction>(INST # UXDr) $Rn)>;
2514 def : Pat<(i32 (round (fmul f16:$Rn, fixedpoint_f16_i32:$scale))),
2516 def : Pat<(i64 (round (fmul f16:$Rn, fixedpoint_f16_i64:$scale))),
2518 def : Pat<(i32 (round (fmul f32:$Rn, fixedpoint_f32_i32:$scale))),
2520 def : Pat<(i64 (round (fmul f32:$Rn, fixedpoint_f32_i64:$scale))),
2522 def : Pat<(i32 (round (fmul f64:$Rn, fixedpoint_f64_i32:$scale))),
2524 def : Pat<(i64 (round (fmul f64:$Rn, fixedpoint_f64_i64:$scale))),
2532 def : Pat<(i32 (to_int (round f32:$Rn))),
2534 def : Pat<(i64 (to_int (round f32:$Rn))),
2536 def : Pat<(i32 (to_int (round f64:$Rn))),
2538 def : Pat<(i64 (to_int (round f64:$Rn))),
2591 def : Pat<(v1f64 (int_aarch64_neon_frintn (v1f64 FPR64:$Rn))),
2619 def : Pat<(v1f64 (fmaxnan (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
2621 def : Pat<(v1f64 (fminnan (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
2623 def : Pat<(v1f64 (fmaxnum (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
2625 def : Pat<(v1f64 (fminnum (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
2645 def : Pat<(f32 (fma (fneg FPR32:$Rn), FPR32:$Rm, FPR32:$Ra)),
2648 def : Pat<(f64 (fma (fneg FPR64:$Rn), FPR64:$Rm, FPR64:$Ra)),
2653 def : Pat<(f32 (fma (fneg FPR32:$Rn), FPR32:$Rm, (fneg FPR32:$Ra))),
2656 def : Pat<(f64 (fma (fneg FPR64:$Rn), FPR64:$Rm, (fneg FPR64:$Ra))),
2659 def : Pat<(f32 (fma FPR32:$Rn, (fneg FPR32:$Rm), (fneg FPR32:$Ra))),
2662 def : Pat<(f64 (fma FPR64:$Rn, (fneg FPR64:$Rm), (fneg FPR64:$Ra))),
2714 def : Pat<(xor (v8i16 (AArch64vashr v8i16:$src, (i32 15))),
2719 def : Pat<(xor (v8i16 (AArch64vashr v8i16:$src, (i32 15))),
2724 def : Pat<(xor (v4i32 (AArch64vashr v4i32:$src, (i32 31))),
2729 def : Pat<(xor (v4i32 (AArch64vashr v4i32:$src, (i32 31))),
2734 def : Pat<(xor (v2i64 (AArch64vashr v2i64:$src, (i32 63))),
2739 def : Pat<(xor (v2i64 (AArch64vashr v2i64:$src, (i32 63))),
2746 def : Pat<(xor (v8i8 (AArch64vashr V64:$src, (i32 7))),
2749 def : Pat<(xor (v4i16 (AArch64vashr V64:$src, (i32 15))),
2752 def : Pat<(xor (v2i32 (AArch64vashr V64:$src, (i32 31))),
2755 def : Pat<(xor (v16i8 (AArch64vashr V128:$src, (i32 7))),
2758 def : Pat<(xor (v8i16 (AArch64vashr V128:$src, (i32 15))),
2761 def : Pat<(xor (v4i32 (AArch64vashr V128:$src, (i32 31))),
2764 def : Pat<(xor (v2i64 (AArch64vashr V128:$src, (i32 63))),
2786 def : Pat<(v4f32 (int_aarch64_neon_vcvthf2fp (v4i16 V64:$Rn))),
2788 def : Pat<(v4f32 (int_aarch64_neon_vcvthf2fp (extract_subvector (v8i16 V128:$Rn),
2791 def : Pat<(v2f64 (fextend (v2f32 V64:$Rn))), (FCVTLv2i32 V64:$Rn)>;
2792 def : Pat<(v2f64 (fextend (v2f32 (extract_subvector (v4f32 V128:$Rn),
2796 def : Pat<(v4f32 (fextend (v4f16 V64:$Rn))), (FCVTLv4i16 V64:$Rn)>;
2797 def : Pat<(v4f32 (fextend (v4f16 (extract_subvector (v8f16 V128:$Rn),
2806 def : Pat<(v4i16 (int_aarch64_neon_vcvtfp2hf (v4f32 V128:$Rn))),
2808 def : Pat<(concat_vectors V64:$Rd,
2811 def : Pat<(v2f32 (fround (v2f64 V128:$Rn))), (FCVTNv2i32 V128:$Rn)>;
2812 def : Pat<(v4f16 (fround (v4f32 V128:$Rn))), (FCVTNv4i16 V128:$Rn)>;
2813 def : Pat<(concat_vectors V64:$Rd, (v2f32 (fround (v2f64 V128:$Rn)))),
2822 def : Pat<(v4i16 (int_aarch64_neon_fcvtzs v4f16:$Rn)), (FCVTZSv4f16 $Rn)>;
2823 def : Pat<(v8i16 (int_aarch64_neon_fcvtzs v8f16:$Rn)), (FCVTZSv8f16 $Rn)>;
2824 def : Pat<(v2i32 (int_aarch64_neon_fcvtzs v2f32:$Rn)), (FCVTZSv2f32 $Rn)>;
2825 def : Pat<(v4i32 (int_aarch64_neon_fcvtzs v4f32:$Rn)), (FCVTZSv4f32 $Rn)>;
2826 def : Pat<(v2i64 (int_aarch64_neon_fcvtzs v2f64:$Rn)), (FCVTZSv2f64 $Rn)>;
2828 def : Pat<(v4i16 (int_aarch64_neon_fcvtzu v4f16:$Rn)), (FCVTZUv4f16 $Rn)>;
2829 def : Pat<(v8i16 (int_aarch64_neon_fcvtzu v8f16:$Rn)), (FCVTZUv8f16 $Rn)>;
2830 def : Pat<(v2i32 (int_aarch64_neon_fcvtzu v2f32:$Rn)), (FCVTZUv2f32 $Rn)>;
2831 def : Pat<(v4i32 (int_aarch64_neon_fcvtzu v4f32:$Rn)), (FCVTZUv4f32 $Rn)>;
2832 def : Pat<(v2i64 (int_aarch64_neon_fcvtzu v2f64:$Rn)), (FCVTZUv2f64 $Rn)>;
2854 def : Pat<(AArch64neg (v8i8 V64:$Rn)), (NEGv8i8 V64:$Rn)>;
2855 def : Pat<(AArch64neg (v16i8 V128:$Rn)), (NEGv16i8 V128:$Rn)>;
2856 def : Pat<(AArch64neg (v4i16 V64:$Rn)), (NEGv4i16 V64:$Rn)>;
2857 def : Pat<(AArch64neg (v8i16 V128:$Rn)), (NEGv8i16 V128:$Rn)>;
2858 def : Pat<(AArch64neg (v2i32 V64:$Rn)), (NEGv2i32 V64:$Rn)>;
2859 def : Pat<(AArch64neg (v4i32 V128:$Rn)), (NEGv4i32 V128:$Rn)>;
2860 def : Pat<(AArch64neg (v2i64 V128:$Rn)), (NEGv2i64 V128:$Rn)>;
2862 def : Pat<(AArch64not (v8i8 V64:$Rn)), (NOTv8i8 V64:$Rn)>;
2863 def : Pat<(AArch64not (v16i8 V128:$Rn)), (NOTv16i8 V128:$Rn)>;
2864 def : Pat<(AArch64not (v4i16 V64:$Rn)), (NOTv8i8 V64:$Rn)>;
2865 def : Pat<(AArch64not (v8i16 V128:$Rn)), (NOTv16i8 V128:$Rn)>;
2866 def : Pat<(AArch64not (v2i32 V64:$Rn)), (NOTv8i8 V64:$Rn)>;
2867 def : Pat<(AArch64not (v1i64 V64:$Rn)), (NOTv8i8 V64:$Rn)>;
2868 def : Pat<(AArch64not (v4i32 V128:$Rn)), (NOTv16i8 V128:$Rn)>;
2869 def : Pat<(AArch64not (v2i64 V128:$Rn)), (NOTv16i8 V128:$Rn)>;
2871 def : Pat<(vnot (v4i16 V64:$Rn)), (NOTv8i8 V64:$Rn)>;
2872 def : Pat<(vnot (v8i16 V128:$Rn)), (NOTv16i8 V128:$Rn)>;
2873 def : Pat<(vnot (v2i32 V64:$Rn)), (NOTv8i8 V64:$Rn)>;
2874 def : Pat<(vnot (v4i32 V128:$Rn)), (NOTv16i8 V128:$Rn)>;
2875 def : Pat<(vnot (v2i64 V128:$Rn)), (NOTv16i8 V128:$Rn)>;
2902 def : Pat<(v4f16 (AArch64rev32 V64:$Rn)), (REV32v4i16 V64:$Rn)>;
2903 def : Pat<(v4f16 (AArch64rev64 V64:$Rn)), (REV64v4i16 V64:$Rn)>;
2904 def : Pat<(v8f16 (AArch64rev32 V128:$Rn)), (REV32v8i16 V128:$Rn)>;
2905 def : Pat<(v8f16 (AArch64rev64 V128:$Rn)), (REV64v8i16 V128:$Rn)>;
2906 def : Pat<(v2f32 (AArch64rev64 V64:$Rn)), (REV64v2i32 V64:$Rn)>;
2907 def : Pat<(v4f32 (AArch64rev64 V128:$Rn)), (REV64v4i32 V128:$Rn)>;
2913 def : Pat<(AArch64vshl (v8i16 (ext (v8i8 V64:$Rn))), (i32 8)),
2915 def : Pat<(AArch64vshl (v8i16 (ext (extract_high_v16i8 V128:$Rn))), (i32 8)),
2917 def : Pat<(AArch64vshl (v4i32 (ext (v4i16 V64:$Rn))), (i32 16)),
2919 def : Pat<(AArch64vshl (v4i32 (ext (extract_high_v8i16 V128:$Rn))), (i32 16)),
2921 def : Pat<(AArch64vshl (v2i64 (ext (v2i32 V64:$Rn))), (i32 32)),
2923 def : Pat<(AArch64vshl (v2i64 (ext (extract_high_v4i32 V128:$Rn))), (i32 32)),
2970 def : Pat<(v2f32 (fma (fneg V64:$Rn), V64:$Rm, V64:$Rd)),
2973 def : Pat<(v4f32 (fma (fneg V128:$Rn), V128:$Rm, V128:$Rd)),
2976 def : Pat<(v2f64 (fma (fneg V128:$Rn), V128:$Rm, V128:$Rd)),
3043 def : Pat<(AArch64bsl (v8i8 V64:$Rd), V64:$Rn, V64:$Rm),
3045 def : Pat<(AArch64bsl (v4i16 V64:$Rd), V64:$Rn, V64:$Rm),
3047 def : Pat<(AArch64bsl (v2i32 V64:$Rd), V64:$Rn, V64:$Rm),
3049 def : Pat<(AArch64bsl (v1i64 V64:$Rd), V64:$Rn, V64:$Rm),
3052 def : Pat<(AArch64bsl (v16i8 V128:$Rd), V128:$Rn, V128:$Rm),
3054 def : Pat<(AArch64bsl (v8i16 V128:$Rd), V128:$Rn, V128:$Rm),
3056 def : Pat<(AArch64bsl (v4i32 V128:$Rd), V128:$Rn, V128:$Rm),
3058 def : Pat<(AArch64bsl (v2i64 V128:$Rd), V128:$Rn, V128:$Rm),
3251 def : Pat<(v1f64 (int_aarch64_neon_fabd (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
3281 def : Pat<(i32 (int_aarch64_neon_sqadd
3286 def : Pat<(i32 (int_aarch64_neon_sqsub
3326 def : Pat<(i64 (int_aarch64_neon_sqadd (i64 FPR64:$Rd),
3330 def : Pat<(i64 (int_aarch64_neon_sqsub (i64 FPR64:$Rd),
3378 def : Pat<(AArch64neg (v1i64 V64:$Rn)), (NEGv1i64 V64:$Rn)>;
3380 def : Pat<(v1i64 (int_aarch64_neon_fcvtas (v1f64 FPR64:$Rn))),
3382 def : Pat<(v1i64 (int_aarch64_neon_fcvtau (v1f64 FPR64:$Rn))),
3384 def : Pat<(v1i64 (int_aarch64_neon_fcvtms (v1f64 FPR64:$Rn))),
3386 def : Pat<(v1i64 (int_aarch64_neon_fcvtmu (v1f64 FPR64:$Rn))),
3388 def : Pat<(v1i64 (int_aarch64_neon_fcvtns (v1f64 FPR64:$Rn))),
3390 def : Pat<(v1i64 (int_aarch64_neon_fcvtnu (v1f64 FPR64:$Rn))),
3392 def : Pat<(v1i64 (int_aarch64_neon_fcvtps (v1f64 FPR64:$Rn))),
3394 def : Pat<(v1i64 (int_aarch64_neon_fcvtpu (v1f64 FPR64:$Rn))),
3397 def : Pat<(f32 (int_aarch64_neon_frecpe (f32 FPR32:$Rn))),
3399 def : Pat<(f64 (int_aarch64_neon_frecpe (f64 FPR64:$Rn))),
3401 def : Pat<(v1f64 (int_aarch64_neon_frecpe (v1f64 FPR64:$Rn))),
3404 def : Pat<(f32 (AArch64frecpe (f32 FPR32:$Rn))),
3406 def : Pat<(v2f32 (AArch64frecpe (v2f32 V64:$Rn))),
3408 def : Pat<(v4f32 (AArch64frecpe (v4f32 FPR128:$Rn))),
3410 def : Pat<(f64 (AArch64frecpe (f64 FPR64:$Rn))),
3412 def : Pat<(v1f64 (AArch64frecpe (v1f64 FPR64:$Rn))),
3414 def : Pat<(v2f64 (AArch64frecpe (v2f64 FPR128:$Rn))),
3417 def : Pat<(f32 (int_aarch64_neon_frecpx (f32 FPR32:$Rn))),
3419 def : Pat<(f64 (int_aarch64_neon_frecpx (f64 FPR64:$Rn))),
3422 def : Pat<(f32 (int_aarch64_neon_frsqrte (f32 FPR32:$Rn))),
3424 def : Pat<(f64 (int_aarch64_neon_frsqrte (f64 FPR64:$Rn))),
3426 def : Pat<(v1f64 (int_aarch64_neon_frsqrte (v1f64 FPR64:$Rn))),
3429 def : Pat<(f32 (AArch64frsqrte (f32 FPR32:$Rn))),
3431 def : Pat<(v2f32 (AArch64frsqrte (v2f32 V64:$Rn))),
3433 def : Pat<(v4f32 (AArch64frsqrte (v4f32 FPR128:$Rn))),
3435 def : Pat<(f64 (AArch64frsqrte (f64 FPR64:$Rn))),
3437 def : Pat<(v1f64 (AArch64frsqrte (v1f64 FPR64:$Rn))),
3439 def : Pat<(v2f64 (AArch64frsqrte (v2f64 FPR128:$Rn))),
3450 def : Pat<(DstTy (uint_to_fp (SrcTy
3457 def : Pat<(DstTy (uint_to_fp (SrcTy
3467 def : Pat <(f32 (uint_to_fp (i32
3471 def : Pat <(f32 (uint_to_fp (i32
3478 def : Pat <(f32 (uint_to_fp (i32
3482 def : Pat <(f32 (uint_to_fp (i32
3496 def : Pat <(f64 (uint_to_fp (i32
3500 def : Pat <(f64 (uint_to_fp (i32
3507 def : Pat <(f64 (uint_to_fp (i32
3511 def : Pat <(f64 (uint_to_fp (i32
3518 def : Pat <(f64 (uint_to_fp (i32
3522 def : Pat <(f64 (uint_to_fp (i32
3580 def : Pat<(v8i16 (opnode (v8i8 V64:$Rn), (v8i8 V64:$Rm))),
3582 def : Pat<(v4i32 (opnode (v4i16 V64:$Rn), (v4i16 V64:$Rm))),
3584 def : Pat<(v2i64 (opnode (v2i32 V64:$Rn), (v2i32 V64:$Rm))),
3596 def : Pat<(v8i16 (opnode (v8i16 V128:$Rd), (v8i8 V64:$Rn), (v8i8 V64:$Rm))),
3598 def : Pat<(v4i32 (opnode (v4i32 V128:$Rd), (v4i16 V64:$Rn), (v4i16 V64:$Rm))),
3600 def : Pat<(v2i64 (opnode (v2i64 V128:$Rd), (v2i32 V64:$Rn), (v2i32 V64:$Rm))),
3618 def : Pat<(int_aarch64_neon_pmull64 V64:$Rn, V64:$Rm),
3620 def : Pat<(int_aarch64_neon_pmull64 (extractelt (v2i64 V128:$Rn), (i64 1)),
3628 def : Pat<(v8i8 (trunc (v8i16 (AArch64vlshr (add V128:$Rn, V128:$Rm), (i32 8))))),
3630 def : Pat<(v4i16 (trunc (v4i32 (AArch64vlshr (add V128:$Rn, V128:$Rm),
3633 def : Pat<(v2i32 (trunc (v2i64 (AArch64vlshr (add V128:$Rn, V128:$Rm),
3636 def : Pat<(concat_vectors (v8i8 V64:$Rd),
3641 def : Pat<(concat_vectors (v4i16 V64:$Rd),
3646 def : Pat<(concat_vectors (v2i32 V64:$Rd),
3653 def : Pat<(v8i8 (trunc (v8i16 (AArch64vlshr (sub V128:$Rn, V128:$Rm), (i32 8))))),
3655 def : Pat<(v4i16 (trunc (v4i32 (AArch64vlshr (sub V128:$Rn, V128:$Rm),
3658 def : Pat<(v2i32 (trunc (v2i64 (AArch64vlshr (sub V128:$Rn, V128:$Rm),
3661 def : Pat<(concat_vectors (v8i8 V64:$Rd),
3666 def : Pat<(concat_vectors (v4i16 V64:$Rd),
3671 def : Pat<(concat_vectors (v2i32 V64:$Rd),
3683 def : Pat<(v4i16 (AArch64ext V64:$Rn, V64:$Rm, (i32 imm:$imm))),
3685 def : Pat<(v8i16 (AArch64ext V128:$Rn, V128:$Rm, (i32 imm:$imm))),
3687 def : Pat<(v2i32 (AArch64ext V64:$Rn, V64:$Rm, (i32 imm:$imm))),
3689 def : Pat<(v2f32 (AArch64ext V64:$Rn, V64:$Rm, (i32 imm:$imm))),
3691 def : Pat<(v4i32 (AArch64ext V128:$Rn, V128:$Rm, (i32 imm:$imm))),
3693 def : Pat<(v4f32 (AArch64ext V128:$Rn, V128:$Rm, (i32 imm:$imm))),
3695 def : Pat<(v2i64 (AArch64ext V128:$Rn, V128:$Rm, (i32 imm:$imm))),
3697 def : Pat<(v2f64 (AArch64ext V128:$Rn, V128:$Rm, (i32 imm:$imm))),
3699 def : Pat<(v4f16 (AArch64ext V64:$Rn, V64:$Rm, (i32 imm:$imm))),
3701 def : Pat<(v8f16 (AArch64ext V128:$Rn, V128:$Rm, (i32 imm:$imm))),
3706 def : Pat<(v8i8 (extract_subvector V128:$Rn, (i64 8))),
3708 def : Pat<(v4i16 (extract_subvector V128:$Rn, (i64 4))),
3710 def : Pat<(v2i32 (extract_subvector V128:$Rn, (i64 2))),
3712 def : Pat<(v1i64 (extract_subvector V128:$Rn, (i64 1))),
3714 def : Pat<(v4f16 (extract_subvector V128:$Rn, (i64 4))),
3716 def : Pat<(v2f32 (extract_subvector V128:$Rn, (i64 2))),
3718 def : Pat<(v1f64 (extract_subvector V128:$Rn, (i64 1))),
3740 def : Pat<(v8i8 (int_aarch64_neon_tbl1 (v16i8 VecListOne128:$Rn), (v8i8 V64:$Ri))),
3742 def : Pat<(v16i8 (int_aarch64_neon_tbl1 (v16i8 V128:$Ri), (v16i8 V128:$Rn))),
3745 def : Pat<(v8i8 (int_aarch64_neon_tbx1 (v8i8 V64:$Rd),
3748 def : Pat<(v16i8 (int_aarch64_neon_tbx1 (v16i8 V128:$Rd),
3769 def : Pat<(v2i64 (AArch64saddv V128:$Rn)),
3771 def : Pat<(v2i64 (AArch64uaddv V128:$Rn)),
3773 def : Pat<(f32 (int_aarch64_neon_faddv (v2f32 V64:$Rn))),
3775 def : Pat<(f32 (int_aarch64_neon_faddv (v4f32 V128:$Rn))),
3777 def : Pat<(f64 (int_aarch64_neon_faddv (v2f64 V128:$Rn))),
3779 def : Pat<(f32 (int_aarch64_neon_fmaxnmv (v2f32 V64:$Rn))),
3781 def : Pat<(f64 (int_aarch64_neon_fmaxnmv (v2f64 V128:$Rn))),
3783 def : Pat<(f32 (int_aarch64_neon_fmaxv (v2f32 V64:$Rn))),
3785 def : Pat<(f64 (int_aarch64_neon_fmaxv (v2f64 V128:$Rn))),
3787 def : Pat<(f32 (int_aarch64_neon_fminnmv (v2f32 V64:$Rn))),
3789 def : Pat<(f64 (int_aarch64_neon_fminnmv (v2f64 V128:$Rn))),
3791 def : Pat<(f32 (int_aarch64_neon_fminv (v2f32 V64:$Rn))),
3793 def : Pat<(f64 (int_aarch64_neon_fminv (v2f64 V128:$Rn))),
3816 def : Pat<(v2f32 (AArch64dup (f32 FPR32:$Rn))),
3820 def : Pat<(v4f32 (AArch64dup (f32 FPR32:$Rn))),
3824 def : Pat<(v2f64 (AArch64dup (f64 FPR64:$Rn))),
3828 def : Pat<(v4f16 (AArch64dup (f16 FPR16:$Rn))),
3832 def : Pat<(v8f16 (AArch64dup (f16 FPR16:$Rn))),
3837 def : Pat<(v4f16 (AArch64duplane16 (v8f16 V128:$Rn), VectorIndexH:$imm)),
3839 def : Pat<(v8f16 (AArch64duplane16 (v8f16 V128:$Rn), VectorIndexH:$imm)),
3842 def : Pat<(v2f32 (AArch64duplane32 (v4f32 V128:$Rn), VectorIndexS:$imm)),
3844 def : Pat<(v4f32 (AArch64duplane32 (v4f32 V128:$Rn), VectorIndexS:$imm)),
3846 def : Pat<(v2f64 (AArch64duplane64 (v2f64 V128:$Rn), VectorIndexD:$imm)),
3865 def : Pat<(ResVT (AArch64dup (ScalVT (vector_extract (Src128VT V128:$Rn),
3869 def : Pat<(ResVT (AArch64dup (ScalVT (vector_extract (Src64VT V64:$Rn),
3884 def : Pat<(ResVT (AArch64dup (i32 (trunc (extractelt (v2i64 V128:$Rn),
3888 def : Pat<(ResVT (AArch64dup (i32 (trunc (extractelt (v1i64 V64:$Rn),
3905 def : Pat<(sext_inreg (vector_extract (v16i8 V128:$Rn), VectorIndexB:$idx), i8),
3907 def : Pat<(sext_inreg (vector_extract (v16i8 V128:$Rn), VectorIndexB:$idx), i8),
3909 def : Pat<(sext_inreg (vector_extract (v8i16 V128:$Rn), VectorIndexH:$idx),i16),
3911 def : Pat<(sext_inreg (vector_extract (v8i16 V128:$Rn), VectorIndexH:$idx),i16),
3913 def : Pat<(sext_inreg (vector_extract (v8i16 V128:$Rn), VectorIndexH:$idx),i16),
3915 def : Pat<(sext (i32 (vector_extract (v4i32 V128:$Rn), VectorIndexS:$idx))),
3918 def : Pat<(sext_inreg (i64 (anyext (i32 (vector_extract (v16i8 V128:$Rn),
3921 def : Pat<(sext_inreg (i64 (anyext (i32 (vector_extract (v8i16 V128:$Rn),
3929 def : Pat<(and (vector_extract (v16i8 V128:$Rn), VectorIndexB:$idx),
3932 def : Pat<(and (vector_extract (v8i16 V128:$Rn), VectorIndexH:$idx),
3938 def : Pat<(v16i8 (scalar_to_vector GPR32:$Rn)),
3941 def : Pat<(v8i8 (scalar_to_vector GPR32:$Rn)),
3945 def : Pat<(v8i16 (scalar_to_vector GPR32:$Rn)),
3948 def : Pat<(v4i16 (scalar_to_vector GPR32:$Rn)),
3952 def : Pat<(v2i32 (scalar_to_vector (i32 FPR32:$Rn))),
3955 def : Pat<(v4i32 (scalar_to_vector (i32 FPR32:$Rn))),
3958 def : Pat<(v2i64 (scalar_to_vector (i64 FPR64:$Rn))),
3962 def : Pat<(v4f16 (scalar_to_vector (f16 FPR16:$Rn))),
3964 def : Pat<(v8f16 (scalar_to_vector (f16 FPR16:$Rn))),
3967 def : Pat<(v4f32 (scalar_to_vector (f32 FPR32:$Rn))),
3969 def : Pat<(v2f32 (scalar_to_vector (f32 FPR32:$Rn))),
3971 def : Pat<(v2f64 (scalar_to_vector (f64 FPR64:$Rn))),
3974 def : Pat<(v4f16 (vector_insert (v4f16 V64:$Rn),
3984 def : Pat<(v8f16 (vector_insert (v8f16 V128:$Rn),
3991 def : Pat<(v2f32 (vector_insert (v2f32 V64:$Rn),
4000 def : Pat<(v4f32 (vector_insert (v4f32 V128:$Rn),
4006 def : Pat<(v2f64 (vector_insert (v2f64 V128:$Rn),
4017 def : Pat<(v16i8 (int_aarch64_neon_vcopy_lane
4023 def : Pat<(v8i16 (int_aarch64_neon_vcopy_lane
4029 def : Pat<(v4i32 (int_aarch64_neon_vcopy_lane
4035 def : Pat<(v2i64 (int_aarch64_neon_vcopy_lane
4044 def : Pat<(VT128 (vector_insert V128:$src,
4049 def : Pat<(VT128 (vector_insert V128:$src,
4055 def : Pat<(VT64 (vector_insert V64:$src,
4062 def : Pat<(VT64 (vector_insert V64:$src,
4079 def : Pat<(vector_extract (v2f64 V128:$Rn), 0),
4081 def : Pat<(vector_extract (v4f32 V128:$Rn), 0),
4083 def : Pat<(vector_extract (v8f16 V128:$Rn), 0),
4086 def : Pat<(vector_extract (v2f64 V128:$Rn), VectorIndexD:$idx),
4088 def : Pat<(vector_extract (v4f32 V128:$Rn), VectorIndexS:$idx),
4090 def : Pat<(vector_extract (v8f16 V128:$Rn), VectorIndexH:$idx),
4097 : Pat<(DstTy (concat_vectors (SrcTy V64:$Rd), V64:$Rn)),
4111 : Pat<(DstTy (concat_vectors (SrcTy V64:$Rn), undef)),
4144 def : Pat<(v8i8 (opNode V64:$Rn)),
4147 def : Pat<(v16i8 (opNode V128:$Rn)),
4150 def : Pat<(v4i16 (opNode V64:$Rn)),
4153 def : Pat<(v8i16 (opNode V128:$Rn)),
4156 def : Pat<(v4i32 (opNode V128:$Rn)),
4162 def : Pat<(i32 (vector_extract (insert_subvector undef, (v8i8 (opNode V64:$Rn)),
4167 def : Pat<(i32 (vector_extract (v16i8 (opNode V128:$Rn)), (i64 0))),
4171 def : Pat<(i32 (vector_extract (insert_subvector undef,
4176 def : Pat<(i32 (vector_extract (v8i16 (opNode V128:$Rn)), (i64 0))),
4180 def : Pat<(i32 (vector_extract (v4i32 (opNode V128:$Rn)), (i64 0))),
4192 def : Pat<(i32 (sext_inreg (i32 (vector_extract (insert_subvector undef,
4198 def : Pat<(i32 (sext_inreg (i32 (vector_extract
4204 def : Pat<(i32 (sext_inreg (i32 (vector_extract (insert_subvector undef,
4210 def : Pat<(i32 (sext_inreg (i32 (vector_extract
4223 def : Pat<(i32 (and (i32 (vector_extract (insert_subvector undef,
4229 def : Pat<(i32 (and (i32 (vector_extract (opNode (v16i8 V128:$Rn)), (i64 0))),
4235 def : Pat<(i32 (and (i32 (vector_extract (insert_subvector undef,
4241 def : Pat<(i32 (and (i32 (vector_extract (opNode (v8i16 V128:$Rn)), (i64 0))),
4251 def : Pat<(v2i32 (AArch64saddv (v2i32 V64:$Rn))),
4256 def : Pat<(v2i32 (AArch64uaddv (v2i32 V64:$Rn))),
4260 def : Pat<(v2i32 (AArch64smaxv (v2i32 V64:$Rn))),
4264 def : Pat<(v2i32 (AArch64sminv (v2i32 V64:$Rn))),
4268 def : Pat<(v2i32 (AArch64umaxv (v2i32 V64:$Rn))),
4272 def : Pat<(v2i32 (AArch64uminv (v2i32 V64:$Rn))),
4276 def : Pat<(i32 (intOp (v8i8 V64:$Rn))),
4281 def : Pat<(i32 (intOp (v16i8 V128:$Rn))),
4287 def : Pat<(i32 (intOp (v4i16 V64:$Rn))),
4292 def : Pat<(i32 (intOp (v8i16 V128:$Rn))),
4298 def : Pat<(i64 (intOp (v4i32 V128:$Rn))),
4307 def : Pat<(i32 (intOp (v8i8 V64:$Rn))),
4312 def : Pat<(i32 (intOp (v16i8 V128:$Rn))),
4318 def : Pat<(i32 (intOp (v4i16 V64:$Rn))),
4323 def : Pat<(i32 (intOp (v8i16 V128:$Rn))),
4329 def : Pat<(i64 (intOp (v4i32 V128:$Rn))),
4340 def : Pat<(i64 (int_aarch64_neon_saddlv (v2i32 V64:$Rn))),
4346 def : Pat<(i64 (int_aarch64_neon_uaddlv (v2i32 V64:$Rn))),
4408 def : Pat<(f64 (AArch64movi_edit imm0_255:$shift)),
4411 def : Pat<(v1i64 immAllZerosV), (MOVID (i32 0))>;
4412 def : Pat<(v2i32 immAllZerosV), (MOVID (i32 0))>;
4413 def : Pat<(v4i16 immAllZerosV), (MOVID (i32 0))>;
4414 def : Pat<(v8i8 immAllZerosV), (MOVID (i32 0))>;
4416 def : Pat<(v1i64 immAllOnesV), (MOVID (i32 255))>;
4417 def : Pat<(v2i32 immAllOnesV), (MOVID (i32 255))>;
4418 def : Pat<(v4i16 immAllOnesV), (MOVID (i32 255))>;
4419 def : Pat<(v8i8 immAllOnesV), (MOVID (i32 255))>;
4431 def : Pat<(v2i64 immAllZerosV), (MOVIv2d_ns (i32 0))>;
4432 def : Pat<(v4i32 immAllZerosV), (MOVIv2d_ns (i32 0))>;
4433 def : Pat<(v8i16 immAllZerosV), (MOVIv2d_ns (i32 0))>;
4434 def : Pat<(v16i8 immAllZerosV), (MOVIv2d_ns (i32 0))>;
4436 def : Pat<(v2i64 immAllOnesV), (MOVIv2d_ns (i32 255))>;
4437 def : Pat<(v4i32 immAllOnesV), (MOVIv2d_ns (i32 255))>;
4438 def : Pat<(v8i16 immAllOnesV), (MOVIv2d_ns (i32 255))>;
4439 def : Pat<(v16i8 immAllOnesV), (MOVIv2d_ns (i32 255))>;
4441 def : Pat<(v2f64 (AArch64dup (f64 fpimm0))), (MOVIv2d_ns (i32 0))>;
4442 def : Pat<(v4f32 (AArch64dup (f32 fpimm0))), (MOVIv2d_ns (i32 0))>;
4457 def : Pat<(v2i32 (AArch64movi_shift imm0_255:$imm8, (i32 imm:$shift))),
4459 def : Pat<(v4i32 (AArch64movi_shift imm0_255:$imm8, (i32 imm:$shift))),
4461 def : Pat<(v4i16 (AArch64movi_shift imm0_255:$imm8, (i32 imm:$shift))),
4463 def : Pat<(v8i16 (AArch64movi_shift imm0_255:$imm8, (i32 imm:$shift))),
4497 def : Pat<(v2i32 (AArch64mvni_shift imm0_255:$imm8, (i32 imm:$shift))),
4499 def : Pat<(v4i32 (AArch64mvni_shift imm0_255:$imm8, (i32 imm:$shift))),
4501 def : Pat<(v4i16 (AArch64mvni_shift imm0_255:$imm8, (i32 imm:$shift))),
4503 def : Pat<(v8i16 (AArch64mvni_shift imm0_255:$imm8, (i32 imm:$shift))),
4545 def : Pat<(v2f32 (OpNode (v2f32 V64:$Rd), (v2f32 V64:$Rn),
4549 def : Pat<(v2f32 (OpNode (v2f32 V64:$Rd), (v2f32 V64:$Rn),
4558 def : Pat<(v2f32 (OpNode (v2f32 V64:$Rd), (v2f32 V64:$Rn),
4565 def : Pat<(v4f32 (OpNode (v4f32 V128:$Rd), (v4f32 V128:$Rn),
4570 def : Pat<(v4f32 (OpNode (v4f32 V128:$Rd), (v4f32 V128:$Rn),
4579 def : Pat<(v4f32 (OpNode (v4f32 V128:$Rd), (v4f32 V128:$Rn),
4586 def : Pat<(v2f64 (OpNode (v2f64 V128:$Rd), (v2f64 V128:$Rn),
4591 def : Pat<(v2f64 (OpNode (v2f64 V128:$Rd), (v2f64 V128:$Rn),
4597 def : Pat<(f32 (OpNode (f32 FPR32:$Rd), (f32 FPR32:$Rn),
4602 def : Pat<(f32 (OpNode (f32 FPR32:$Rd), (f32 FPR32:$Rn),
4611 def : Pat<(f64 (OpNode (f64 FPR64:$Rd), (f64 FPR64:$Rn),
4626 def : Pat<(v2f32 (fmul V64:$Rn, (AArch64dup (f32 FPR32:$Rm)))),
4630 def : Pat<(v4f32 (fmul V128:$Rn, (AArch64dup (f32 FPR32:$Rm)))),
4634 def : Pat<(v2f64 (fmul V128:$Rn, (AArch64dup (f64 FPR64:$Rm)))),
4670 def : Pat<(int_aarch64_neon_sqdmulls_scalar (i32 FPR32:$Rn),
4685 def : Pat<(int_aarch64_neon_vcvtfp2fxs FPR32:$Rn, vecshiftR32:$imm),
4687 def : Pat<(int_aarch64_neon_vcvtfp2fxu FPR32:$Rn, vecshiftR32:$imm),
4689 def : Pat<(i64 (int_aarch64_neon_vcvtfp2fxs (f64 FPR64:$Rn), vecshiftR64:$imm)),
4691 def : Pat<(i64 (int_aarch64_neon_vcvtfp2fxu (f64 FPR64:$Rn), vecshiftR64:$imm)),
4693 def : Pat<(v1i64 (int_aarch64_neon_vcvtfp2fxs (v1f64 FPR64:$Rn),
4696 def : Pat<(v1i64 (int_aarch64_neon_vcvtfp2fxu (v1f64 FPR64:$Rn),
4699 def : Pat<(int_aarch64_neon_vcvtfxs2fp FPR32:$Rn, vecshiftR32:$imm),
4701 def : Pat<(int_aarch64_neon_vcvtfxu2fp FPR32:$Rn, vecshiftR32:$imm),
4703 def : Pat<(f64 (int_aarch64_neon_vcvtfxs2fp (i64 FPR64:$Rn), vecshiftR64:$imm)),
4705 def : Pat<(f64 (int_aarch64_neon_vcvtfxu2fp (i64 FPR64:$Rn), vecshiftR64:$imm)),
4707 def : Pat<(v1f64 (int_aarch64_neon_vcvtfxs2fp (v1i64 FPR64:$Rn),
4710 def : Pat<(v1f64 (int_aarch64_neon_vcvtfxu2fp (v1i64 FPR64:$Rn),
4762 def : Pat<(v1i64 (int_aarch64_neon_vsli (v1i64 FPR64:$Rd), (v1i64 FPR64:$Rn),
4776 def : Pat<(v1i64 (int_aarch64_neon_vsri (v1i64 FPR64:$Rd), (v1i64 FPR64:$Rn),
4809 def : Pat<(v8i8 (trunc (AArch64vlshr (v8i16 V128:$Rn), vecshiftR16Narrow:$imm))),
4811 def : Pat<(v4i16 (trunc (AArch64vlshr (v4i32 V128:$Rn), vecshiftR32Narrow:$imm))),
4813 def : Pat<(v2i32 (trunc (AArch64vlshr (v2i64 V128:$Rn), vecshiftR64Narrow:$imm))),
4816 def : Pat<(v16i8 (concat_vectors (v8i8 V64:$Rd),
4821 def : Pat<(v8i16 (concat_vectors (v4i16 V64:$Rd),
4826 def : Pat<(v4i32 (concat_vectors (v2i32 V64:$Rd),
4834 def : Pat<(v8i16 (sext (v8i8 V64:$Rn))), (SSHLLv8i8_shift V64:$Rn, (i32 0))>;
4835 def : Pat<(v8i16 (zext (v8i8 V64:$Rn))), (USHLLv8i8_shift V64:$Rn, (i32 0))>;
4836 def : Pat<(v8i16 (anyext (v8i8 V64:$Rn))), (USHLLv8i8_shift V64:$Rn, (i32 0))>;
4837 def : Pat<(v4i32 (sext (v4i16 V64:$Rn))), (SSHLLv4i16_shift V64:$Rn, (i32 0))>;
4838 def : Pat<(v4i32 (zext (v4i16 V64:$Rn))), (USHLLv4i16_shift V64:$Rn, (i32 0))>;
4839 def : Pat<(v4i32 (anyext (v4i16 V64:$Rn))), (USHLLv4i16_shift V64:$Rn, (i32 0))>;
4840 def : Pat<(v2i64 (sext (v2i32 V64:$Rn))), (SSHLLv2i32_shift V64:$Rn, (i32 0))>;
4841 def : Pat<(v2i64 (zext (v2i32 V64:$Rn))), (USHLLv2i32_shift V64:$Rn, (i32 0))>;
4842 def : Pat<(v2i64 (anyext (v2i32 V64:$Rn))), (USHLLv2i32_shift V64:$Rn, (i32 0))>;
4844 def : Pat<(v8i16 (anyext (v8i8 (extract_subvector V128:$Rn, (i64 8)) ))),
4846 def : Pat<(v8i16 (zext (v8i8 (extract_subvector V128:$Rn, (i64 8)) ))),
4848 def : Pat<(v8i16 (sext (v8i8 (extract_subvector V128:$Rn, (i64 8)) ))),
4850 def : Pat<(v4i32 (anyext (v4i16 (extract_subvector V128:$Rn, (i64 4)) ))),
4852 def : Pat<(v4i32 (zext (v4i16 (extract_subvector V128:$Rn, (i64 4)) ))),
4854 def : Pat<(v4i32 (sext (v4i16 (extract_subvector V128:$Rn, (i64 4)) ))),
4856 def : Pat<(v2i64 (anyext (v2i32 (extract_subvector V128:$Rn, (i64 2)) ))),
4858 def : Pat<(v2i64 (zext (v2i32 (extract_subvector V128:$Rn, (i64 2)) ))),
4860 def : Pat<(v2i64 (sext (v2i32 (extract_subvector V128:$Rn, (i64 2)) ))),
4933 : Pat<(f32 (sint_to_fp (i32 (sextloadi8 addrmode)))),
4959 : Pat<(f32 (sint_to_fp (i32 (sextloadi16 addrmode)))),
4987 : Pat <(f64 (sint_to_fp (i32 (sextloadi16 addrmode)))),
5012 : Pat <(f64 (sint_to_fp (i32 (load addrmode)))),
5048 : Pat<(ty (load GPR64sp:$Rn)), (INST GPR64sp:$Rn)>;
5060 : Pat<(store ty:$Vt, GPR64sp:$Rn),
5099 def : Pat<(v8i8 (AArch64dup (i32 (extloadi8 GPR64sp:$Rn)))),
5101 def : Pat<(v16i8 (AArch64dup (i32 (extloadi8 GPR64sp:$Rn)))),
5103 def : Pat<(v4i16 (AArch64dup (i32 (extloadi16 GPR64sp:$Rn)))),
5105 def : Pat<(v8i16 (AArch64dup (i32 (extloadi16 GPR64sp:$Rn)))),
5107 def : Pat<(v2i32 (AArch64dup (i32 (load GPR64sp:$Rn)))),
5109 def : Pat<(v4i32 (AArch64dup (i32 (load GPR64sp:$Rn)))),
5111 def : Pat<(v2i64 (AArch64dup (i64 (load GPR64sp:$Rn)))),
5113 def : Pat<(v1i64 (AArch64dup (i64 (load GPR64sp:$Rn)))),
5116 def : Pat<(v2f32 (AArch64dup (f32 (load GPR64sp:$Rn)))),
5118 def : Pat<(v4f32 (AArch64dup (f32 (load GPR64sp:$Rn)))),
5120 def : Pat<(v2f64 (AArch64dup (f64 (load GPR64sp:$Rn)))),
5122 def : Pat<(v1f64 (AArch64dup (f64 (load GPR64sp:$Rn)))),
5124 def : Pat<(v4f16 (AArch64dup (f16 (load GPR64sp:$Rn)))),
5126 def : Pat<(v8f16 (AArch64dup (f16 (load GPR64sp:$Rn)))),
5131 : Pat<(vector_insert (VTy VecListOne128:$Rd),
5145 : Pat<(vector_insert (VTy VecListOne64:$Rd),
5173 : Pat<(scalar_store
5189 : Pat<(scalar_store
5204 def : Pat<(scalar_store
5210 def : Pat<(scalar_store
5229 def : Pat<(scalar_store
5234 def : Pat<(scalar_store
5309 def : Pat<(i64 (zext def32:$src)), (SUBREG_TO_REG (i64 0), GPR32:$src, sub_32)>;
5313 def : Pat<(i64 (anyext GPR32:$src)),
5318 def : Pat<(i64 (zext GPR32:$src)),
5323 def : Pat<(i64 (sext GPR32:$src)),
5325 def : Pat<(i64 (sext_inreg GPR64:$src, i32)), (SBFMXri GPR64:$src, 0, 31)>;
5326 def : Pat<(i64 (sext_inreg GPR64:$src, i16)), (SBFMXri GPR64:$src, 0, 15)>;
5327 def : Pat<(i64 (sext_inreg GPR64:$src, i8)), (SBFMXri GPR64:$src, 0, 7)>;
5328 def : Pat<(i64 (sext_inreg GPR64:$src, i1)), (SBFMXri GPR64:$src, 0, 0)>;
5329 def : Pat<(i32 (sext_inreg GPR32:$src, i16)), (SBFMWri GPR32:$src, 0, 15)>;
5330 def : Pat<(i32 (sext_inreg GPR32:$src, i8)), (SBFMWri GPR32:$src, 0, 7)>;
5331 def : Pat<(i32 (sext_inreg GPR32:$src, i1)), (SBFMWri GPR32:$src, 0, 0)>;
5333 def : Pat<(shl (sext_inreg GPR32:$Rn, i8), (i64 imm0_31:$imm)),
5336 def : Pat<(shl (sext_inreg GPR64:$Rn, i8), (i64 imm0_63:$imm)),
5340 def : Pat<(shl (sext_inreg GPR32:$Rn, i16), (i64 imm0_31:$imm)),
5343 def : Pat<(shl (sext_inreg GPR64:$Rn, i16), (i64 imm0_63:$imm)),
5347 def : Pat<(shl (i64 (sext GPR32:$Rn)), (i64 imm0_63:$imm)),
5359 def : Pat<(sra (sext_inreg GPR32:$Rn, i8), (i64 imm0_7:$imm)),
5361 def : Pat<(sra (sext_inreg GPR64:$Rn, i8), (i64 imm0_7:$imm)),
5364 def : Pat<(sra (sext_inreg GPR32:$Rn, i16), (i64 imm0_15:$imm)),
5366 def : Pat<(sra (sext_inreg GPR64:$Rn, i16), (i64 imm0_15:$imm)),
5369 def : Pat<(sra (i64 (sext GPR32:$Rn)), (i64 imm0_31:$imm)),
5375 def : Pat<(i32 (trunc GPR64sp:$src)),
5379 def : Pat<(trap), (BRK 1)>;
5428 def : Pat<(v8i8 (AArch64NvCast (v2i32 FPR64:$src))), (v8i8 FPR64:$src)>;
5429 def : Pat<(v4i16 (AArch64NvCast (v2i32 FPR64:$src))), (v4i16 FPR64:$src)>;
5430 def : Pat<(v4f16 (AArch64NvCast (v2i32 FPR64:$src))), (v4f16 FPR64:$src)>;
5431 def : Pat<(v2i32 (AArch64NvCast (v2i32 FPR64:$src))), (v2i32 FPR64:$src)>;
5432 def : Pat<(v2f32 (AArch64NvCast (v2i32 FPR64:$src))), (v2f32 FPR64:$src)>;
5433 def : Pat<(v1i64 (AArch64NvCast (v2i32 FPR64:$src))), (v1i64 FPR64:$src)>;
5435 def : Pat<(v8i8 (AArch64NvCast (v4i16 FPR64:$src))), (v8i8 FPR64:$src)>;
5436 def : Pat<(v4i16 (AArch64NvCast (v4i16 FPR64:$src))), (v4i16 FPR64:$src)>;
5437 def : Pat<(v4f16 (AArch64NvCast (v4i16 FPR64:$src))), (v4f16 FPR64:$src)>;
5438 def : Pat<(v2i32 (AArch64NvCast (v4i16 FPR64:$src))), (v2i32 FPR64:$src)>;
5439 def : Pat<(v1i64 (AArch64NvCast (v4i16 FPR64:$src))), (v1i64 FPR64:$src)>;
5441 def : Pat<(v8i8 (AArch64NvCast (v8i8 FPR64:$src))), (v8i8 FPR64:$src)>;
5442 def : Pat<(v4i16 (AArch64NvCast (v8i8 FPR64:$src))), (v4i16 FPR64:$src)>;
5443 def : Pat<(v4f16 (AArch64NvCast (v8i8 FPR64:$src))), (v4f16 FPR64:$src)>;
5444 def : Pat<(v2i32 (AArch64NvCast (v8i8 FPR64:$src))), (v2i32 FPR64:$src)>;
5445 def : Pat<(v1i64 (AArch64NvCast (v8i8 FPR64:$src))), (v1i64 FPR64:$src)>;
5447 def : Pat<(v8i8 (AArch64NvCast (f64 FPR64:$src))), (v8i8 FPR64:$src)>;
5448 def : Pat<(v4i16 (AArch64NvCast (f64 FPR64:$src))), (v4i16 FPR64:$src)>;
5449 def : Pat<(v4f16 (AArch64NvCast (f64 FPR64:$src))), (v4f16 FPR64:$src)>;
5450 def : Pat<(v2i32 (AArch64NvCast (f64 FPR64:$src))), (v2i32 FPR64:$src)>;
5451 def : Pat<(v2f32 (AArch64NvCast (f64 FPR64:$src))), (v2f32 FPR64:$src)>;
5452 def : Pat<(v1i64 (AArch64NvCast (f64 FPR64:$src))), (v1i64 FPR64:$src)>;
5453 def : Pat<(v1f64 (AArch64NvCast (f64 FPR64:$src))), (v1f64 FPR64:$src)>;
5455 def : Pat<(v8i8 (AArch64NvCast (v2f32 FPR64:$src))), (v8i8 FPR64:$src)>;
5456 def : Pat<(v4i16 (AArch64NvCast (v2f32 FPR64:$src))), (v4i16 FPR64:$src)>;
5457 def : Pat<(v2i32 (AArch64NvCast (v2f32 FPR64:$src))), (v2i32 FPR64:$src)>;
5458 def : Pat<(v2f32 (AArch64NvCast (v2f32 FPR64:$src))), (v2f32 FPR64:$src)>;
5459 def : Pat<(v1i64 (AArch64NvCast (v2f32 FPR64:$src))), (v1i64 FPR64:$src)>;
5462 def : Pat<(v16i8 (AArch64NvCast (v4i32 FPR128:$src))), (v16i8 FPR128:$src)>;
5463 def : Pat<(v8i16 (AArch64NvCast (v4i32 FPR128:$src))), (v8i16 FPR128:$src)>;
5464 def : Pat<(v8f16 (AArch64NvCast (v4i32 FPR128:$src))), (v8f16 FPR128:$src)>;
5465 def : Pat<(v4i32 (AArch64NvCast (v4i32 FPR128:$src))), (v4i32 FPR128:$src)>;
5466 def : Pat<(v4f32 (AArch64NvCast (v4i32 FPR128:$src))), (v4f32 FPR128:$src)>;
5467 def : Pat<(v2i64 (AArch64NvCast (v4i32 FPR128:$src))), (v2i64 FPR128:$src)>;
5468 def : Pat<(v2f64 (AArch64NvCast (v4i32 FPR128:$src))), (v2f64 FPR128:$src)>;
5470 def : Pat<(v16i8 (AArch64NvCast (v8i16 FPR128:$src))), (v16i8 FPR128:$src)>;
5471 def : Pat<(v8i16 (AArch64NvCast (v8i16 FPR128:$src))), (v8i16 FPR128:$src)>;
5472 def : Pat<(v8f16 (AArch64NvCast (v8i16 FPR128:$src))), (v8f16 FPR128:$src)>;
5473 def : Pat<(v4i32 (AArch64NvCast (v8i16 FPR128:$src))), (v4i32 FPR128:$src)>;
5474 def : Pat<(v2i64 (AArch64NvCast (v8i16 FPR128:$src))), (v2i64 FPR128:$src)>;
5475 def : Pat<(v4f32 (AArch64NvCast (v8i16 FPR128:$src))), (v4f32 FPR128:$src)>;
5476 def : Pat<(v2f64 (AArch64NvCast (v8i16 FPR128:$src))), (v2f64 FPR128:$src)>;
5478 def : Pat<(v16i8 (AArch64NvCast (v16i8 FPR128:$src))), (v16i8 FPR128:$src)>;
5479 def : Pat<(v8i16 (AArch64NvCast (v16i8 FPR128:$src))), (v8i16 FPR128:$src)>;
5480 def : Pat<(v8f16 (AArch64NvCast (v16i8 FPR128:$src))), (v8f16 FPR128:$src)>;
5481 def : Pat<(v4i32 (AArch64NvCast (v16i8 FPR128:$src))), (v4i32 FPR128:$src)>;
5482 def : Pat<(v2i64 (AArch64NvCast (v16i8 FPR128:$src))), (v2i64 FPR128:$src)>;
5483 def : Pat<(v4f32 (AArch64NvCast (v16i8 FPR128:$src))), (v4f32 FPR128:$src)>;
5484 def : Pat<(v2f64 (AArch64NvCast (v16i8 FPR128:$src))), (v2f64 FPR128:$src)>;
5486 def : Pat<(v16i8 (AArch64NvCast (v2i64 FPR128:$src))), (v16i8 FPR128:$src)>;
5487 def : Pat<(v8i16 (AArch64NvCast (v2i64 FPR128:$src))), (v8i16 FPR128:$src)>;
5488 def : Pat<(v8f16 (AArch64NvCast (v2i64 FPR128:$src))), (v8f16 FPR128:$src)>;
5489 def : Pat<(v4i32 (AArch64NvCast (v2i64 FPR128:$src))), (v4i32 FPR128:$src)>;
5490 def : Pat<(v2i64 (AArch64NvCast (v2i64 FPR128:$src))), (v2i64 FPR128:$src)>;
5491 def : Pat<(v4f32 (AArch64NvCast (v2i64 FPR128:$src))), (v4f32 FPR128:$src)>;
5492 def : Pat<(v2f64 (AArch64NvCast (v2i64 FPR128:$src))), (v2f64 FPR128:$src)>;
5494 def : Pat<(v16i8 (AArch64NvCast (v4f32 FPR128:$src))), (v16i8 FPR128:$src)>;
5495 def : Pat<(v8i16 (AArch64NvCast (v4f32 FPR128:$src))), (v8i16 FPR128:$src)>;
5496 def : Pat<(v4i32 (AArch64NvCast (v4f32 FPR128:$src))), (v4i32 FPR128:$src)>;
5497 def : Pat<(v4f32 (AArch64NvCast (v4f32 FPR128:$src))), (v4f32 FPR128:$src)>;
5498 def : Pat<(v2i64 (AArch64NvCast (v4f32 FPR128:$src))), (v2i64 FPR128:$src)>;
5499 def : Pat<(v8f16 (AArch64NvCast (v4f32 FPR128:$src))), (v8f16 FPR128:$src)>;
5500 def : Pat<(v2f64 (AArch64NvCast (v4f32 FPR128:$src))), (v2f64 FPR128:$src)>;
5502 def : Pat<(v16i8 (AArch64NvCast (v2f64 FPR128:$src))), (v16i8 FPR128:$src)>;
5503 def : Pat<(v8i16 (AArch64NvCast (v2f64 FPR128:$src))), (v8i16 FPR128:$src)>;
5504 def : Pat<(v4i32 (AArch64NvCast (v2f64 FPR128:$src))), (v4i32 FPR128:$src)>;
5505 def : Pat<(v2i64 (AArch64NvCast (v2f64 FPR128:$src))), (v2i64 FPR128:$src)>;
5506 def : Pat<(v2f64 (AArch64NvCast (v2f64 FPR128:$src))), (v2f64 FPR128:$src)>;
5507 def : Pat<(v8f16 (AArch64NvCast (v2f64 FPR128:$src))), (v8f16 FPR128:$src)>;
5508 def : Pat<(v4f32 (AArch64NvCast (v2f64 FPR128:$src))), (v4f32 FPR128:$src)>;
5511 def : Pat<(v8i8 (bitconvert GPR64:$Xn)), (COPY_TO_REGCLASS GPR64:$Xn, FPR64)>;
5512 def : Pat<(v4i16 (bitconvert GPR64:$Xn)), (COPY_TO_REGCLASS GPR64:$Xn, FPR64)>;
5513 def : Pat<(v2i32 (bitconvert GPR64:$Xn)), (COPY_TO_REGCLASS GPR64:$Xn, FPR64)>;
5514 def : Pat<(v4f16 (bitconvert GPR64:$Xn)), (COPY_TO_REGCLASS GPR64:$Xn, FPR64)>;
5515 def : Pat<(v2f32 (bitconvert GPR64:$Xn)), (COPY_TO_REGCLASS GPR64:$Xn, FPR64)>;
5517 def : Pat<(i64 (bitconvert (v8i8 V64:$Vn))),
5519 def : Pat<(i64 (bitconvert (v4i16 V64:$Vn))),
5521 def : Pat<(i64 (bitconvert (v2i32 V64:$Vn))),
5523 def : Pat<(i64 (bitconvert (v4f16 V64:$Vn))),
5525 def : Pat<(i64 (bitconvert (v2f32 V64:$Vn))),
5527 def : Pat<(i64 (bitconvert (v1f64 V64:$Vn))),
5531 def : Pat<(v8i8 (bitconvert GPR64:$Xn)),
5533 def : Pat<(v4i16 (bitconvert GPR64:$Xn)),
5535 def : Pat<(v2i32 (bitconvert GPR64:$Xn)),
5537 def : Pat<(v4f16 (bitconvert GPR64:$Xn)),
5539 def : Pat<(v2f32 (bitconvert GPR64:$Xn)),
5542 def : Pat<(i64 (bitconvert (v8i8 V64:$Vn))),
5544 def : Pat<(i64 (bitconvert (v4i16 V64:$Vn))),
5546 def : Pat<(i64 (bitconvert (v2i32 V64:$Vn))),
5548 def : Pat<(i64 (bitconvert (v4f16 V64:$Vn))),
5550 def : Pat<(i64 (bitconvert (v2f32 V64:$Vn))),
5553 def : Pat<(v1i64 (bitconvert GPR64:$Xn)), (COPY_TO_REGCLASS GPR64:$Xn, FPR64)>;
5554 def : Pat<(v1f64 (bitconvert GPR64:$Xn)), (COPY_TO_REGCLASS GPR64:$Xn, FPR64)>;
5555 def : Pat<(i64 (bitconvert (v1i64 V64:$Vn))),
5557 def : Pat<(v1i64 (scalar_to_vector GPR64:$Xn)),
5559 def : Pat<(v1f64 (scalar_to_vector GPR64:$Xn)),
5561 def : Pat<(v1f64 (scalar_to_vector (f64 FPR64:$Xn))), (v1f64 FPR64:$Xn)>;
5563 def : Pat<(f32 (bitconvert (i32 GPR32:$Xn))),
5565 def : Pat<(i32 (bitconvert (f32 FPR32:$Xn))),
5567 def : Pat<(f64 (bitconvert (i64 GPR64:$Xn))),
5569 def : Pat<(i64 (bitconvert (f64 FPR64:$Xn))),
5571 def : Pat<(i64 (bitconvert (v1f64 V64:$Vn))),
5575 def : Pat<(v1i64 (bitconvert (v2i32 FPR64:$src))), (v1i64 FPR64:$src)>;
5576 def : Pat<(v1i64 (bitconvert (v4i16 FPR64:$src))), (v1i64 FPR64:$src)>;
5577 def : Pat<(v1i64 (bitconvert (v8i8 FPR64:$src))), (v1i64 FPR64:$src)>;
5578 def : Pat<(v1i64 (bitconvert (v4f16 FPR64:$src))), (v1i64 FPR64:$src)>;
5579 def : Pat<(v1i64 (bitconvert (v2f32 FPR64:$src))), (v1i64 FPR64:$src)>;
5582 def : Pat<(v1i64 (bitconvert (v2i32 FPR64:$src))),
5584 def : Pat<(v1i64 (bitconvert (v4i16 FPR64:$src))),
5586 def : Pat<(v1i64 (bitconvert (v8i8 FPR64:$src))),
5588 def : Pat<(v1i64 (bitconvert (v4f16 FPR64:$src))),
5590 def : Pat<(v1i64 (bitconvert (v2f32 FPR64:$src))),
5593 def : Pat<(v1i64 (bitconvert (v1f64 FPR64:$src))), (v1i64 FPR64:$src)>;
5594 def : Pat<(v1i64 (bitconvert (f64 FPR64:$src))), (v1i64 FPR64:$src)>;
5597 def : Pat<(v2i32 (bitconvert (v1i64 FPR64:$src))), (v2i32 FPR64:$src)>;
5598 def : Pat<(v2i32 (bitconvert (v4i16 FPR64:$src))), (v2i32 FPR64:$src)>;
5599 def : Pat<(v2i32 (bitconvert (v8i8 FPR64:$src))), (v2i32 FPR64:$src)>;
5600 def : Pat<(v2i32 (bitconvert (f64 FPR64:$src))), (v2i32 FPR64:$src)>;
5601 def : Pat<(v2i32 (bitconvert (v1f64 FPR64:$src))), (v2i32 FPR64:$src)>;
5602 def : Pat<(v2i32 (bitconvert (v4f16 FPR64:$src))), (v2i32 FPR64:$src)>;
5605 def : Pat<(v2i32 (bitconvert (v1i64 FPR64:$src))),
5607 def : Pat<(v2i32 (bitconvert (v4i16 FPR64:$src))),
5609 def : Pat<(v2i32 (bitconvert (v8i8 FPR64:$src))),
5611 def : Pat<(v2i32 (bitconvert (f64 FPR64:$src))),
5613 def : Pat<(v2i32 (bitconvert (v1f64 FPR64:$src))),
5615 def : Pat<(v2i32 (bitconvert (v4f16 FPR64:$src))),
5618 def : Pat<(v2i32 (bitconvert (v2f32 FPR64:$src))), (v2i32 FPR64:$src)>;
5621 def : Pat<(v4i16 (bitconvert (v1i64 FPR64:$src))), (v4i16 FPR64:$src)>;
5622 def : Pat<(v4i16 (bitconvert (v2i32 FPR64:$src))), (v4i16 FPR64:$src)>;
5623 def : Pat<(v4i16 (bitconvert (v8i8 FPR64:$src))), (v4i16 FPR64:$src)>;
5624 def : Pat<(v4i16 (bitconvert (f64 FPR64:$src))), (v4i16 FPR64:$src)>;
5625 def : Pat<(v4i16 (bitconvert (v4f16 FPR64:$src))), (v4i16 FPR64:$src)>;
5626 def : Pat<(v4i16 (bitconvert (v2f32 FPR64:$src))), (v4i16 FPR64:$src)>;
5627 def : Pat<(v4i16 (bitconvert (v1f64 FPR64:$src))), (v4i16 FPR64:$src)>;
5630 def : Pat<(v4i16 (bitconvert (v1i64 FPR64:$src))),
5632 def : Pat<(v4i16 (bitconvert (v2i32 FPR64:$src))),
5634 def : Pat<(v4i16 (bitconvert (v8i8 FPR64:$src))),
5636 def : Pat<(v4i16 (bitconvert (f64 FPR64:$src))),
5638 def : Pat<(v4i16 (bitconvert (v4f16 FPR64:$src))),
5640 def : Pat<(v4i16 (bitconvert (v2f32 FPR64:$src))),
5642 def : Pat<(v4i16 (bitconvert (v1f64 FPR64:$src))),
5647 def : Pat<(v4f16 (bitconvert (v1i64 FPR64:$src))), (v4f16 FPR64:$src)>;
5648 def : Pat<(v4f16 (bitconvert (v2i32 FPR64:$src))), (v4f16 FPR64:$src)>;
5649 def : Pat<(v4f16 (bitconvert (v4i16 FPR64:$src))), (v4f16 FPR64:$src)>;
5650 def : Pat<(v4f16 (bitconvert (v8i8 FPR64:$src))), (v4f16 FPR64:$src)>;
5651 def : Pat<(v4f16 (bitconvert (f64 FPR64:$src))), (v4f16 FPR64:$src)>;
5652 def : Pat<(v4f16 (bitconvert (v2f32 FPR64:$src))), (v4f16 FPR64:$src)>;
5653 def : Pat<(v4f16 (bitconvert (v1f64 FPR64:$src))), (v4f16 FPR64:$src)>;
5656 def : Pat<(v4f16 (bitconvert (v1i64 FPR64:$src))),
5658 def : Pat<(v4f16 (bitconvert (v2i32 FPR64:$src))),
5660 def : Pat<(v4f16 (bitconvert (v4i16 FPR64:$src))),
5662 def : Pat<(v4f16 (bitconvert (v8i8 FPR64:$src))),
5664 def : Pat<(v4f16 (bitconvert (f64 FPR64:$src))),
5666 def : Pat<(v4f16 (bitconvert (v2f32 FPR64:$src))),
5668 def : Pat<(v4f16 (bitconvert (v1f64 FPR64:$src))),
5675 def : Pat<(v8i8 (bitconvert (v1i64 FPR64:$src))), (v8i8 FPR64:$src)>;
5676 def : Pat<(v8i8 (bitconvert (v2i32 FPR64:$src))), (v8i8 FPR64:$src)>;
5677 def : Pat<(v8i8 (bitconvert (v4i16 FPR64:$src))), (v8i8 FPR64:$src)>;
5678 def : Pat<(v8i8 (bitconvert (f64 FPR64:$src))), (v8i8 FPR64:$src)>;
5679 def : Pat<(v8i8 (bitconvert (v2f32 FPR64:$src))), (v8i8 FPR64:$src)>;
5680 def : Pat<(v8i8 (bitconvert (v1f64 FPR64:$src))), (v8i8 FPR64:$src)>;
5681 def : Pat<(v8i8 (bitconvert (v4f16 FPR64:$src))), (v8i8 FPR64:$src)>;
5684 def : Pat<(v8i8 (bitconvert (v1i64 FPR64:$src))),
5686 def : Pat<(v8i8 (bitconvert (v2i32 FPR64:$src))),
5688 def : Pat<(v8i8 (bitconvert (v4i16 FPR64:$src))),
5690 def : Pat<(v8i8 (bitconvert (f64 FPR64:$src))),
5692 def : Pat<(v8i8 (bitconvert (v2f32 FPR64:$src))),
5694 def : Pat<(v8i8 (bitconvert (v1f64 FPR64:$src))),
5696 def : Pat<(v8i8 (bitconvert (v4f16 FPR64:$src))),
5701 def : Pat<(f64 (bitconvert (v2i32 FPR64:$src))), (f64 FPR64:$src)>;
5702 def : Pat<(f64 (bitconvert (v4i16 FPR64:$src))), (f64 FPR64:$src)>;
5703 def : Pat<(f64 (bitconvert (v2f32 FPR64:$src))), (f64 FPR64:$src)>;
5704 def : Pat<(f64 (bitconvert (v8i8 FPR64:$src))), (f64 FPR64:$src)>;
5705 def : Pat<(f64 (bitconvert (v4f16 FPR64:$src))), (f64 FPR64:$src)>;
5708 def : Pat<(f64 (bitconvert (v2i32 FPR64:$src))),
5710 def : Pat<(f64 (bitconvert (v4i16 FPR64:$src))),
5712 def : Pat<(f64 (bitconvert (v2f32 FPR64:$src))),
5714 def : Pat<(f64 (bitconvert (v8i8 FPR64:$src))),
5716 def : Pat<(f64 (bitconvert (v4f16 FPR64:$src))),
5719 def : Pat<(f64 (bitconvert (v1i64 FPR64:$src))), (f64 FPR64:$src)>;
5720 def : Pat<(f64 (bitconvert (v1f64 FPR64:$src))), (f64 FPR64:$src)>;
5723 def : Pat<(v1f64 (bitconvert (v2i32 FPR64:$src))), (v1f64 FPR64:$src)>;
5724 def : Pat<(v1f64 (bitconvert (v4i16 FPR64:$src))), (v1f64 FPR64:$src)>;
5725 def : Pat<(v1f64 (bitconvert (v8i8 FPR64:$src))), (v1f64 FPR64:$src)>;
5726 def : Pat<(v1f64 (bitconvert (v2f32 FPR64:$src))), (v1f64 FPR64:$src)>;
5727 def : Pat<(v1f64 (bitconvert (v4f16 FPR64:$src))), (v1f64 FPR64:$src)>;
5730 def : Pat<(v1f64 (bitconvert (v2i32 FPR64:$src))),
5732 def : Pat<(v1f64 (bitconvert (v4i16 FPR64:$src))),
5734 def : Pat<(v1f64 (bitconvert (v8i8 FPR64:$src))),
5736 def : Pat<(v1f64 (bitconvert (v2f32 FPR64:$src))),
5738 def : Pat<(v1f64 (bitconvert (v4f16 FPR64:$src))),
5741 def : Pat<(v1f64 (bitconvert (v1i64 FPR64:$src))), (v1f64 FPR64:$src)>;
5742 def : Pat<(v1f64 (bitconvert (f64 FPR64:$src))), (v1f64 FPR64:$src)>;
5745 def : Pat<(v2f32 (bitconvert (v1i64 FPR64:$src))), (v2f32 FPR64:$src)>;
5746 def : Pat<(v2f32 (bitconvert (v4i16 FPR64:$src))), (v2f32 FPR64:$src)>;
5747 def : Pat<(v2f32 (bitconvert (v8i8 FPR64:$src))), (v2f32 FPR64:$src)>;
5748 def : Pat<(v2f32 (bitconvert (v1f64 FPR64:$src))), (v2f32 FPR64:$src)>;
5749 def : Pat<(v2f32 (bitconvert (f64 FPR64:$src))), (v2f32 FPR64:$src)>;
5750 def : Pat<(v2f32 (bitconvert (v4f16 FPR64:$src))), (v2f32 FPR64:$src)>;
5753 def : Pat<(v2f32 (bitconvert (v1i64 FPR64:$src))),
5755 def : Pat<(v2f32 (bitconvert (v4i16 FPR64:$src))),
5757 def : Pat<(v2f32 (bitconvert (v8i8 FPR64:$src))),
5759 def : Pat<(v2f32 (bitconvert (v1f64 FPR64:$src))),
5761 def : Pat<(v2f32 (bitconvert (f64 FPR64:$src))),
5763 def : Pat<(v2f32 (bitconvert (v4f16 FPR64:$src))),
5766 def : Pat<(v2f32 (bitconvert (v2i32 FPR64:$src))), (v2f32 FPR64:$src)>;
5769 def : Pat<(f128 (bitconvert (v2i64 FPR128:$src))), (f128 FPR128:$src)>;
5770 def : Pat<(f128 (bitconvert (v4i32 FPR128:$src))), (f128 FPR128:$src)>;
5771 def : Pat<(f128 (bitconvert (v8i16 FPR128:$src))), (f128 FPR128:$src)>;
5772 def : Pat<(f128 (bitconvert (v2f64 FPR128:$src))), (f128 FPR128:$src)>;
5773 def : Pat<(f128 (bitconvert (v4f32 FPR128:$src))), (f128 FPR128:$src)>;
5774 def : Pat<(f128 (bitconvert (v8f16 FPR128:$src))), (f128 FPR128:$src)>;
5775 def : Pat<(f128 (bitconvert (v16i8 FPR128:$src))), (f128 FPR128:$src)>;
5778 def : Pat<(f128 (bitconvert (v2i64 FPR128:$src))),
5780 def : Pat<(f128 (bitconvert (v4i32 FPR128:$src))),
5783 def : Pat<(f128 (bitconvert (v8i16 FPR128:$src))),
5786 def : Pat<(f128 (bitconvert (v8f16 FPR128:$src))),
5789 def : Pat<(f128 (bitconvert (v2f64 FPR128:$src))),
5791 def : Pat<(f128 (bitconvert (v4f32 FPR128:$src))),
5794 def : Pat<(f128 (bitconvert (v16i8 FPR128:$src))),
5800 def : Pat<(v2f64 (bitconvert (f128 FPR128:$src))), (v2f64 FPR128:$src)>;
5801 def : Pat<(v2f64 (bitconvert (v4i32 FPR128:$src))), (v2f64 FPR128:$src)>;
5802 def : Pat<(v2f64 (bitconvert (v8i16 FPR128:$src))), (v2f64 FPR128:$src)>;
5803 def : Pat<(v2f64 (bitconvert (v8f16 FPR128:$src))), (v2f64 FPR128:$src)>;
5804 def : Pat<(v2f64 (bitconvert (v16i8 FPR128:$src))), (v2f64 FPR128:$src)>;
5805 def : Pat<(v2f64 (bitconvert (v4f32 FPR128:$src))), (v2f64 FPR128:$src)>;
5808 def : Pat<(v2f64 (bitconvert (f128 FPR128:$src))),
5811 def : Pat<(v2f64 (bitconvert (v4i32 FPR128:$src))),
5813 def : Pat<(v2f64 (bitconvert (v8i16 FPR128:$src))),
5815 def : Pat<(v2f64 (bitconvert (v8f16 FPR128:$src))),
5817 def : Pat<(v2f64 (bitconvert (v16i8 FPR128:$src))),
5819 def : Pat<(v2f64 (bitconvert (v4f32 FPR128:$src))),
5822 def : Pat<(v2f64 (bitconvert (v2i64 FPR128:$src))), (v2f64 FPR128:$src)>;
5825 def : Pat<(v4f32 (bitconvert (f128 FPR128:$src))), (v4f32 FPR128:$src)>;
5826 def : Pat<(v4f32 (bitconvert (v8i16 FPR128:$src))), (v4f32 FPR128:$src)>;
5827 def : Pat<(v4f32 (bitconvert (v8f16 FPR128:$src))), (v4f32 FPR128:$src)>;
5828 def : Pat<(v4f32 (bitconvert (v16i8 FPR128:$src))), (v4f32 FPR128:$src)>;
5829 def : Pat<(v4f32 (bitconvert (v2i64 FPR128:$src))), (v4f32 FPR128:$src)>;
5830 def : Pat<(v4f32 (bitconvert (v2f64 FPR128:$src))), (v4f32 FPR128:$src)>;
5833 def : Pat<(v4f32 (bitconvert (f128 FPR128:$src))),
5836 def : Pat<(v4f32 (bitconvert (v8i16 FPR128:$src))),
5838 def : Pat<(v4f32 (bitconvert (v8f16 FPR128:$src))),
5840 def : Pat<(v4f32 (bitconvert (v16i8 FPR128:$src))),
5842 def : Pat<(v4f32 (bitconvert (v2i64 FPR128:$src))),
5844 def : Pat<(v4f32 (bitconvert (v2f64 FPR128:$src))),
5847 def : Pat<(v4f32 (bitconvert (v4i32 FPR128:$src))), (v4f32 FPR128:$src)>;
5850 def : Pat<(v2i64 (bitconvert (f128 FPR128:$src))), (v2i64 FPR128:$src)>;
5851 def : Pat<(v2i64 (bitconvert (v4i32 FPR128:$src))), (v2i64 FPR128:$src)>;
5852 def : Pat<(v2i64 (bitconvert (v8i16 FPR128:$src))), (v2i64 FPR128:$src)>;
5853 def : Pat<(v2i64 (bitconvert (v16i8 FPR128:$src))), (v2i64 FPR128:$src)>;
5854 def : Pat<(v2i64 (bitconvert (v4f32 FPR128:$src))), (v2i64 FPR128:$src)>;
5855 def : Pat<(v2i64 (bitconvert (v8f16 FPR128:$src))), (v2i64 FPR128:$src)>;
5858 def : Pat<(v2i64 (bitconvert (f128 FPR128:$src))),
5861 def : Pat<(v2i64 (bitconvert (v4i32 FPR128:$src))),
5863 def : Pat<(v2i64 (bitconvert (v8i16 FPR128:$src))),
5865 def : Pat<(v2i64 (bitconvert (v16i8 FPR128:$src))),
5867 def : Pat<(v2i64 (bitconvert (v4f32 FPR128:$src))),
5869 def : Pat<(v2i64 (bitconvert (v8f16 FPR128:$src))),
5872 def : Pat<(v2i64 (bitconvert (v2f64 FPR128:$src))), (v2i64 FPR128:$src)>;
5875 def : Pat<(v4i32 (bitconvert (f128 FPR128:$src))), (v4i32 FPR128:$src)>;
5876 def : Pat<(v4i32 (bitconvert (v2i64 FPR128:$src))), (v4i32 FPR128:$src)>;
5877 def : Pat<(v4i32 (bitconvert (v8i16 FPR128:$src))), (v4i32 FPR128:$src)>;
5878 def : Pat<(v4i32 (bitconvert (v16i8 FPR128:$src))), (v4i32 FPR128:$src)>;
5879 def : Pat<(v4i32 (bitconvert (v2f64 FPR128:$src))), (v4i32 FPR128:$src)>;
5880 def : Pat<(v4i32 (bitconvert (v8f16 FPR128:$src))), (v4i32 FPR128:$src)>;
5883 def : Pat<(v4i32 (bitconvert (f128 FPR128:$src))),
5887 def : Pat<(v4i32 (bitconvert (v2i64 FPR128:$src))),
5889 def : Pat<(v4i32 (bitconvert (v8i16 FPR128:$src))),
5891 def : Pat<(v4i32 (bitconvert (v16i8 FPR128:$src))),
5893 def : Pat<(v4i32 (bitconvert (v2f64 FPR128:$src))),
5895 def : Pat<(v4i32 (bitconvert (v8f16 FPR128:$src))),
5898 def : Pat<(v4i32 (bitconvert (v4f32 FPR128:$src))), (v4i32 FPR128:$src)>;
5901 def : Pat<(v8i16 (bitconvert (f128 FPR128:$src))), (v8i16 FPR128:$src)>;
5902 def : Pat<(v8i16 (bitconvert (v2i64 FPR128:$src))), (v8i16 FPR128:$src)>;
5903 def : Pat<(v8i16 (bitconvert (v4i32 FPR128:$src))), (v8i16 FPR128:$src)>;
5904 def : Pat<(v8i16 (bitconvert (v16i8 FPR128:$src))), (v8i16 FPR128:$src)>;
5905 def : Pat<(v8i16 (bitconvert (v2f64 FPR128:$src))), (v8i16 FPR128:$src)>;
5906 def : Pat<(v8i16 (bitconvert (v4f32 FPR128:$src))), (v8i16 FPR128:$src)>;
5907 def : Pat<(v8i16 (bitconvert (v8f16 FPR128:$src))), (v8i16 FPR128:$src)>;
5910 def : Pat<(v8i16 (bitconvert (f128 FPR128:$src))),
5914 def : Pat<(v8i16 (bitconvert (v2i64 FPR128:$src))),
5916 def : Pat<(v8i16 (bitconvert (v4i32 FPR128:$src))),
5918 def : Pat<(v8i16 (bitconvert (v16i8 FPR128:$src))),
5920 def : Pat<(v8i16 (bitconvert (v2f64 FPR128:$src))),
5922 def : Pat<(v8i16 (bitconvert (v4f32 FPR128:$src))),
5924 def : Pat<(v8i16 (bitconvert (v8f16 FPR128:$src))),
5929 def : Pat<(v8f16 (bitconvert (f128 FPR128:$src))), (v8f16 FPR128:$src)>;
5930 def : Pat<(v8f16 (bitconvert (v2i64 FPR128:$src))), (v8f16 FPR128:$src)>;
5931 def : Pat<(v8f16 (bitconvert (v4i32 FPR128:$src))), (v8f16 FPR128:$src)>;
5932 def : Pat<(v8f16 (bitconvert (v8i16 FPR128:$src))), (v8f16 FPR128:$src)>;
5933 def : Pat<(v8f16 (bitconvert (v16i8 FPR128:$src))), (v8f16 FPR128:$src)>;
5934 def : Pat<(v8f16 (bitconvert (v2f64 FPR128:$src))), (v8f16 FPR128:$src)>;
5935 def : Pat<(v8f16 (bitconvert (v4f32 FPR128:$src))), (v8f16 FPR128:$src)>;
5938 def : Pat<(v8f16 (bitconvert (f128 FPR128:$src))),
5942 def : Pat<(v8f16 (bitconvert (v2i64 FPR128:$src))),
5944 def : Pat<(v8f16 (bitconvert (v4i32 FPR128:$src))),
5946 def : Pat<(v8f16 (bitconvert (v8i16 FPR128:$src))),
5948 def : Pat<(v8f16 (bitconvert (v16i8 FPR128:$src))),
5950 def : Pat<(v8f16 (bitconvert (v2f64 FPR128:$src))),
5952 def : Pat<(v8f16 (bitconvert (v4f32 FPR128:$src))),
5957 def : Pat<(v16i8 (bitconvert (f128 FPR128:$src))), (v16i8 FPR128:$src)>;
5958 def : Pat<(v16i8 (bitconvert (v2i64 FPR128:$src))), (v16i8 FPR128:$src)>;
5959 def : Pat<(v16i8 (bitconvert (v4i32 FPR128:$src))), (v16i8 FPR128:$src)>;
5960 def : Pat<(v16i8 (bitconvert (v8i16 FPR128:$src))), (v16i8 FPR128:$src)>;
5961 def : Pat<(v16i8 (bitconvert (v2f64 FPR128:$src))), (v16i8 FPR128:$src)>;
5962 def : Pat<(v16i8 (bitconvert (v4f32 FPR128:$src))), (v16i8 FPR128:$src)>;
5963 def : Pat<(v16i8 (bitconvert (v8f16 FPR128:$src))), (v16i8 FPR128:$src)>;
5966 def : Pat<(v16i8 (bitconvert (f128 FPR128:$src))),
5970 def : Pat<(v16i8 (bitconvert (v2i64 FPR128:$src))),
5972 def : Pat<(v16i8 (bitconvert (v4i32 FPR128:$src))),
5974 def : Pat<(v16i8 (bitconvert (v8i16 FPR128:$src))),
5976 def : Pat<(v16i8 (bitconvert (v2f64 FPR128:$src))),
5978 def : Pat<(v16i8 (bitconvert (v4f32 FPR128:$src))),
5980 def : Pat<(v16i8 (bitconvert (v8f16 FPR128:$src))),
5984 def : Pat<(v4i16 (extract_subvector V128:$Rn, (i64 0))),
5986 def : Pat<(v8i8 (extract_subvector V128:$Rn, (i64 0))),
5988 def : Pat<(v2f32 (extract_subvector V128:$Rn, (i64 0))),
5990 def : Pat<(v4f16 (extract_subvector V128:$Rn, (i64 0))),
5992 def : Pat<(v2i32 (extract_subvector V128:$Rn, (i64 0))),
5994 def : Pat<(v1i64 (extract_subvector V128:$Rn, (i64 0))),
5996 def : Pat<(v1f64 (extract_subvector V128:$Rn, (i64 0))),
5999 def : Pat<(v8i8 (extract_subvector (v16i8 FPR128:$Rn), (i64 1))),
6001 def : Pat<(v4i16 (extract_subvector (v8i16 FPR128:$Rn), (i64 1))),
6003 def : Pat<(v2i32 (extract_subvector (v4i32 FPR128:$Rn), (i64 1))),
6005 def : Pat<(v1i64 (extract_subvector (v2i64 FPR128:$Rn), (i64 1))),
6010 def : Pat<(insert_subvector undef, (v1i64 FPR64:$src), (i32 0)),
6012 def : Pat<(insert_subvector undef, (v1f64 FPR64:$src), (i32 0)),
6014 def : Pat<(insert_subvector undef, (v2i32 FPR64:$src), (i32 0)),
6016 def : Pat<(insert_subvector undef, (v2f32 FPR64:$src), (i32 0)),
6018 def : Pat<(insert_subvector undef, (v4i16 FPR64:$src), (i32 0)),
6020 def : Pat<(insert_subvector undef, (v4f16 FPR64:$src), (i32 0)),
6022 def : Pat<(insert_subvector undef, (v8i8 FPR64:$src), (i32 0)),
6027 def : Pat<(i64 (add (vector_extract (v2i64 FPR128:$Rn), (i64 0)),
6030 def : Pat<(f64 (fadd (vector_extract (v2f64 FPR128:$Rn), (i64 0)),
6036 def : Pat<(fadd (vector_extract (v4f32 FPR128:$Rn), (i64 0)),
6041 def : Pat<(i64 (int_aarch64_neon_sshl (i64 FPR64:$Rn), (i64 FPR64:$Rm))),
6043 def : Pat<(i64 (int_aarch64_neon_ushl (i64 FPR64:$Rn), (i64 FPR64:$Rm))),
6045 def : Pat<(i64 (int_aarch64_neon_srshl (i64 FPR64:$Rn), (i64 FPR64:$Rm))),
6047 def : Pat<(i64 (int_aarch64_neon_urshl (i64 FPR64:$Rn), (i64 FPR64:$Rm))),
6056 Pat<(nontemporalstore (VT FPR128:$Rt),
6068 Pat<(nontemporalstore (VT FPR64:$Rt),
6081 def : Pat<(nontemporalstore GPR64:$Rt,
6098 def : Pat<(AArch64tcret tcGPR64:$dst, (i32 timm:$FPDiff)),
6100 def : Pat<(AArch64tcret tglobaladdr:$dst, (i32 timm:$FPDiff)),
6102 def : Pat<(AArch64tcret texternalsym:$dst, (i32 timm:$FPDiff)),