Hello, IMHO, no RTL pass implementation file should have to include tree.h. So ira-conflicts.c shouldn't need tree.h. The reason it needed it, was because there is code to avoid putting user variables in callee clobbered registers, and ira-conflict.c looked at DECL_ARTIFICIAL (REG_EXPR (reg)). But it can just look at REG_USERVAR_P(reg) instead, which is simper and cleaner.
Likewise, IMHO no CFG implementation files should need tree.h, because the CFG should be IR agnostic. But mcf.c needed tree.h for lang_hooks.decl_printable_name from langhooks.h. It can use current_function_name() instead. Bootstrapped and tested on powerpc64-unknown-linux-gnu. OK for trunk? Ciao! Steven * mcf.c: Do not include tm.h, tree.h, and langhooks.h. (dump_fixup_graph): Use current_function_name. (adjust_cfg_counts): Likewise. * ira-conflicts.c: Do not include tree.h. (ira_build_conflicts): Use REG_USERVAR_P instead of DECL_ARTIFICIAL. Index: mcf.c =================================================================== --- mcf.c (revision 189359) +++ mcf.c (working copy) @@ -46,13 +46,8 @@ along with GCC; see the file COPYING3. If not see #include "config.h" #include "system.h" #include "coretypes.h" -#include "tm.h" #include "basic-block.h" -#include "tree.h" /* FIXME: Only for langhooks.h. */ -#include "langhooks.h" -#include "tree.h" #include "gcov-io.h" - #include "profile.h" /* CAP_INFINITY: Constant to represent infinite capacity. */ @@ -290,7 +285,7 @@ dump_fixup_graph (FILE *file, fixup_graph_type *fi fnum_edges = fixup_graph->num_edges; fprintf (file, "\nDump fixup graph for %s(): %s.\n", - lang_hooks.decl_printable_name (current_function_decl, 2), msg); + current_function_name (), msg); fprintf (file, "There are %d vertices and %d edges. new_exit_index is %d.\n\n", fnum_vertices, fnum_edges, fixup_graph->new_exit_index); @@ -1280,8 +1275,8 @@ adjust_cfg_counts (fixup_graph_type *fixup_graph) if (dump_file) { fprintf (dump_file, "\nCheck %s() CFG flow conservation:\n", - lang_hooks.decl_printable_name (current_function_decl, 2)); - FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR->next_bb, EXIT_BLOCK_PTR, next_bb) + current_function_name ()); + FOR_EACH_BB (bb) { if ((bb->count != sum_edge_counts (bb->preds)) || (bb->count != sum_edge_counts (bb->succs))) Index: ira-conflicts.c =================================================================== --- ira-conflicts.c (revision 189359) +++ ira-conflicts.c (working copy) @@ -25,7 +25,6 @@ along with GCC; see the file COPYING3. If not see #include "tm.h" #include "regs.h" #include "rtl.h" -#include "tree.h" /* For DECL_ARTIFICIAL and friends. */ #include "tm_p.h" #include "target.h" #include "flags.h" @@ -893,17 +892,12 @@ ira_build_conflicts (void) for (i = 0; i < n; i++) { ira_object_t obj = ALLOCNO_OBJECT (a, i); - reg_attrs *attrs = REG_ATTRS (regno_reg_rtx [ALLOCNO_REGNO (a)]); - tree decl; + rtx allocno_reg = regno_reg_rtx [ALLOCNO_REGNO (a)]; if ((! flag_caller_saves && ALLOCNO_CALLS_CROSSED_NUM (a) != 0) /* For debugging purposes don't put user defined variables in callee-clobbered registers. */ - || (optimize == 0 - && attrs != NULL - && (decl = attrs->decl) != NULL - && VAR_OR_FUNCTION_DECL_P (decl) - && ! DECL_ARTIFICIAL (decl))) + || (optimize == 0 && REG_USERVAR_P (allocno_reg))) { IOR_HARD_REG_SET (OBJECT_TOTAL_CONFLICT_HARD_REGS (obj), call_used_reg_set);