Hi Soumya,

> On 10 Feb 2026, at 11:08, Soumya AR <[email protected]> wrote:
> 
> This patch fixes the following bugs:
> 
> 1) For SVE vector costs [sve_vec_cost], the JSON schema did not list the
> inherited members from the base structure, only the SVE specific ones. Updated
> the schema to include all the members and regenerated the printing/parsing
> routines.
> 
> 2) If someone uses -fdump-tuning-model with mcpu=olympus, it will have the 
> flag
> for dispatch scheduling enabled. Then, if someone uses that dump against any
> -mcpu other than olympus for tuning, it will ICE as we enable dispatch 
> scheduling
> but don't provide the data. Updated this to clear the flag if
> dispatch_constraints is NULL.
> 

Looks straightforward to me.
Ok if no objections in 24 hours.
Thanks,
Kyrill

> Signed-off-by: Soumya AR <[email protected]>
> 
> gcc/ChangeLog:
> 
> * config/aarch64/aarch64-json-schema.h: Include inherited members for
> SVE vector costs.
> * config/aarch64/aarch64-json-tunings-parser-generated.inc
> (parse_vec_costs_sve): Regenerate.
> * config/aarch64/aarch64-json-tunings-parser.cc
> (aarch64_load_tuning_params_from_json_string): Clear dispatch scheduling
> flag if dispatch_constraints is NULL.
> * config/aarch64/aarch64-json-tunings-printer-generated.inc
> (serialize_vec_costs_sve): Regenerate.
> ---
> gcc/config/aarch64/aarch64-json-schema.h      | 20 +++++++++++++++++++
> .../aarch64-json-tunings-parser-generated.inc | 20 +++++++++++++++++++
> .../aarch64/aarch64-json-tunings-parser.cc    | 14 +++++++++++++
> ...aarch64-json-tunings-printer-generated.inc | 20 +++++++++++++++++++
> 4 files changed, 74 insertions(+)
> 
> diff --git a/gcc/config/aarch64/aarch64-json-schema.h 
> b/gcc/config/aarch64/aarch64-json-schema.h
> index 32fb39300fe..9b6c5478d15 100644
> --- a/gcc/config/aarch64/aarch64-json-schema.h
> +++ b/gcc/config/aarch64/aarch64-json-schema.h
> @@ -176,6 +176,26 @@ static const char *schema_json = R"json(
> "store_cost": "int"
>       },
>       "sve": {
> + "int_stmt_cost": "int",
> + "fp_stmt_cost": "int",
> + "ld2_st2_permute_cost": "int",
> + "ld3_st3_permute_cost": "int",
> + "ld4_st4_permute_cost": "int",
> + "permute_cost": "int",
> + "reduc_i8_cost": "int",
> + "reduc_i16_cost": "int",
> + "reduc_i32_cost": "int",
> + "reduc_i64_cost": "int",
> + "reduc_f16_cost": "int",
> + "reduc_f32_cost": "int",
> + "reduc_f64_cost": "int",
> + "store_elt_extra_cost": "int",
> + "vec_to_scalar_cost": "int",
> + "scalar_to_vec_cost": "int",
> + "align_load_cost": "int",
> + "unalign_load_cost": "int",
> + "unalign_store_cost": "int",
> + "store_cost": "int",
> "clast_cost": "int",
> "fadda_f16_cost": "int",
> "fadda_f32_cost": "int",
> diff --git a/gcc/config/aarch64/aarch64-json-tunings-parser-generated.inc 
> b/gcc/config/aarch64/aarch64-json-tunings-parser-generated.inc
> index 882d8f79975..7943dea6ece 100644
> --- a/gcc/config/aarch64/aarch64-json-tunings-parser-generated.inc
> +++ b/gcc/config/aarch64/aarch64-json-tunings-parser-generated.inc
> @@ -175,6 +175,26 @@ template <typename T>
> static void
> parse_vec_costs_sve (const json::object *jo, T &sve)
> {
> +  PARSE_INTEGER_FIELD (jo, "int_stmt_cost", sve.int_stmt_cost);
> +  PARSE_INTEGER_FIELD (jo, "fp_stmt_cost", sve.fp_stmt_cost);
> +  PARSE_INTEGER_FIELD (jo, "ld2_st2_permute_cost", sve.ld2_st2_permute_cost);
> +  PARSE_INTEGER_FIELD (jo, "ld3_st3_permute_cost", sve.ld3_st3_permute_cost);
> +  PARSE_INTEGER_FIELD (jo, "ld4_st4_permute_cost", sve.ld4_st4_permute_cost);
> +  PARSE_INTEGER_FIELD (jo, "permute_cost", sve.permute_cost);
> +  PARSE_INTEGER_FIELD (jo, "reduc_i8_cost", sve.reduc_i8_cost);
> +  PARSE_INTEGER_FIELD (jo, "reduc_i16_cost", sve.reduc_i16_cost);
> +  PARSE_INTEGER_FIELD (jo, "reduc_i32_cost", sve.reduc_i32_cost);
> +  PARSE_INTEGER_FIELD (jo, "reduc_i64_cost", sve.reduc_i64_cost);
> +  PARSE_INTEGER_FIELD (jo, "reduc_f16_cost", sve.reduc_f16_cost);
> +  PARSE_INTEGER_FIELD (jo, "reduc_f32_cost", sve.reduc_f32_cost);
> +  PARSE_INTEGER_FIELD (jo, "reduc_f64_cost", sve.reduc_f64_cost);
> +  PARSE_INTEGER_FIELD (jo, "store_elt_extra_cost", sve.store_elt_extra_cost);
> +  PARSE_INTEGER_FIELD (jo, "vec_to_scalar_cost", sve.vec_to_scalar_cost);
> +  PARSE_INTEGER_FIELD (jo, "scalar_to_vec_cost", sve.scalar_to_vec_cost);
> +  PARSE_INTEGER_FIELD (jo, "align_load_cost", sve.align_load_cost);
> +  PARSE_INTEGER_FIELD (jo, "unalign_load_cost", sve.unalign_load_cost);
> +  PARSE_INTEGER_FIELD (jo, "unalign_store_cost", sve.unalign_store_cost);
> +  PARSE_INTEGER_FIELD (jo, "store_cost", sve.store_cost);
>   PARSE_INTEGER_FIELD (jo, "clast_cost", sve.clast_cost);
>   PARSE_INTEGER_FIELD (jo, "fadda_f16_cost", sve.fadda_f16_cost);
>   PARSE_INTEGER_FIELD (jo, "fadda_f32_cost", sve.fadda_f32_cost);
> diff --git a/gcc/config/aarch64/aarch64-json-tunings-parser.cc 
> b/gcc/config/aarch64/aarch64-json-tunings-parser.cc
> index 59c745e347e..9b7bdf535c9 100644
> --- a/gcc/config/aarch64/aarch64-json-tunings-parser.cc
> +++ b/gcc/config/aarch64/aarch64-json-tunings-parser.cc
> @@ -496,6 +496,20 @@ aarch64_load_tuning_params_from_json_string (const char 
> *json_string,
>     }
> 
>   parse_tunings (jo, *tune);
> +
> +  /* dispatch_constraints are not represented in JSON tunings.  If the JSON
> +     sets DISPATCH_SCHED in extra_tuning_flags but the base model does not
> +     provide dispatch_constraints, clear the flag to avoid an assertion
> +     failure later.  */
> +  if ((tune->extra_tuning_flags & AARCH64_EXTRA_TUNE_DISPATCH_SCHED)
> +      && tune->dispatch_constraints == nullptr)
> +    {
> +      warning (0, "JSON tuning enables dispatch scheduling but "
> +       "%<dispatch_constraints%> is not available; "
> +       "disabling dispatch scheduling");
> +      tune->extra_tuning_flags &= ~AARCH64_EXTRA_TUNE_DISPATCH_SCHED;
> +    }
> +
>   return;
> }
> 
> diff --git a/gcc/config/aarch64/aarch64-json-tunings-printer-generated.inc 
> b/gcc/config/aarch64/aarch64-json-tunings-printer-generated.inc
> index 498be96ff33..e619a39749d 100644
> --- a/gcc/config/aarch64/aarch64-json-tunings-printer-generated.inc
> +++ b/gcc/config/aarch64/aarch64-json-tunings-printer-generated.inc
> @@ -209,6 +209,26 @@ serialize_vec_costs_sve (const T &sve)
> {
>   auto sve_obj = std::make_unique<json::object> ();
> 
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "int_stmt_cost", sve.int_stmt_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "fp_stmt_cost", sve.fp_stmt_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "ld2_st2_permute_cost", 
> sve.ld2_st2_permute_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "ld3_st3_permute_cost", 
> sve.ld3_st3_permute_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "ld4_st4_permute_cost", 
> sve.ld4_st4_permute_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "permute_cost", sve.permute_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "reduc_i8_cost", sve.reduc_i8_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "reduc_i16_cost", sve.reduc_i16_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "reduc_i32_cost", sve.reduc_i32_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "reduc_i64_cost", sve.reduc_i64_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "reduc_f16_cost", sve.reduc_f16_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "reduc_f32_cost", sve.reduc_f32_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "reduc_f64_cost", sve.reduc_f64_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "store_elt_extra_cost", 
> sve.store_elt_extra_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "vec_to_scalar_cost", 
> sve.vec_to_scalar_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "scalar_to_vec_cost", 
> sve.scalar_to_vec_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "align_load_cost", sve.align_load_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "unalign_load_cost", 
> sve.unalign_load_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "unalign_store_cost", 
> sve.unalign_store_cost);
> +  SERIALIZE_INTEGER_FIELD (sve_obj, "store_cost", sve.store_cost);
>   SERIALIZE_INTEGER_FIELD (sve_obj, "clast_cost", sve.clast_cost);
>   SERIALIZE_INTEGER_FIELD (sve_obj, "fadda_f16_cost", sve.fadda_f16_cost);
>   SERIALIZE_INTEGER_FIELD (sve_obj, "fadda_f32_cost", sve.fadda_f32_cost);
> -- 
> 2.43.0
> 

Reply via email to