From: Karl Meakin <[email protected]>

Instead of passing `UNSPEC_NONE` to constructors or to `map_to_unspec`,
make the arguments default to `UNSPEC_NONE` if not specified.

gcc/ChangeLog:

        * config/aarch64/aarch64-sve-builtins.h (map_to_rtx_codes): Make
        arguments default to `UNSPEC_NONE`.
        (map_to_unspecs): Likewise.
        * config/aarch64/aarch64-sve-builtins-functions.h
        (unspec_based_function_base): Make arguments default to
        `UNSPEC_NONE`.
        (sme_1mode_function): Likewise.
        (integer_conversion): Likewise.
        (reduction): Likewise.
        * config/aarch64/aarch64-sve-builtins-base.cc (svbic_impl):
        Delete unnecessary `UNSPEC_NONE` arguments.
        (svcmla_impl): Likewise.
        (svnot_impl): Likewise.
        (svsub_impl): Likewise.
        * config/aarch64/aarch64-sve-builtins-sme.cc (svadd_write_za): Likewise.
        (svaddha_za): Likewise.
        (svbmopa_za): Likewise.
        (svbmops_za): Likewise.
        (svsudot_lane_za): Likewise.
        (svsuvdot_lane_za): Likewise.
        (svsumopa_za): Likewise.
        (svsumops_za): Likewise.
        (svusdot_za): Likewise.
        (svusdot_lane_za): Likewise.
        (svusbdot_lane_za): Likewise.
        (svusmopa_za): Likewise.
        (svusmops_za): Likewise.
        * config/aarch64/aarch64-sve-builtins-sve2.cc (svqcadd_impl): Likewise.
        (svqrshl_impl): Likewise.
        (svqshl_impl): Likewise.
        (svrshl_impl): Likewise.
        (svuqadd_impl): Likewise.
---
 .../aarch64/aarch64-sve-builtins-base.cc      |  32 +--
 .../aarch64/aarch64-sve-builtins-functions.h  |  24 +-
 .../aarch64/aarch64-sve-builtins-sme.cc       |  32 ++-
 .../aarch64/aarch64-sve-builtins-sve2.cc      | 236 ++++++++----------
 gcc/config/aarch64/aarch64-sve-builtins.h     |   6 +-
 5 files changed, 158 insertions(+), 172 deletions(-)

diff --git a/gcc/config/aarch64/aarch64-sve-builtins-base.cc b/gcc/config/aarch64/aarch64-sve-builtins-base.cc
index 615c75923d28..50b9461c4422 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins-base.cc
+++ b/gcc/config/aarch64/aarch64-sve-builtins-base.cc
@@ -308,7 +308,7 @@ public:
       {
 	machine_mode mode = GET_MODE_INNER (e.vector_mode (0));
 	e.args[2] = simplify_unary_operation (NOT, mode, e.args[2], mode);
-	return e.map_to_rtx_codes (AND, AND, UNSPEC_NONE, UNSPEC_NONE);
+	return e.map_to_rtx_codes (AND, AND);
       }
 
     if (e.type_suffix_ids[0] == TYPE_SUFFIX_b)
@@ -424,7 +424,7 @@ public:
     else
       {
 	unspec cmla = unspec_cmla (rot);
-	return e.map_to_unspecs (cmla, cmla, UNSPEC_NONE);
+	return e.map_to_unspecs (cmla, cmla);
       }
   }
 };
@@ -2427,7 +2427,7 @@ public:
 class svnot_impl : public rtx_code_function
 {
 public:
-  CONSTEXPR svnot_impl () : rtx_code_function (NOT, NOT, UNSPEC_NONE) {}
+  CONSTEXPR svnot_impl () : rtx_code_function (NOT, NOT) {}
 
   rtx
   expand (function_expander &e) const override
@@ -3195,7 +3195,7 @@ public:
     /* Canonicalize subtractions of constants to additions.  */
     machine_mode mode = e.vector_mode (0);
     if (e.try_negating_argument (2, mode))
-      return e.map_to_rtx_codes (PLUS, PLUS, UNSPEC_COND_FADD, UNSPEC_NONE);
+      return e.map_to_rtx_codes (PLUS, PLUS, UNSPEC_COND_FADD);
 
     return rtx_code_function::expand (e);
   }
@@ -3483,7 +3483,7 @@ FUNCTION (svand, rtx_code_function, (AND, AND))
 FUNCTION (svandv, svandv_impl,)
 FUNCTION (svasr, rtx_code_function, (ASHIFTRT, ASHIFTRT))
 FUNCTION (svasr_wide, shift_wide, (ASHIFTRT, UNSPEC_ASHIFTRT_WIDE))
-FUNCTION (svasrd, unspec_based_function, (UNSPEC_ASRD, UNSPEC_NONE, UNSPEC_NONE))
+FUNCTION (svasrd, unspec_based_function, (UNSPEC_ASRD))
 FUNCTION (svbfdot, fixed_insn_function, (CODE_FOR_aarch64_sve_bfdotvnx4sf))
 FUNCTION (svbfdot_lane, fixed_insn_function,
 	  (CODE_FOR_aarch64_sve_bfdot_lanevnx4sf))
@@ -3552,7 +3552,7 @@ FUNCTION (svdup, svdup_impl,)
 FUNCTION (svdup_lane, svdup_lane_impl,)
 FUNCTION (svdupq, svdupq_impl,)
 FUNCTION (svdupq_lane, svdupq_lane_impl,)
-FUNCTION (sveor, rtx_code_function, (XOR, XOR, UNSPEC_NONE))
+FUNCTION (sveor, rtx_code_function, (XOR, XOR))
 FUNCTION (sveorv, sveorv_impl,)
 FUNCTION (svexpa, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_FEXPA))
 FUNCTION (svext, QUIET_CODE_FOR_MODE0 (aarch64_sve_ext),)
@@ -3635,7 +3635,7 @@ FUNCTION (svmsb, svmsb_impl,)
 FUNCTION (svmul, svmul_impl,)
 FUNCTION (svmul_lane, CODE_FOR_MODE0 (aarch64_mul_lane),)
 FUNCTION (svmulh, unspec_based_function, (UNSPEC_SMUL_HIGHPART,
-					  UNSPEC_UMUL_HIGHPART, UNSPEC_NONE))
+					  UNSPEC_UMUL_HIGHPART))
 FUNCTION (svmulx, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FMULX))
 FUNCTION (svnand, svnand_impl,)
 FUNCTION (svneg, quiet<rtx_code_function>, (NEG, NEG, UNSPEC_COND_FNEG))
@@ -3664,7 +3664,7 @@ FUNCTION (svptest_first, svptest_impl, (LT))
 FUNCTION (svptest_last, svptest_impl, (LTU))
 FUNCTION (svptrue, svptrue_impl,)
 FUNCTION (svptrue_pat, svptrue_pat_impl,)
-FUNCTION (svqadd, rtx_code_function, (SS_PLUS, US_PLUS, UNSPEC_NONE))
+FUNCTION (svqadd, rtx_code_function, (SS_PLUS, US_PLUS))
 FUNCTION (svqdecb, svqdec_bhwd_impl, (QImode))
 FUNCTION (svqdecb_pat, svqdec_bhwd_impl, (QImode))
 FUNCTION (svqdecd, svqdec_bhwd_impl, (DImode))
@@ -3683,17 +3683,17 @@ FUNCTION (svqinch_pat, svqinc_bhwd_impl, (HImode))
 FUNCTION (svqincp, svqdecp_svqincp_impl, (SS_PLUS, US_PLUS))
 FUNCTION (svqincw, svqinc_bhwd_impl, (SImode))
 FUNCTION (svqincw_pat, svqinc_bhwd_impl, (SImode))
-FUNCTION (svqsub, rtx_code_function, (SS_MINUS, US_MINUS, UNSPEC_NONE))
-FUNCTION (svrbit, rtx_code_function, (BITREVERSE, BITREVERSE, UNSPEC_NONE))
+FUNCTION (svqsub, rtx_code_function, (SS_MINUS, US_MINUS))
+FUNCTION (svrbit, rtx_code_function, (BITREVERSE, BITREVERSE))
 FUNCTION (svrdffr, svrdffr_impl,)
 FUNCTION (svrecpe, unspec_based_function, (UNSPEC_NONE, UNSPEC_URECPE, UNSPEC_FRECPE))
 FUNCTION (svrecps, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_FRECPS))
 FUNCTION (svrecpx, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_FRECPX))
 FUNCTION (svreinterpret, svreinterpret_impl,)
 FUNCTION (svrev, svrev_impl,)
-FUNCTION (svrevb, unspec_based_function, (UNSPEC_REVB, UNSPEC_REVB, UNSPEC_NONE))
-FUNCTION (svrevh, unspec_based_function, (UNSPEC_REVH, UNSPEC_REVH, UNSPEC_NONE))
-FUNCTION (svrevw, unspec_based_function, (UNSPEC_REVW, UNSPEC_REVW, UNSPEC_NONE))
+FUNCTION (svrevb, unspec_based_function, (UNSPEC_REVB, UNSPEC_REVB))
+FUNCTION (svrevh, unspec_based_function, (UNSPEC_REVH, UNSPEC_REVH))
+FUNCTION (svrevw, unspec_based_function, (UNSPEC_REVW, UNSPEC_REVW))
 FUNCTION (svrinta, svrint_impl, (round_optab, UNSPEC_COND_FRINTA))
 FUNCTION (svrinti, svrint_impl, (nearbyint_optab, UNSPEC_COND_FRINTI))
 FUNCTION (svrintm, svrint_impl, (floor_optab, UNSPEC_COND_FRINTM))
@@ -3726,7 +3726,7 @@ FUNCTION (svstnt1, svstnt1_impl,)
 FUNCTION (svsub, svsub_impl,)
 FUNCTION (svsubr, rtx_code_function_rotated, (MINUS, MINUS, UNSPEC_COND_FSUB))
 FUNCTION (svsudot, svusdot_impl, (true))
-FUNCTION (svsudot_lane, svdotprod_lane_impl, (UNSPEC_SUDOT, UNSPEC_NONE, UNSPEC_NONE))
+FUNCTION (svsudot_lane, svdotprod_lane_impl, (UNSPEC_SUDOT))
 FUNCTION (svtbl, quiet<unspec_based_uncond_function>, (UNSPEC_TBL, UNSPEC_TBL,
 						       UNSPEC_TBL))
 FUNCTION (svtmad, CODE_FOR_MODE0 (aarch64_sve_tmad),)
@@ -3745,8 +3745,8 @@ FUNCTION (svundef4, svundef_impl, (4))
 FUNCTION (svunpkhi, svunpk_impl, (true))
 FUNCTION (svunpklo, svunpk_impl, (false))
 FUNCTION (svusdot, svusdot_impl, (false))
-FUNCTION (svusdot_lane, svdotprod_lane_impl, (UNSPEC_USDOT, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svusmmla, unspec_based_add_function, (UNSPEC_USMATMUL, UNSPEC_NONE, UNSPEC_NONE))
+FUNCTION (svusdot_lane, svdotprod_lane_impl, (UNSPEC_USDOT))
+FUNCTION (svusmmla, unspec_based_add_function, (UNSPEC_USMATMUL))
 FUNCTION (svuzp1, svuzp_impl, (0))
 FUNCTION (svuzp1q, unspec_based_function, (UNSPEC_UZP1Q, UNSPEC_UZP1Q,
 					   UNSPEC_UZP1Q))
diff --git a/gcc/config/aarch64/aarch64-sve-builtins-functions.h b/gcc/config/aarch64/aarch64-sve-builtins-functions.h
index 43a033bb3162..dbc6814471f4 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins-functions.h
+++ b/gcc/config/aarch64/aarch64-sve-builtins-functions.h
@@ -269,8 +269,10 @@ class unspec_based_function_base : public function_base
 {
 public:
   CONSTEXPR
-  unspec_based_function_base (unspec unspec_for_sint, unspec unspec_for_uint,
-			      unspec unspec_for_fp, unspec unspec_for_mfp8 = UNSPEC_NONE,
+  unspec_based_function_base (unspec unspec_for_sint,
+			      unspec unspec_for_uint = UNSPEC_NONE,
+			      unspec unspec_for_fp = UNSPEC_NONE,
+			      unspec unspec_for_mfp8 = UNSPEC_NONE,
 			      unsigned int suffix_index = 0)
     : m_unspec_for_sint (unspec_for_sint), m_unspec_for_uint (unspec_for_uint),
       m_unspec_for_fp (unspec_for_fp), m_unspec_for_mfp8 (unspec_for_mfp8),
@@ -429,8 +431,9 @@ class sme_1mode_function : public read_write_za<unspec_based_function_base>
 public:
   using parent = read_write_za<unspec_based_function_base>;
 
-  CONSTEXPR sme_1mode_function (unspec unspec_for_sint, unspec unspec_for_uint,
-				unspec unspec_for_fp)
+  CONSTEXPR sme_1mode_function (unspec unspec_for_sint,
+				unspec unspec_for_uint = UNSPEC_NONE,
+				unspec unspec_for_fp = UNSPEC_NONE)
     : parent (unspec_for_sint, unspec_for_uint, unspec_for_fp, UNSPEC_NONE, 1)
   {}
 
@@ -460,7 +463,8 @@ public:
   using parent = read_write_za<unspec_based_function_base>;
 
   CONSTEXPR sme_2mode_function_t (unspec unspec_for_sint,
-				  unspec unspec_for_uint, unspec unspec_for_fp)
+				  unspec unspec_for_uint = UNSPEC_NONE,
+				  unspec unspec_for_fp = UNSPEC_NONE)
     : parent (unspec_for_sint, unspec_for_uint, unspec_for_fp, UNSPEC_NONE, 1)
   {}
 
@@ -672,8 +676,10 @@ public:
 class integer_conversion : public function_base
 {
 public:
-  CONSTEXPR integer_conversion (unspec unspec_for_sint, unspec unspec_for_sintu,
-				unspec unspec_for_uint, unspec unspec_for_uints)
+  CONSTEXPR integer_conversion (unspec unspec_for_sint,
+				unspec unspec_for_sintu = UNSPEC_NONE,
+				unspec unspec_for_uint = UNSPEC_NONE,
+				unspec unspec_for_uints = UNSPEC_NONE)
     : m_unspec_for_sint (unspec_for_sint),
       m_unspec_for_sintu (unspec_for_sintu),
       m_unspec_for_uint (unspec_for_uint), m_unspec_for_uints (unspec_for_uints)
@@ -719,7 +725,7 @@ public:
   {}
 
   CONSTEXPR reduction (unspec unspec_for_sint, unspec unspec_for_uint,
-		       unspec unspec_for_fp)
+		       unspec unspec_for_fp = UNSPEC_NONE)
     : m_unspec_for_sint (unspec_for_sint), m_unspec_for_uint (unspec_for_uint),
       m_unspec_for_fp (unspec_for_fp)
   {}
@@ -765,7 +771,7 @@ public:
     if (aarch64_simd_shift_imm_p (shift, elem_mode, m_code == ASHIFT))
       {
 	e.args.last () = shift;
-	return e.map_to_rtx_codes (m_code, m_code, UNSPEC_NONE, UNSPEC_NONE);
+	return e.map_to_rtx_codes (m_code, m_code);
       }
 
     if (e.pred == PRED_x)
diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sme.cc b/gcc/config/aarch64/aarch64-sve-builtins-sme.cc
index a48e8247985b..22a3b8a1ce6c 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins-sme.cc
+++ b/gcc/config/aarch64/aarch64-sve-builtins-sme.cc
@@ -616,13 +616,13 @@ FUNCTION (arm_in_streaming_mode, arm_in_streaming_mode_impl, )
 FUNCTION (svadd_za, sme_1mode_function, (UNSPEC_SME_ADD, UNSPEC_SME_ADD,
 					 UNSPEC_SME_FADD))
 FUNCTION (svadd_write_za, sme_1mode_function, (UNSPEC_SME_ADD_WRITE,
-					       UNSPEC_SME_ADD_WRITE, UNSPEC_NONE))
+					       UNSPEC_SME_ADD_WRITE))
 FUNCTION (svaddha_za, sme_1mode_function, (UNSPEC_SME_ADDHA,
-					   UNSPEC_SME_ADDHA, UNSPEC_NONE))
+					   UNSPEC_SME_ADDHA))
 FUNCTION (svaddva_za, sme_1mode_function, (UNSPEC_SME_ADDVA,
-					  UNSPEC_SME_ADDVA, UNSPEC_NONE))
-FUNCTION (svbmopa_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_BMOPA, UNSPEC_NONE))
-FUNCTION (svbmops_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_BMOPS, UNSPEC_NONE))
+					  UNSPEC_SME_ADDVA))
+FUNCTION (svbmopa_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_BMOPA))
+FUNCTION (svbmops_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_BMOPS))
 FUNCTION (svcntsb, svcnts_bhwd_impl, (VNx16QImode))
 FUNCTION (svcntsd, svcnts_bhwd_impl, (VNx2DImode))
 FUNCTION (svcntsh, svcnts_bhwd_impl, (VNx8HImode))
@@ -666,20 +666,18 @@ FUNCTION (svstr_zt, svstr_zt_impl, )
 FUNCTION (svsub_za, sme_1mode_function, (UNSPEC_SME_SUB, UNSPEC_SME_SUB,
 					 UNSPEC_SME_FSUB))
 FUNCTION (svsub_write_za, sme_1mode_function, (UNSPEC_SME_SUB_WRITE,
-					       UNSPEC_SME_SUB_WRITE, UNSPEC_NONE))
+					       UNSPEC_SME_SUB_WRITE))
 FUNCTION (svsudot_za, svsudot_za_impl,)
-FUNCTION (svsudot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SUDOT, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svsuvdot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SUVDOT,
-						      UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svsumopa_za, sme_2mode_function, (UNSPEC_SME_SUMOPA, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svsumops_za, sme_2mode_function, (UNSPEC_SME_SUMOPS, UNSPEC_NONE, UNSPEC_NONE))
+FUNCTION (svsudot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SUDOT))
+FUNCTION (svsuvdot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SUVDOT))
+FUNCTION (svsumopa_za, sme_2mode_function, (UNSPEC_SME_SUMOPA))
+FUNCTION (svsumops_za, sme_2mode_function, (UNSPEC_SME_SUMOPS))
 FUNCTION (svundef_za, svundef_za_impl, )
-FUNCTION (svusdot_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_USDOT, UNSPEC_NONE))
-FUNCTION (svusdot_lane_za, sme_2mode_lane_function, (UNSPEC_NONE, UNSPEC_SME_USDOT, UNSPEC_NONE))
-FUNCTION (svusvdot_lane_za, sme_2mode_lane_function, (UNSPEC_NONE, UNSPEC_SME_USVDOT,
-						      UNSPEC_NONE))
-FUNCTION (svusmopa_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_USMOPA, UNSPEC_NONE))
-FUNCTION (svusmops_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_USMOPS, UNSPEC_NONE))
+FUNCTION (svusdot_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_USDOT))
+FUNCTION (svusdot_lane_za, sme_2mode_lane_function, (UNSPEC_NONE, UNSPEC_SME_USDOT))
+FUNCTION (svusvdot_lane_za, sme_2mode_lane_function, (UNSPEC_NONE, UNSPEC_SME_USVDOT))
+FUNCTION (svusmopa_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_USMOPA))
+FUNCTION (svusmops_za, sme_2mode_function, (UNSPEC_NONE, UNSPEC_SME_USMOPS))
 FUNCTION (svvdot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SVDOT,
 						    UNSPEC_SME_UVDOT,
 						    UNSPEC_SME_FVDOT))
diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc b/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
index 0e7c3540a198..3c6b6f80445c 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
+++ b/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
@@ -504,9 +504,9 @@ public:
     /* Convert the rotation amount into a specific unspec.  */
     int rot = INTVAL (e.args.pop ());
     if (rot == 90)
-      return e.map_to_unspecs (UNSPEC_SQCADD90, UNSPEC_NONE, UNSPEC_NONE);
+      return e.map_to_unspecs (UNSPEC_SQCADD90);
     if (rot == 270)
-      return e.map_to_unspecs (UNSPEC_SQCADD270, UNSPEC_NONE, UNSPEC_NONE);
+      return e.map_to_unspecs (UNSPEC_SQCADD270);
     gcc_unreachable ();
   }
 };
@@ -541,7 +541,7 @@ class svqrshl_impl : public unspec_based_function
 {
 public:
   CONSTEXPR svqrshl_impl ()
-    : unspec_based_function (UNSPEC_SQRSHL, UNSPEC_UQRSHL, UNSPEC_NONE) {}
+    : unspec_based_function (UNSPEC_SQRSHL, UNSPEC_UQRSHL) {}
 
   gimple *
   fold (gimple_folder &f) const override
@@ -577,7 +577,7 @@ class svqshl_impl : public unspec_based_function
 {
 public:
   CONSTEXPR svqshl_impl ()
-    : unspec_based_function (UNSPEC_SQSHL, UNSPEC_UQSHL, UNSPEC_NONE) {}
+    : unspec_based_function (UNSPEC_SQSHL, UNSPEC_UQSHL) {}
 
   gimple *
   fold (gimple_folder &f) const override
@@ -614,7 +614,7 @@ class svrshl_impl : public unspec_based_function
 {
 public:
   CONSTEXPR svrshl_impl ()
-    : unspec_based_function (UNSPEC_SRSHL, UNSPEC_URSHL, UNSPEC_NONE) {}
+    : unspec_based_function (UNSPEC_SRSHL, UNSPEC_URSHL) {}
 
   gimple *
   fold (gimple_folder &f) const override
@@ -664,8 +664,8 @@ public:
     machine_mode mode = e.vector_mode (0);
     if (e.pred == PRED_x
 	&& aarch64_sve_sqadd_sqsub_immediate_p (mode, e.args[2], false))
-      return e.map_to_rtx_codes (UNKNOWN, US_PLUS, UNSPEC_NONE, UNSPEC_NONE);
-    return e.map_to_unspecs (UNSPEC_NONE, UNSPEC_USQADD, UNSPEC_NONE);
+      return e.map_to_rtx_codes (UNKNOWN, US_PLUS);
+    return e.map_to_unspecs (UNSPEC_NONE, UNSPEC_USQADD);
   }
 };
 
@@ -837,7 +837,7 @@ public:
     if (e.pred == PRED_x
 	&& aarch64_sve_arith_immediate_p (mode, e.args[2], false))
       return e.use_unpred_insn (code_for_aarch64_sve_suqadd_const (mode));
-    return e.map_to_unspecs (UNSPEC_SUQADD, UNSPEC_NONE, UNSPEC_NONE);
+    return e.map_to_unspecs (UNSPEC_SUQADD);
   }
 };
 
@@ -975,42 +975,40 @@ public:
 namespace aarch64_sve {
 
 FUNCTION (svaba, svaba_impl,)
-FUNCTION (svabalb, unspec_based_add_function, (UNSPEC_SABDLB,
-					       UNSPEC_UABDLB, UNSPEC_NONE))
-FUNCTION (svabalt, unspec_based_add_function, (UNSPEC_SABDLT,
-					       UNSPEC_UABDLT, UNSPEC_NONE))
-FUNCTION (svabdlb, unspec_based_function, (UNSPEC_SABDLB, UNSPEC_UABDLB, UNSPEC_NONE))
-FUNCTION (svabdlt, unspec_based_function, (UNSPEC_SABDLT, UNSPEC_UABDLT, UNSPEC_NONE))
-FUNCTION (svadalp, unspec_based_function, (UNSPEC_SADALP, UNSPEC_UADALP, UNSPEC_NONE))
-FUNCTION (svadclb, unspec_based_function, (UNSPEC_NONE, UNSPEC_ADCLB, UNSPEC_NONE))
-FUNCTION (svadclt, unspec_based_function, (UNSPEC_NONE, UNSPEC_ADCLT, UNSPEC_NONE))
-FUNCTION (svaddhnb, unspec_based_function, (UNSPEC_ADDHNB, UNSPEC_ADDHNB, UNSPEC_NONE))
-FUNCTION (svaddhnt, unspec_based_function, (UNSPEC_ADDHNT, UNSPEC_ADDHNT, UNSPEC_NONE))
-FUNCTION (svaddlb, unspec_based_function, (UNSPEC_SADDLB, UNSPEC_UADDLB, UNSPEC_NONE))
-FUNCTION (svaddlbt, unspec_based_function, (UNSPEC_SADDLBT, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svaddlt, unspec_based_function, (UNSPEC_SADDLT, UNSPEC_UADDLT, UNSPEC_NONE))
+FUNCTION (svabalb, unspec_based_add_function, (UNSPEC_SABDLB, UNSPEC_UABDLB))
+FUNCTION (svabalt, unspec_based_add_function, (UNSPEC_SABDLT, UNSPEC_UABDLT))
+FUNCTION (svabdlb, unspec_based_function, (UNSPEC_SABDLB, UNSPEC_UABDLB))
+FUNCTION (svabdlt, unspec_based_function, (UNSPEC_SABDLT, UNSPEC_UABDLT))
+FUNCTION (svadalp, unspec_based_function, (UNSPEC_SADALP, UNSPEC_UADALP))
+FUNCTION (svadclb, unspec_based_function, (UNSPEC_NONE, UNSPEC_ADCLB))
+FUNCTION (svadclt, unspec_based_function, (UNSPEC_NONE, UNSPEC_ADCLT))
+FUNCTION (svaddhnb, unspec_based_function, (UNSPEC_ADDHNB, UNSPEC_ADDHNB))
+FUNCTION (svaddhnt, unspec_based_function, (UNSPEC_ADDHNT, UNSPEC_ADDHNT))
+FUNCTION (svaddlb, unspec_based_function, (UNSPEC_SADDLB, UNSPEC_UADDLB))
+FUNCTION (svaddlbt, unspec_based_function, (UNSPEC_SADDLBT))
+FUNCTION (svaddlt, unspec_based_function, (UNSPEC_SADDLT, UNSPEC_UADDLT))
 FUNCTION (svaddp, unspec_based_pred_function, (UNSPEC_ADDP, UNSPEC_ADDP,
 					       UNSPEC_FADDP))
 FUNCTION (svaddqv, reduction, (UNSPEC_ADDQV, UNSPEC_ADDQV, UNSPEC_FADDQV))
-FUNCTION (svaddwb, unspec_based_function, (UNSPEC_SADDWB, UNSPEC_UADDWB, UNSPEC_NONE))
-FUNCTION (svaddwt, unspec_based_function, (UNSPEC_SADDWT, UNSPEC_UADDWT, UNSPEC_NONE))
+FUNCTION (svaddwb, unspec_based_function, (UNSPEC_SADDWB, UNSPEC_UADDWB))
+FUNCTION (svaddwt, unspec_based_function, (UNSPEC_SADDWT, UNSPEC_UADDWT))
 FUNCTION (svaesd, fixed_insn_function, (CODE_FOR_aarch64_sve2_aesd))
 FUNCTION (svaese, fixed_insn_function, (CODE_FOR_aarch64_sve2_aese))
 FUNCTION (svaesimc, fixed_insn_function, (CODE_FOR_aarch64_sve2_aesimc))
 FUNCTION (svaesmc, fixed_insn_function, (CODE_FOR_aarch64_sve2_aesmc))
 FUNCTION (svamax, faminmaximpl, (UNSPEC_COND_FAMAX, UNSPEC_FAMAX))
 FUNCTION (svamin, faminmaximpl, (UNSPEC_COND_FAMIN, UNSPEC_FAMIN))
-FUNCTION (svandqv, reduction, (UNSPEC_ANDQV, UNSPEC_ANDQV, UNSPEC_NONE))
+FUNCTION (svandqv, reduction, (UNSPEC_ANDQV, UNSPEC_ANDQV))
 FUNCTION (svbcax, CODE_FOR_MODE0 (aarch64_sve2_bcax),)
-FUNCTION (svbdep, unspec_based_function, (UNSPEC_BDEP, UNSPEC_BDEP, UNSPEC_NONE))
-FUNCTION (svbext, unspec_based_function, (UNSPEC_BEXT, UNSPEC_BEXT, UNSPEC_NONE))
+FUNCTION (svbdep, unspec_based_function, (UNSPEC_BDEP, UNSPEC_BDEP))
+FUNCTION (svbext, unspec_based_function, (UNSPEC_BEXT, UNSPEC_BEXT))
 FUNCTION (svbfmlslb, fixed_insn_function, (CODE_FOR_aarch64_sve_bfmlslbvnx4sf))
 FUNCTION (svbfmlslb_lane, fixed_insn_function,
 	  (CODE_FOR_aarch64_sve_bfmlslb_lanevnx4sf))
 FUNCTION (svbfmlslt, fixed_insn_function, (CODE_FOR_aarch64_sve_bfmlsltvnx4sf))
 FUNCTION (svbfmlslt_lane, fixed_insn_function,
 	  (CODE_FOR_aarch64_sve_bfmlslt_lanevnx4sf))
-FUNCTION (svbgrp, unspec_based_function, (UNSPEC_BGRP, UNSPEC_BGRP, UNSPEC_NONE))
+FUNCTION (svbgrp, unspec_based_function, (UNSPEC_BGRP, UNSPEC_BGRP))
 FUNCTION (svbsl, CODE_FOR_MODE0 (aarch64_sve2_bsl),)
 FUNCTION (svbsl1n, CODE_FOR_MODE0 (aarch64_sve2_bsl1n),)
 FUNCTION (svbsl2n, CODE_FOR_MODE0 (aarch64_sve2_bsl2n),)
@@ -1029,16 +1027,15 @@ FUNCTION (svcvtx, unspec_based_function, (UNSPEC_NONE, UNSPEC_NONE, UNSPEC_COND_
 FUNCTION (svcvtxnt, svcvtxnt_impl,)
 FUNCTION (svdup_laneq, svdup_laneq_impl,)
 FUNCTION (sveor3, CODE_FOR_MODE0 (aarch64_sve2_eor3),)
-FUNCTION (sveorbt, unspec_based_function, (UNSPEC_EORBT, UNSPEC_EORBT, UNSPEC_NONE))
-FUNCTION (sveorqv, reduction, (UNSPEC_EORQV, UNSPEC_EORQV, UNSPEC_NONE))
-FUNCTION (sveortb, unspec_based_function, (UNSPEC_EORTB, UNSPEC_EORTB, UNSPEC_NONE))
+FUNCTION (sveorbt, unspec_based_function, (UNSPEC_EORBT, UNSPEC_EORBT))
+FUNCTION (sveorqv, reduction, (UNSPEC_EORQV, UNSPEC_EORQV))
+FUNCTION (sveortb, unspec_based_function, (UNSPEC_EORTB, UNSPEC_EORTB))
 FUNCTION (svextq, svextq_impl,)
-FUNCTION (svhadd, unspec_based_function, (UNSPEC_SHADD, UNSPEC_UHADD, UNSPEC_NONE))
-FUNCTION (svhsub, unspec_based_function, (UNSPEC_SHSUB, UNSPEC_UHSUB, UNSPEC_NONE))
+FUNCTION (svhadd, unspec_based_function, (UNSPEC_SHADD, UNSPEC_UHADD))
+FUNCTION (svhsub, unspec_based_function, (UNSPEC_SHSUB, UNSPEC_UHSUB))
 FUNCTION (svhistcnt, CODE_FOR_MODE0 (aarch64_sve2_histcnt),)
 FUNCTION (svhistseg, CODE_FOR_MODE0 (aarch64_sve2_histseg),)
-FUNCTION (svhsubr, unspec_based_function_rotated, (UNSPEC_SHSUB,
-						   UNSPEC_UHSUB, UNSPEC_NONE))
+FUNCTION (svhsubr, unspec_based_function_rotated, (UNSPEC_SHSUB, UNSPEC_UHSUB))
 FUNCTION (svld1q_gather, svld1q_gather_impl,)
 FUNCTION (svld1udq, svld1uxq_impl, (VNx1DImode))
 FUNCTION (svld1uwq, svld1uxq_impl, (VNx1SImode))
@@ -1102,121 +1099,104 @@ FUNCTION (svmlslt, unspec_based_mls_function, (UNSPEC_SMULLT,
 FUNCTION (svmlslt_lane, unspec_based_mls_lane_function, (UNSPEC_SMULLT,
 							 UNSPEC_UMULLT,
 							 UNSPEC_FMLSLT))
-FUNCTION (svmovlb, svmovl_lb_impl, (UNSPEC_SSHLLB, UNSPEC_USHLLB, UNSPEC_NONE))
-FUNCTION (svmovlt, svmovl_lb_impl, (UNSPEC_SSHLLT, UNSPEC_USHLLT, UNSPEC_NONE))
-FUNCTION (svmullb, unspec_based_function, (UNSPEC_SMULLB, UNSPEC_UMULLB, UNSPEC_NONE))
+FUNCTION (svmovlb, svmovl_lb_impl, (UNSPEC_SSHLLB, UNSPEC_USHLLB))
+FUNCTION (svmovlt, svmovl_lb_impl, (UNSPEC_SSHLLT, UNSPEC_USHLLT))
+FUNCTION (svmullb, unspec_based_function, (UNSPEC_SMULLB, UNSPEC_UMULLB))
 FUNCTION (svmullb_lane, unspec_based_lane_function, (UNSPEC_SMULLB,
-						     UNSPEC_UMULLB, UNSPEC_NONE))
-FUNCTION (svmullt, unspec_based_function, (UNSPEC_SMULLT, UNSPEC_UMULLT, UNSPEC_NONE))
+						     UNSPEC_UMULLB))
+FUNCTION (svmullt, unspec_based_function, (UNSPEC_SMULLT, UNSPEC_UMULLT))
 FUNCTION (svmullt_lane, unspec_based_lane_function, (UNSPEC_SMULLT,
-						     UNSPEC_UMULLT, UNSPEC_NONE))
+						     UNSPEC_UMULLT))
 FUNCTION (svnbsl, CODE_FOR_MODE0 (aarch64_sve2_nbsl),)
 FUNCTION (svnmatch, svmatch_svnmatch_impl, (UNSPEC_NMATCH))
-FUNCTION (svorqv, reduction, (UNSPEC_ORQV, UNSPEC_ORQV, UNSPEC_NONE))
+FUNCTION (svorqv, reduction, (UNSPEC_ORQV, UNSPEC_ORQV))
 FUNCTION (svpext_lane, svpext_lane_impl,)
 FUNCTION (svpmov, svpmov_impl,)
 FUNCTION (svpmov_lane, svpmov_lane_impl,)
 FUNCTION (svpmul, CODE_FOR_MODE0 (aarch64_sve2_pmul),)
-FUNCTION (svpmullb, unspec_based_function, (UNSPEC_NONE, UNSPEC_PMULLB, UNSPEC_NONE))
-FUNCTION (svpmullb_pair, unspec_based_function, (UNSPEC_NONE, UNSPEC_PMULLB_PAIR, UNSPEC_NONE))
-FUNCTION (svpmullt, unspec_based_function, (UNSPEC_NONE, UNSPEC_PMULLT, UNSPEC_NONE))
-FUNCTION (svpmullt_pair, unspec_based_function, (UNSPEC_NONE, UNSPEC_PMULLT_PAIR, UNSPEC_NONE))
+FUNCTION (svpmullb, unspec_based_function, (UNSPEC_NONE, UNSPEC_PMULLB))
+FUNCTION (svpmullb_pair, unspec_based_function, (UNSPEC_NONE, UNSPEC_PMULLB_PAIR))
+FUNCTION (svpmullt, unspec_based_function, (UNSPEC_NONE, UNSPEC_PMULLT))
+FUNCTION (svpmullt_pair, unspec_based_function, (UNSPEC_NONE, UNSPEC_PMULLT_PAIR))
 FUNCTION (svpsel_lane, svpsel_lane_impl,)
-FUNCTION (svqabs, rtx_code_function, (SS_ABS, UNKNOWN, UNSPEC_NONE))
+FUNCTION (svqabs, rtx_code_function, (SS_ABS, UNKNOWN))
 FUNCTION (svqcadd, svqcadd_impl,)
 FUNCTION (svqcvt, integer_conversion, (UNSPEC_SQCVT, UNSPEC_SQCVTU,
-				       UNSPEC_UQCVT, UNSPEC_NONE))
+				       UNSPEC_UQCVT))
 FUNCTION (svqcvtn, integer_conversion, (UNSPEC_SQCVTN, UNSPEC_SQCVTUN,
-					UNSPEC_UQCVTN, UNSPEC_NONE))
-FUNCTION (svqdmlalb, unspec_based_qadd_function, (UNSPEC_SQDMULLB, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqdmlalb_lane, unspec_based_qadd_lane_function, (UNSPEC_SQDMULLB,
-							    UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqdmlalbt, unspec_based_qadd_function, (UNSPEC_SQDMULLBT, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqdmlalt, unspec_based_qadd_function, (UNSPEC_SQDMULLT, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqdmlalt_lane, unspec_based_qadd_lane_function, (UNSPEC_SQDMULLT,
-							    UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqdmlslb, unspec_based_qsub_function, (UNSPEC_SQDMULLB, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqdmlslb_lane, unspec_based_qsub_lane_function, (UNSPEC_SQDMULLB,
-							    UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqdmlslbt, unspec_based_qsub_function, (UNSPEC_SQDMULLBT, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqdmlslt, unspec_based_qsub_function, (UNSPEC_SQDMULLT, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqdmlslt_lane, unspec_based_qsub_lane_function, (UNSPEC_SQDMULLT,
-							    UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqdmulh, unspec_based_function, (UNSPEC_SQDMULH, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqdmulh_lane, unspec_based_lane_function, (UNSPEC_SQDMULH, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqdmullb, unspec_based_function, (UNSPEC_SQDMULLB, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqdmullb_lane, unspec_based_lane_function, (UNSPEC_SQDMULLB,
-						       UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqdmullt, unspec_based_function, (UNSPEC_SQDMULLT, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqdmullt_lane, unspec_based_lane_function, (UNSPEC_SQDMULLT,
-						       UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqneg, rtx_code_function, (SS_NEG, UNKNOWN, UNSPEC_NONE))
+					UNSPEC_UQCVTN))
+FUNCTION (svqdmlalb, unspec_based_qadd_function, (UNSPEC_SQDMULLB))
+FUNCTION (svqdmlalb_lane, unspec_based_qadd_lane_function, (UNSPEC_SQDMULLB))
+FUNCTION (svqdmlalbt, unspec_based_qadd_function, (UNSPEC_SQDMULLBT))
+FUNCTION (svqdmlalt, unspec_based_qadd_function, (UNSPEC_SQDMULLT))
+FUNCTION (svqdmlalt_lane, unspec_based_qadd_lane_function, (UNSPEC_SQDMULLT))
+FUNCTION (svqdmlslb, unspec_based_qsub_function, (UNSPEC_SQDMULLB))
+FUNCTION (svqdmlslb_lane, unspec_based_qsub_lane_function, (UNSPEC_SQDMULLB))
+FUNCTION (svqdmlslbt, unspec_based_qsub_function, (UNSPEC_SQDMULLBT))
+FUNCTION (svqdmlslt, unspec_based_qsub_function, (UNSPEC_SQDMULLT))
+FUNCTION (svqdmlslt_lane, unspec_based_qsub_lane_function, (UNSPEC_SQDMULLT))
+FUNCTION (svqdmulh, unspec_based_function, (UNSPEC_SQDMULH))
+FUNCTION (svqdmulh_lane, unspec_based_lane_function, (UNSPEC_SQDMULH))
+FUNCTION (svqdmullb, unspec_based_function, (UNSPEC_SQDMULLB))
+FUNCTION (svqdmullb_lane, unspec_based_lane_function, (UNSPEC_SQDMULLB))
+FUNCTION (svqdmullt, unspec_based_function, (UNSPEC_SQDMULLT))
+FUNCTION (svqdmullt_lane, unspec_based_lane_function, (UNSPEC_SQDMULLT))
+FUNCTION (svqneg, rtx_code_function, (SS_NEG, UNKNOWN))
 FUNCTION (svqrdcmlah, svqrdcmlah_impl,)
 FUNCTION (svqrdcmlah_lane, svqrdcmlah_lane_impl,)
-FUNCTION (svqrdmlah, unspec_based_function, (UNSPEC_SQRDMLAH, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqrdmlah_lane, unspec_based_lane_function, (UNSPEC_SQRDMLAH,
-						       UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqrdmlsh, unspec_based_function, (UNSPEC_SQRDMLSH, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqrdmlsh_lane, unspec_based_lane_function, (UNSPEC_SQRDMLSH,
-						       UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqrdmulh, unspec_based_function, (UNSPEC_SQRDMULH, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqrdmulh_lane, unspec_based_lane_function, (UNSPEC_SQRDMULH,
-						       UNSPEC_NONE, UNSPEC_NONE))
+FUNCTION (svqrdmlah, unspec_based_function, (UNSPEC_SQRDMLAH))
+FUNCTION (svqrdmlah_lane, unspec_based_lane_function, (UNSPEC_SQRDMLAH))
+FUNCTION (svqrdmlsh, unspec_based_function, (UNSPEC_SQRDMLSH))
+FUNCTION (svqrdmlsh_lane, unspec_based_lane_function, (UNSPEC_SQRDMLSH))
+FUNCTION (svqrdmulh, unspec_based_function, (UNSPEC_SQRDMULH))
+FUNCTION (svqrdmulh_lane, unspec_based_lane_function, (UNSPEC_SQRDMULH))
 FUNCTION (svqrshl, svqrshl_impl,)
 FUNCTION (svqrshr, unspec_based_uncond_function, (UNSPEC_SQRSHR,
 						  UNSPEC_UQRSHR, UNSPEC_NONE, UNSPEC_NONE, 1))
 FUNCTION (svqrshrn, unspec_based_uncond_function, (UNSPEC_SQRSHRN,
 						   UNSPEC_UQRSHRN, UNSPEC_NONE, UNSPEC_NONE, 1))
-FUNCTION (svqrshrnb, unspec_based_function, (UNSPEC_SQRSHRNB,
-					     UNSPEC_UQRSHRNB, UNSPEC_NONE))
-FUNCTION (svqrshrnt, unspec_based_function, (UNSPEC_SQRSHRNT,
-					     UNSPEC_UQRSHRNT, UNSPEC_NONE))
+FUNCTION (svqrshrnb, unspec_based_function, (UNSPEC_SQRSHRNB, UNSPEC_UQRSHRNB))
+FUNCTION (svqrshrnt, unspec_based_function, (UNSPEC_SQRSHRNT, UNSPEC_UQRSHRNT))
 FUNCTION (svqrshru, unspec_based_uncond_function, (UNSPEC_SQRSHRU, UNSPEC_NONE, UNSPEC_NONE, UNSPEC_NONE, 1))
 FUNCTION (svqrshrun, unspec_based_uncond_function, (UNSPEC_SQRSHRUN, UNSPEC_NONE, UNSPEC_NONE, UNSPEC_NONE, 1))
-FUNCTION (svqrshrunb, unspec_based_function, (UNSPEC_SQRSHRUNB, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqrshrunt, unspec_based_function, (UNSPEC_SQRSHRUNT, UNSPEC_NONE, UNSPEC_NONE))
+FUNCTION (svqrshrunb, unspec_based_function, (UNSPEC_SQRSHRUNB))
+FUNCTION (svqrshrunt, unspec_based_function, (UNSPEC_SQRSHRUNT))
 FUNCTION (svqshl, svqshl_impl,)
-FUNCTION (svqshlu, unspec_based_function, (UNSPEC_SQSHLU, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqshrnb, unspec_based_function, (UNSPEC_SQSHRNB,
-					    UNSPEC_UQSHRNB, UNSPEC_NONE))
-FUNCTION (svqshrnt, unspec_based_function, (UNSPEC_SQSHRNT,
-					    UNSPEC_UQSHRNT, UNSPEC_NONE))
-FUNCTION (svqshrunb, unspec_based_function, (UNSPEC_SQSHRUNB, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqshrunt, unspec_based_function, (UNSPEC_SQSHRUNT, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqsubr, rtx_code_function_rotated, (SS_MINUS, US_MINUS, UNSPEC_NONE))
-FUNCTION (svqxtnb, unspec_based_function, (UNSPEC_SQXTNB, UNSPEC_UQXTNB, UNSPEC_NONE))
-FUNCTION (svqxtnt, unspec_based_function, (UNSPEC_SQXTNT, UNSPEC_UQXTNT, UNSPEC_NONE))
-FUNCTION (svqxtunb, unspec_based_function, (UNSPEC_SQXTUNB, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svqxtunt, unspec_based_function, (UNSPEC_SQXTUNT, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svraddhnb, unspec_based_function, (UNSPEC_RADDHNB,
-					     UNSPEC_RADDHNB, UNSPEC_NONE))
-FUNCTION (svraddhnt, unspec_based_function, (UNSPEC_RADDHNT,
-					     UNSPEC_RADDHNT, UNSPEC_NONE))
+FUNCTION (svqshlu, unspec_based_function, (UNSPEC_SQSHLU))
+FUNCTION (svqshrnb, unspec_based_function, (UNSPEC_SQSHRNB, UNSPEC_UQSHRNB))
+FUNCTION (svqshrnt, unspec_based_function, (UNSPEC_SQSHRNT, UNSPEC_UQSHRNT))
+FUNCTION (svqshrunb, unspec_based_function, (UNSPEC_SQSHRUNB))
+FUNCTION (svqshrunt, unspec_based_function, (UNSPEC_SQSHRUNT))
+FUNCTION (svqsubr, rtx_code_function_rotated, (SS_MINUS, US_MINUS))
+FUNCTION (svqxtnb, unspec_based_function, (UNSPEC_SQXTNB, UNSPEC_UQXTNB))
+FUNCTION (svqxtnt, unspec_based_function, (UNSPEC_SQXTNT, UNSPEC_UQXTNT))
+FUNCTION (svqxtunb, unspec_based_function, (UNSPEC_SQXTUNB))
+FUNCTION (svqxtunt, unspec_based_function, (UNSPEC_SQXTUNT))
+FUNCTION (svraddhnb, unspec_based_function, (UNSPEC_RADDHNB, UNSPEC_RADDHNB))
+FUNCTION (svraddhnt, unspec_based_function, (UNSPEC_RADDHNT, UNSPEC_RADDHNT))
 FUNCTION (svrax1, fixed_insn_function, (CODE_FOR_aarch64_sve2_rax1))
 FUNCTION (svrevd, unspec_based_function, (UNSPEC_REVD, UNSPEC_REVD,
 					  UNSPEC_REVD))
-FUNCTION (svrhadd, unspec_based_function, (UNSPEC_SRHADD, UNSPEC_URHADD, UNSPEC_NONE))
+FUNCTION (svrhadd, unspec_based_function, (UNSPEC_SRHADD, UNSPEC_URHADD))
 FUNCTION (svrshl, svrshl_impl,)
-FUNCTION (svrshr, unspec_based_function, (UNSPEC_SRSHR, UNSPEC_URSHR, UNSPEC_NONE))
-FUNCTION (svrshrnb, unspec_based_function, (UNSPEC_RSHRNB, UNSPEC_RSHRNB, UNSPEC_NONE))
-FUNCTION (svrshrnt, unspec_based_function, (UNSPEC_RSHRNT, UNSPEC_RSHRNT, UNSPEC_NONE))
-FUNCTION (svrsra, unspec_based_add_function, (UNSPEC_SRSHR, UNSPEC_URSHR, UNSPEC_NONE))
-FUNCTION (svrsubhnb, unspec_based_function, (UNSPEC_RSUBHNB,
-					     UNSPEC_RSUBHNB, UNSPEC_NONE))
-FUNCTION (svrsubhnt, unspec_based_function, (UNSPEC_RSUBHNT,
-					     UNSPEC_RSUBHNT, UNSPEC_NONE))
-FUNCTION (svsbclb, unspec_based_function, (UNSPEC_NONE, UNSPEC_SBCLB, UNSPEC_NONE))
-FUNCTION (svsbclt, unspec_based_function, (UNSPEC_NONE, UNSPEC_SBCLT, UNSPEC_NONE))
-FUNCTION (svshllb, unspec_based_function, (UNSPEC_SSHLLB, UNSPEC_USHLLB, UNSPEC_NONE))
-FUNCTION (svshllt, unspec_based_function, (UNSPEC_SSHLLT, UNSPEC_USHLLT, UNSPEC_NONE))
-FUNCTION (svshrnb, unspec_based_function, (UNSPEC_SHRNB, UNSPEC_SHRNB, UNSPEC_NONE))
-FUNCTION (svshrnt, unspec_based_function, (UNSPEC_SHRNT, UNSPEC_SHRNT, UNSPEC_NONE))
-FUNCTION (svsli, unspec_based_function, (UNSPEC_SLI, UNSPEC_SLI, UNSPEC_NONE))
+FUNCTION (svrshr, unspec_based_function, (UNSPEC_SRSHR, UNSPEC_URSHR))
+FUNCTION (svrshrnb, unspec_based_function, (UNSPEC_RSHRNB, UNSPEC_RSHRNB))
+FUNCTION (svrshrnt, unspec_based_function, (UNSPEC_RSHRNT, UNSPEC_RSHRNT))
+FUNCTION (svrsra, unspec_based_add_function, (UNSPEC_SRSHR, UNSPEC_URSHR))
+FUNCTION (svrsubhnb, unspec_based_function, (UNSPEC_RSUBHNB, UNSPEC_RSUBHNB))
+FUNCTION (svrsubhnt, unspec_based_function, (UNSPEC_RSUBHNT, UNSPEC_RSUBHNT))
+FUNCTION (svsbclb, unspec_based_function, (UNSPEC_NONE, UNSPEC_SBCLB))
+FUNCTION (svsbclt, unspec_based_function, (UNSPEC_NONE, UNSPEC_SBCLT))
+FUNCTION (svshllb, unspec_based_function, (UNSPEC_SSHLLB, UNSPEC_USHLLB))
+FUNCTION (svshllt, unspec_based_function, (UNSPEC_SSHLLT, UNSPEC_USHLLT))
+FUNCTION (svshrnb, unspec_based_function, (UNSPEC_SHRNB, UNSPEC_SHRNB))
+FUNCTION (svshrnt, unspec_based_function, (UNSPEC_SHRNT, UNSPEC_SHRNT))
+FUNCTION (svsli, unspec_based_function, (UNSPEC_SLI, UNSPEC_SLI))
 FUNCTION (svsm4e, fixed_insn_function, (CODE_FOR_aarch64_sve2_sm4e))
 FUNCTION (svsm4ekey, fixed_insn_function, (CODE_FOR_aarch64_sve2_sm4ekey))
 FUNCTION (svsqadd, svsqadd_impl,)
 FUNCTION (svsra, svsra_impl,)
-FUNCTION (svsri, unspec_based_function, (UNSPEC_SRI, UNSPEC_SRI, UNSPEC_NONE))
+FUNCTION (svsri, unspec_based_function, (UNSPEC_SRI, UNSPEC_SRI))
 FUNCTION (svst1dq, svst1xq_impl, (VNx1DImode))
 FUNCTION (svst1q_scatter, svst1q_scatter_impl,)
 FUNCTION (svst1wq, svst1xq_impl, (VNx1SImode))
@@ -1227,14 +1207,14 @@ FUNCTION (svstnt1_scatter, svstnt1_scatter_impl,)
 FUNCTION (svstnt1b_scatter, svstnt1_scatter_truncate_impl, (QImode))
 FUNCTION (svstnt1h_scatter, svstnt1_scatter_truncate_impl, (HImode))
 FUNCTION (svstnt1w_scatter, svstnt1_scatter_truncate_impl, (SImode))
-FUNCTION (svsubhnb, unspec_based_function, (UNSPEC_SUBHNB, UNSPEC_SUBHNB, UNSPEC_NONE))
-FUNCTION (svsubhnt, unspec_based_function, (UNSPEC_SUBHNT, UNSPEC_SUBHNT, UNSPEC_NONE))
-FUNCTION (svsublb, unspec_based_function, (UNSPEC_SSUBLB, UNSPEC_USUBLB, UNSPEC_NONE))
-FUNCTION (svsublbt, unspec_based_function, (UNSPEC_SSUBLBT, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svsublt, unspec_based_function, (UNSPEC_SSUBLT, UNSPEC_USUBLT, UNSPEC_NONE))
-FUNCTION (svsubltb, unspec_based_function, (UNSPEC_SSUBLTB, UNSPEC_NONE, UNSPEC_NONE))
-FUNCTION (svsubwb, unspec_based_function, (UNSPEC_SSUBWB, UNSPEC_USUBWB, UNSPEC_NONE))
-FUNCTION (svsubwt, unspec_based_function, (UNSPEC_SSUBWT, UNSPEC_USUBWT, UNSPEC_NONE))
+FUNCTION (svsubhnb, unspec_based_function, (UNSPEC_SUBHNB, UNSPEC_SUBHNB))
+FUNCTION (svsubhnt, unspec_based_function, (UNSPEC_SUBHNT, UNSPEC_SUBHNT))
+FUNCTION (svsublb, unspec_based_function, (UNSPEC_SSUBLB, UNSPEC_USUBLB))
+FUNCTION (svsublbt, unspec_based_function, (UNSPEC_SSUBLBT))
+FUNCTION (svsublt, unspec_based_function, (UNSPEC_SSUBLT, UNSPEC_USUBLT))
+FUNCTION (svsubltb, unspec_based_function, (UNSPEC_SSUBLTB))
+FUNCTION (svsubwb, unspec_based_function, (UNSPEC_SSUBWB, UNSPEC_USUBWB))
+FUNCTION (svsubwt, unspec_based_function, (UNSPEC_SSUBWT, UNSPEC_USUBWT))
 FUNCTION (svtbl2, svtbl2_impl,)
 FUNCTION (svtblq, quiet<unspec_based_uncond_function>, (UNSPEC_TBLQ,
 							UNSPEC_TBLQ,
diff --git a/gcc/config/aarch64/aarch64-sve-builtins.h b/gcc/config/aarch64/aarch64-sve-builtins.h
index cac8904530af..ceddf044e2c6 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins.h
+++ b/gcc/config/aarch64/aarch64-sve-builtins.h
@@ -722,9 +722,11 @@ public:
   rtx use_contiguous_prefetch_insn (insn_code);
   rtx use_contiguous_store_insn (insn_code);
 
-  rtx map_to_rtx_codes (rtx_code, rtx_code, unspec, unspec,
+  rtx map_to_rtx_codes (rtx_code, rtx_code, unspec = UNSPEC_NONE,
+			unspec = UNSPEC_NONE,
 			unsigned int = DEFAULT_MERGE_ARGNO);
-  rtx map_to_unspecs (unspec, unspec, unspec, unsigned int = DEFAULT_MERGE_ARGNO);
+  rtx map_to_unspecs (unspec, unspec = UNSPEC_NONE, unspec = UNSPEC_NONE,
+		      unsigned int = DEFAULT_MERGE_ARGNO);
 
   /* The function call expression.  */
   tree call_expr;

Reply via email to