@@ -1683,60 +1683,61 @@ let Predicates = [HasSVEorStreamingSVE] in {
16831683 defm FCVTZS_ZPmZ_DtoD : sve_fp_2op_p_zd< 0b1111110, "fcvtzs", ZPR64, ZPR64, null_frag, AArch64fcvtzs_mt, nxv2i64, nxv2i1, nxv2f64, ElementSizeD>;
16841684 defm FCVTZU_ZPmZ_DtoD : sve_fp_2op_p_zd< 0b1111111, "fcvtzu", ZPR64, ZPR64, null_frag, AArch64fcvtzu_mt, nxv2i64, nxv2i1, nxv2f64, ElementSizeD>;
16851685
1686- def : Pat<(nxv2f32 (AArch64fcvte_mt (nxv2i1 PPR:$Pg), (nxv2f16 ZPR:$Zs), (nxv2f32 ZPR:$Zd))),
1687- (FCVT_ZPmZ_HtoS ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
1686+ //These patterns exist to improve the code quality of conversions on unpacked types.
1687+ def : Pat<(nxv2f32 (AArch64fcvte_mt (nxv2i1 (SVEAllActive):$Pg), (nxv2f16 ZPR:$Zs), (nxv2f32 ZPR:$Zd))),
1688+ (FCVT_ZPmZ_HtoS_UNDEF ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
16881689
16891690 // FP_ROUND has an additional 'precise' flag which indicates the type of rounding.
16901691 // This is ignored by the pattern below where it is matched by (i64 timm0_1)
1691- def : Pat<(nxv2f16 (AArch64fcvtr_mt (nxv2i1 PPR :$Pg), (nxv2f32 ZPR:$Zs), (i64 timm0_1), (nxv2f16 ZPR:$Zd))),
1692- (FCVT_ZPmZ_StoH ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
1692+ def : Pat<(nxv2f16 (AArch64fcvtr_mt (nxv2i1 (SVEAllActive) :$Pg), (nxv2f32 ZPR:$Zs), (i64 timm0_1), (nxv2f16 ZPR:$Zd))),
1693+ (FCVT_ZPmZ_StoH_UNDEF ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
16931694
1694- // Floating-point -> signed integer
1695- def : Pat<(nxv2f16 (AArch64scvtf_mt (nxv2i1 PPR :$Pg),
1695+ // Signed integer -> Floating-point
1696+ def : Pat<(nxv2f16 (AArch64scvtf_mt (nxv2i1 (SVEAllActive) :$Pg),
16961697 (sext_inreg (nxv2i64 ZPR:$Zs), nxv2i16), (nxv2f16 ZPR:$Zd))),
1697- (SCVTF_ZPmZ_HtoH ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
1698+ (SCVTF_ZPmZ_HtoH_UNDEF ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
16981699
1699- def : Pat<(nxv4f16 (AArch64scvtf_mt (nxv4i1 PPR :$Pg),
1700+ def : Pat<(nxv4f16 (AArch64scvtf_mt (nxv4i1 (SVEAllActive) :$Pg),
17001701 (sext_inreg (nxv4i32 ZPR:$Zs), nxv4i16), (nxv4f16 ZPR:$Zd))),
1701- (SCVTF_ZPmZ_HtoH ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
1702+ (SCVTF_ZPmZ_HtoH_UNDEF ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
17021703
1703- def : Pat<(nxv2f16 (AArch64scvtf_mt (nxv2i1 PPR :$Pg),
1704+ def : Pat<(nxv2f16 (AArch64scvtf_mt (nxv2i1 (SVEAllActive) :$Pg),
17041705 (sext_inreg (nxv2i64 ZPR:$Zs), nxv2i32), (nxv2f16 ZPR:$Zd))),
1705- (SCVTF_ZPmZ_StoH ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
1706+ (SCVTF_ZPmZ_StoH_UNDEF ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
17061707
1707- def : Pat<(nxv2f32 (AArch64scvtf_mt (nxv2i1 PPR :$Pg),
1708+ def : Pat<(nxv2f32 (AArch64scvtf_mt (nxv2i1 (SVEAllActive) :$Pg),
17081709 (sext_inreg (nxv2i64 ZPR:$Zs), nxv2i32), (nxv2f32 ZPR:$Zd))),
1709- (SCVTF_ZPmZ_StoS ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
1710+ (SCVTF_ZPmZ_StoS_UNDEF ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
17101711
1711- def : Pat<(nxv2f64 (AArch64scvtf_mt (nxv2i1 PPR :$Pg),
1712+ def : Pat<(nxv2f64 (AArch64scvtf_mt (nxv2i1 (SVEAllActive) :$Pg),
17121713 (sext_inreg (nxv2i64 ZPR:$Zs), nxv2i32), (nxv2f64 ZPR:$Zd))),
1713- (SCVTF_ZPmZ_StoD ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
1714+ (SCVTF_ZPmZ_StoD_UNDEF ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
17141715
1715- // Floating-point -> unsigned integer
1716- def : Pat<(nxv2f16 (AArch64ucvtf_mt (nxv2i1 PPR :$Pg),
1716+ // Unsigned integer -> Floating-point
1717+ def : Pat<(nxv2f16 (AArch64ucvtf_mt (nxv2i1 (SVEAllActive) :$Pg),
17171718 (and (nxv2i64 ZPR:$Zs),
17181719 (nxv2i64 (AArch64dup (i64 0xFFFF)))), (nxv2f16 ZPR:$Zd))),
1719- (UCVTF_ZPmZ_HtoH ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
1720+ (UCVTF_ZPmZ_HtoH_UNDEF ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
17201721
1721- def : Pat<(nxv2f16 (AArch64ucvtf_mt (nxv2i1 PPR :$Pg),
1722+ def : Pat<(nxv2f16 (AArch64ucvtf_mt (nxv2i1 (SVEAllActive) :$Pg),
17221723 (and (nxv2i64 ZPR:$Zs),
17231724 (nxv2i64 (AArch64dup (i64 0xFFFFFFFF)))), (nxv2f16 ZPR:$Zd))),
1724- (UCVTF_ZPmZ_StoH ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
1725+ (UCVTF_ZPmZ_StoH_UNDEF ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
17251726
1726- def : Pat<(nxv4f16 (AArch64ucvtf_mt (nxv4i1 PPR :$Pg),
1727+ def : Pat<(nxv4f16 (AArch64ucvtf_mt (nxv4i1 (SVEAllActive) :$Pg),
17271728 (and (nxv4i32 ZPR:$Zs),
17281729 (nxv4i32 (AArch64dup (i32 0xFFFF)))), (nxv4f16 ZPR:$Zd))),
1729- (UCVTF_ZPmZ_HtoH ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
1730+ (UCVTF_ZPmZ_HtoH_UNDEF ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
17301731
1731- def : Pat<(nxv2f32 (AArch64ucvtf_mt (nxv2i1 PPR :$Pg),
1732+ def : Pat<(nxv2f32 (AArch64ucvtf_mt (nxv2i1 (SVEAllActive) :$Pg),
17321733 (and (nxv2i64 ZPR:$Zs),
17331734 (nxv2i64 (AArch64dup (i64 0xFFFFFFFF)))), (nxv2f32 ZPR:$Zd))),
1734- (UCVTF_ZPmZ_StoS ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
1735+ (UCVTF_ZPmZ_StoS_UNDEF ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
17351736
1736- def : Pat<(nxv2f64 (AArch64ucvtf_mt (nxv2i1 PPR :$Pg),
1737+ def : Pat<(nxv2f64 (AArch64ucvtf_mt (nxv2i1 (SVEAllActive) :$Pg),
17371738 (and (nxv2i64 ZPR:$Zs),
17381739 (nxv2i64 (AArch64dup (i64 0xFFFFFFFF)))), (nxv2f64 ZPR:$Zd))),
1739- (UCVTF_ZPmZ_StoD ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
1740+ (UCVTF_ZPmZ_StoD_UNDEF ZPR:$Zd, PPR:$Pg, ZPR:$Zs)>;
17401741
17411742 defm FRINTN_ZPmZ : sve_fp_2op_p_zd_HSD<0b00000, "frintn", AArch64frintn_mt>;
17421743 defm FRINTP_ZPmZ : sve_fp_2op_p_zd_HSD<0b00001, "frintp", AArch64frintp_mt>;
0 commit comments