https://gcc.gnu.org/g:92d206fab98c71b25325399fc8c053c3caa8ddce
commit r17-1827-g92d206fab98c71b25325399fc8c053c3caa8ddce Author: Richard Biener <[email protected]> Date: Wed Jun 24 15:13:31 2026 +0200 Forward declare tree_code in coretypes.h The following changes the reassociation_width target hook to take a tree_code after recognizing the x86 hook compares against rtx_code PLUS. Like rtx_code we can now forward declare tree_code to achieve that. gcc/ * coretypes.h (enum tree_code): Declare. * tree-core.h (enum tree_code): Adjust. * target.def (reassociation_width): Get a tree_code instead of unsigned int. * doc/tm.texi: Regenerate. * genmatch.cc (enum tree_code): Adjust. * gimple-loop-versioning.cc (address_info_hasher::hash): Likewise. * config/aarch64/aarch64.cc (aarch64_reassociation_width): Likewise. * config/loongarch/loongarch.cc (loongarch_cpu_sched_reassociation_width): Likewise. * config/mips/mips.cc (mips_sched_reassociation_width): Likewise. * config/rs6000/rs6000.cc (rs6000_reassociation_width): Likewise. * config/i386/i386.cc (ix86_reassociation_width): Likewise and fix bogus compares. gcc/cp/ * module.cc (trees_out::decl_value): Adjust for enum class tree_code. Diff: --- gcc/config/aarch64/aarch64.cc | 2 +- gcc/config/i386/i386.cc | 6 +++--- gcc/config/loongarch/loongarch.cc | 5 +---- gcc/config/mips/mips.cc | 2 +- gcc/config/rs6000/rs6000.cc | 2 +- gcc/coretypes.h | 3 +++ gcc/cp/module.cc | 4 ++-- gcc/doc/tm.texi | 2 +- gcc/genmatch.cc | 2 +- gcc/gimple-loop-versioning.cc | 2 +- gcc/target.def | 2 +- gcc/tree-core.h | 2 +- 12 files changed, 17 insertions(+), 17 deletions(-) diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 9dd19d81d7bc..8dc3c43c8120 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -1528,7 +1528,7 @@ aarch64_min_divisions_for_recip_mul (machine_mode mode) /* Return the reassociation width of treeop OPC with mode MODE. */ static int -aarch64_reassociation_width (unsigned opc, machine_mode mode) +aarch64_reassociation_width (tree_code opc, machine_mode mode) { if (VECTOR_MODE_P (mode)) return aarch64_tune_params.vec_reassoc_width; diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc index 33b4c13d0fa3..e66958db7acb 100644 --- a/gcc/config/i386/i386.cc +++ b/gcc/config/i386/i386.cc @@ -25842,7 +25842,7 @@ ix86_enum_va_list (int idx, const char **pname, tree *ptree) is passed in MODE. */ static int -ix86_reassociation_width (unsigned int op, machine_mode mode) +ix86_reassociation_width (tree_code op, machine_mode mode) { int width = 1; /* Vector part. */ @@ -25865,12 +25865,12 @@ ix86_reassociation_width (unsigned int op, machine_mode mode) || ix86_tune == PROCESSOR_C86_4G_M6 || ix86_tune == PROCESSOR_C86_4G_M7 || ix86_tune == PROCESSOR_C86_4G_M8) - && INTEGRAL_MODE_P (mode) && op != PLUS && op != MINUS) + && INTEGRAL_MODE_P (mode) && op != PLUS_EXPR && op != MINUS_EXPR) return 1; /* Znver5 can do 2 integer multiplications per cycle with latency of 3. */ if ((ix86_tune == PROCESSOR_ZNVER5 || ix86_tune == PROCESSOR_ZNVER6) - && INTEGRAL_MODE_P (mode) && op != PLUS && op != MINUS) + && INTEGRAL_MODE_P (mode) && op != PLUS_EXPR && op != MINUS_EXPR) width = 6; /* Account for targets that splits wide vectors into multiple parts. */ diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 131f7b3f57b6..1192c85e0f1e 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -9999,11 +9999,8 @@ loongarch_vectorize_vec_perm_const (machine_mode vmode, machine_mode op_mode, static int loongarch_cpu_sched_reassociation_width (struct loongarch_target *target, - unsigned int opc, machine_mode mode) + tree_code opc, machine_mode mode) { - /* unreferenced argument */ - (void) opc; - switch (target->cpu_tune) { case TUNE_GENERIC: diff --git a/gcc/config/mips/mips.cc b/gcc/config/mips/mips.cc index 303766db5229..277ec4198260 100644 --- a/gcc/config/mips/mips.cc +++ b/gcc/config/mips/mips.cc @@ -22328,7 +22328,7 @@ mips_expand_msa_reduc (rtx (*fn) (rtx, rtx, rtx), rtx dest, rtx in) /* Implement TARGET_SCHED_REASSOCIATION_WIDTH. */ static int -mips_sched_reassociation_width (unsigned int opc ATTRIBUTE_UNUSED, +mips_sched_reassociation_width (tree_code opc ATTRIBUTE_UNUSED, machine_mode mode) { if (MSA_SUPPORTED_MODE_P (mode)) diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index afe5d45c1259..86d06cfdaa67 100644 --- a/gcc/config/rs6000/rs6000.cc +++ b/gcc/config/rs6000/rs6000.cc @@ -10157,7 +10157,7 @@ rs6000_offsettable_memref_p (rtx op, machine_mode reg_mode, bool strict) */ static int -rs6000_reassociation_width (unsigned int opc ATTRIBUTE_UNUSED, +rs6000_reassociation_width (tree_code opc ATTRIBUTE_UNUSED, machine_mode mode) { switch (rs6000_tune) diff --git a/gcc/coretypes.h b/gcc/coretypes.h index 61f91cd27458..5cc602ed7e5d 100644 --- a/gcc/coretypes.h +++ b/gcc/coretypes.h @@ -105,6 +105,9 @@ enum tree_index : unsigned; /* Forward declare rtx_code, so that we can use it in target hooks without needing to pull in rtl.h. */ enum rtx_code : unsigned; +/* Forward declare tree_code, so that we can use it in target hooks without + needing to pull in tree-core.h. */ +enum tree_code : unsigned; /* Forward decls for leaf gimple subclasses (for individual gimple codes). Keep this in the same order as the corresponding codes in gimple.def. */ diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index 060d2ba344c7..f250dc3e9dfe 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -8442,7 +8442,7 @@ trees_out::decl_value (tree decl, depset *dep) && TYPE_NAME (type) == inner); if (streaming_p ()) - u (has_type ? TREE_CODE (type) : 0); + u (has_type ? (unsigned) TREE_CODE (type) : 0); if (has_type) { @@ -8459,7 +8459,7 @@ trees_out::decl_value (tree decl, depset *dep) stub_decl = TYPE_STUB_DECL (type); bool has_stub = inner != stub_decl; if (streaming_p ()) - u (has_stub ? TREE_CODE (stub_decl) : 0); + u (has_stub ? (unsigned) TREE_CODE (stub_decl) : 0); if (has_stub) { stub_tag = insert (stub_decl); diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index e726745a8e15..94a5f265c140 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -7878,7 +7878,7 @@ the order of instructions is important for correctness when scheduling, but also the latencies of operations. @end deftypevr -@deftypefn {Target Hook} int TARGET_SCHED_REASSOCIATION_WIDTH (unsigned int @var{opc}, machine_mode @var{mode}) +@deftypefn {Target Hook} int TARGET_SCHED_REASSOCIATION_WIDTH (tree_code @var{opc}, machine_mode @var{mode}) This hook is called by tree reassociator to determine a level of parallelism required in output calculations chain. @end deftypefn diff --git a/gcc/genmatch.cc b/gcc/genmatch.cc index 8ee7ae66e469..920cf27877d3 100644 --- a/gcc/genmatch.cc +++ b/gcc/genmatch.cc @@ -999,7 +999,7 @@ choose_output (const vec<FILE *> &parts) definition files. */ #define DEFTREECODE(SYM, STRING, TYPE, NARGS) SYM, -enum tree_code { +enum tree_code : unsigned { #include "tree.def" MAX_TREE_CODES }; diff --git a/gcc/gimple-loop-versioning.cc b/gcc/gimple-loop-versioning.cc index 71bf1b2f256a..fa014f47b8e5 100644 --- a/gcc/gimple-loop-versioning.cc +++ b/gcc/gimple-loop-versioning.cc @@ -449,7 +449,7 @@ hashval_t address_info_hasher::hash (const address_info *info) { inchash::hash hash; - hash.add_int (info->base ? TREE_CODE (info->base) : 0); + hash.add_int (info->base ? (unsigned) TREE_CODE (info->base) : 0); hash.add_int (info->terms.length ()); for (unsigned int i = 0; i < info->terms.length (); ++i) { diff --git a/gcc/target.def b/gcc/target.def index 89788a26986c..3f28768fdf0e 100644 --- a/gcc/target.def +++ b/gcc/target.def @@ -1535,7 +1535,7 @@ DEFHOOK (reassociation_width, "This hook is called by tree reassociator to determine a level of\n\ parallelism required in output calculations chain.", -int, (unsigned int opc, machine_mode mode), +int, (tree_code opc, machine_mode mode), hook_int_uint_mode_1) /* The following member value is a function that returns priority for diff --git a/gcc/tree-core.h b/gcc/tree-core.h index 09c07c5c1297..6992a5acf81e 100644 --- a/gcc/tree-core.h +++ b/gcc/tree-core.h @@ -151,7 +151,7 @@ struct die_struct; #define DEFTREECODE(SYM, STRING, TYPE, NARGS) SYM, #define END_OF_BASE_TREE_CODES LAST_AND_UNUSED_TREE_CODE, -enum tree_code { +enum tree_code : unsigned { #include "all-tree.def" MAX_TREE_CODES };
