Hello, Just some things I've had in my tree for a while now, ChangeLog says it all:
* bb-reorder.c (fix_crossing_unconditional_branches): Remove a set-but-unused variable. * cgraph.c (cgraph_release_function_body): Clear cfun->cfg to make basic blocks of released function bodies garbage-collectable. * ree.c (find_and_remove_re): Do not call df_finish_pass here. (struct rtl_opt_pass): Add TODO_df_finish. * rtl.def (DEFINE_SUBST, DEFINE_SUBST_ATTR): Add documentation. Bootstrapped&tested on powerpc64-unknown-linux-gnu. OK for trunk? Ciao! Steven
* bb-reorder.c (fix_crossing_unconditional_branches): Remove a set-but-unused variable. * cgraph.c (cgraph_release_function_body): Clear cfun->cfg to make basic blocks of released function bodies garbage-collectable. * ree.c (find_and_remove_re): Do not call df_finish_pass here. (struct rtl_opt_pass): Add TODO_df_finish. * rtl.def (DEFINE_SUBST, DEFINE_SUBST_ATTR): Add documentation. Index: bb-reorder.c =================================================================== --- bb-reorder.c (revision 197491) +++ bb-reorder.c (working copy) @@ -1998,14 +1998,12 @@ fix_crossing_unconditional_branches (void) if (JUMP_P (last_insn) && (succ->flags & EDGE_CROSSING)) { - rtx label2; - gcc_assert (!any_condjump_p (last_insn)); /* Make sure the jump is not already an indirect or table jump. */ if (!computed_jump_p (last_insn) - && !tablejump_p (last_insn, &label2, NULL)) + && !tablejump_p (last_insn, NULL, NULL)) { /* We have found a "crossing" unconditional branch. Now we must convert it to an indirect jump. First create Index: cgraph.c =================================================================== --- cgraph.c (revision 197491) +++ cgraph.c (working copy) @@ -1260,7 +1260,10 @@ cgraph_node_remove_callers (struct cgraph_node *no node->callers = NULL; } -/* Release memory used to represent body of function NODE. */ +/* Release memory used to represent body of function NODE. + Use this only for functions that are released before being translated to + target code (i.e. RTL). Functions that are compiled to RTL and beyond + are free'd in final.c via free_after_compilation(). */ void cgraph_release_function_body (struct cgraph_node *node) @@ -1285,6 +1288,7 @@ cgraph_release_function_body (struct cgraph_node * gcc_assert (dom_computed[0] == DOM_NONE); gcc_assert (dom_computed[1] == DOM_NONE); clear_edges (); + cfun->cfg = NULL; } if (cfun->value_histograms) free_histograms (); Index: ree.c =================================================================== --- ree.c (revision 197491) +++ ree.c (working copy) @@ -919,8 +919,6 @@ find_and_remove_re (void) if (dump_file && num_re_opportunities > 0) fprintf (dump_file, "Elimination opportunities = %d realized = %d\n", num_re_opportunities, num_realized); - - df_finish_pass (false); } /* Find and remove redundant extensions. */ @@ -958,7 +956,8 @@ struct rtl_opt_pass pass_ree = 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - TODO_ggc_collect | - TODO_verify_rtl_sharing, /* todo_flags_finish */ + TODO_df_finish + | TODO_ggc_collect + | TODO_verify_rtl_sharing, /* todo_flags_finish */ } }; Index: rtl.def =================================================================== --- rtl.def (revision 197491) +++ rtl.def (working copy) @@ -1290,8 +1290,41 @@ DEF_RTL_EXPR (ATTR_FLAG, "attr_flag", "s", RTX_EXT true, the second operand will be used as the value of the conditional. */ DEF_RTL_EXPR(COND, "cond", "Ee", RTX_EXTRA) +/* Definition of a pattern substitution meta operation on a DEFINE_EXPAND + or a DEFINE_INSN. Automatically generates new instances of DEFINE_INSNs + that match the substitution pattern. + + Operand: + 0: The name of the substitition template. + 1: Input template to match to see if a substitution is applicable. + 2: A C expression giving an additional condition for the generated + new define_expand or define_insn. + 3: Output tempalate to generate via substitution. + + Within a DEFINE_SUBST template, the meaning of some RTL expressions is + different from their usual interpretation: a MATCH_OPERAND matches any + expression tree with matching machine mode or with VOIDmode. Likewise, + MATCH_OP_DUP and MATCH_DUP match more liberally in a DEFINE_SUBST than + in other RTL expressions. MATCH_OPERATOR matches allc common operators + but also UNSPEC, UNSPEC_VOLATILE, and MATCH_OPERATORS from the input + DEFINE_EXPAND or DEFINE_INSN. */ DEF_RTL_EXPR(DEFINE_SUBST, "define_subst", "sEsE", RTX_EXTRA) + +/* Substitution attribute to apply a DEFINE_SUBST to a pattern. + + Operand: + 0: The name of the subst-attribute. + 1: The name of the DEFINE_SUBST to be applied for this attribute. + 2: String to substitute for the subst-attribute name in the pattern + name, for the case that the DEFINE_SUBST is not applied (i.e. the + unmodified version of the pattern). + 3: String to substitute for the subst-attribute name in the pattern + name, for the case that the DEFINE_SUBST is applied to the patten. + + The use of DEFINE_SUBST and DEFINE_SUBST_ATTR is explained in the + GCC internals manual, under "RTL Templates Transformations". */ DEF_RTL_EXPR(DEFINE_SUBST_ATTR, "define_subst_attr", "ssss", RTX_EXTRA) + #endif /* GENERATOR_FILE */ /*