[llvm] [AArch64] Fixup destructive floating-point precision conversions (PR #118788)

via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 11 03:16:15 PST 2024


================
@@ -4268,17 +4269,16 @@ let Predicates = [HasSVE2p2orSME2p2] in {
   defm FCVT_ZPzZ : sve_fp_z2op_p_zd_b_0<"fcvt", "int_aarch64_sve_fcvt">;
 
   // SVE2p2 floating-point convert precision down (placing odd), zeroing predicate
-  defm FCVTNT_ZPzZ      : sve_fp_fcvtntz<"fcvtnt">;
-  def FCVTXNT_ZPzZ_DtoS : sve_fp_fcvt2z<0b0010, "fcvtxnt", ZPR32, ZPR64>;
+  defm FCVTNT_ZPzZ : sve2_fp_convert_down_narrow_z<"fcvtnt">;
+  def FCVTXNT_ZPzZ : sve2_fp_convert_precision<0b0010, 0b0, "fcvtxnt", ZPR32, ZPR64, /*destructive*/ true>;
----------------
SpencerAbson wrote:

Agree on the decoupling, but it does not really relate to (1) - no use of `sve_fp_convert_percision` is `movprfx`-able.

(1) would mean splitting `sve2_fp_convert_precision` into three classes; one for merging instructions, one for destructive zeroing instructions, and one for constructive zeroing instructions. I don't mind doing that, though I avoided it to reduce repetition; this file has 11 thousand lines at the time of writing.

https://github.com/llvm/llvm-project/pull/118788


More information about the llvm-commits mailing list