diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1412a6ac87a..7e955d4c9e6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2013-04-05 Steven Bosscher + + * 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. + 2013-04-05 Greta Yorsh * config/arm/constraints.md (q): New constraint. diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c index 48d43a63dde..7605e17e7ef 100644 --- a/gcc/bb-reorder.c +++ b/gcc/bb-reorder.c @@ -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 diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 930ccd862fe..693d4db9014 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -1260,7 +1260,10 @@ cgraph_node_remove_callers (struct cgraph_node *node) 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 *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 (); diff --git a/gcc/ree.c b/gcc/ree.c index ff96df8a016..c60921239a7 100644 --- a/gcc/ree.c +++ b/gcc/ree.c @@ -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 */ } }; diff --git a/gcc/rtl.def b/gcc/rtl.def index 47a37623c6d..5da3dd3ec00 100644 --- a/gcc/rtl.def +++ b/gcc/rtl.def @@ -1290,8 +1290,41 @@ DEF_RTL_EXPR (ATTR_FLAG, "attr_flag", "s", RTX_EXTRA) 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 all 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 */ /*