"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",
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);
}
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;
}
{
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);