re PR tree-optimization/40556 (ICE in IPA-CP with recursion)

* ipa-cp.c (ipcp_read_summary): Remove now invalid FIXME and
	flag_ltrans check.
	* ipa-inline.c (cgraph_mark_inline_edge,
	cgraph_decide_inlining_of_small_function,
	cgraph_decide_inlining, inline_read_summary): Disable indirect inlining
	for WPA for time being.

	PR tree-optimize/40556                                                                                                                                         
	* ipa-inline.c (cgraph_early_inlining): Fix iterations condition.

Fix PR number for earlier patch to:
	PR lto/41730

From-SVN: r153456
This commit is contained in:
Jan Hubicka 2009-10-22 15:31:48 +02:00 committed by Jan Hubicka
parent 848af81ed5
commit 0d4958d022
3 changed files with 26 additions and 20 deletions

View File

@ -1,3 +1,15 @@
2009-10-22 Jan Hubicka <jh@suse.cz>
* ipa-cp.c (ipcp_read_summary): Remove now invalid FIXME and
flag_ltrans check.
* ipa-inline.c (cgraph_mark_inline_edge,
cgraph_decide_inlining_of_small_function,
cgraph_decide_inlining, inline_read_summary): Disable indirect inlining
for WPA for time being.
PR tree-optimize/40556
* ipa-inline.c (cgraph_early_inlining): Fix iterations condition.
2009-10-22 Richard Guenther <rguenther@suse.de>
* lto-streamer.h (lto_symtab_clear_resolution): Remove.
@ -5,7 +17,7 @@
2009-10-22 Jan Hubicka <jh@suse.cz>
PR tree-optimize/40556
PR lto/41730
* ipa-reference.c (has_proper_scope_for_analysis): Add fixme about
global vars.
(check_call): Handle only indirect calls.

View File

@ -1302,13 +1302,7 @@ ipcp_read_summary (void)
static bool
cgraph_gate_cp (void)
{
/* FIXME lto. IPA-CP does not tolerate running when the inlining decisions
have not been applied. This happens when WPA modifies the callgraph.
Since those decisions are not applied until after all the IPA passes
have been run in LTRANS, this means that IPA passes may see partially
modified callgraphs. The solution to this is to apply WPA decisions
early during LTRANS. */
return flag_ipa_cp && !flag_ltrans;
return flag_ipa_cp;
}
struct ipa_opt_pass_d pass_ipa_cp =

View File

@ -310,7 +310,7 @@ cgraph_mark_inline_edge (struct cgraph_edge *e, bool update_original,
overall_size -= orig_size;
ncalls_inlined++;
if (flag_indirect_inlining)
if (flag_indirect_inlining && !flag_wpa)
return ipa_propagate_indirect_call_infos (curr, new_edges);
else
return false;
@ -876,7 +876,7 @@ cgraph_decide_inlining_of_small_functions (void)
int min_size, max_size;
VEC (cgraph_edge_p, heap) *new_indirect_edges = NULL;
if (flag_indirect_inlining)
if (flag_indirect_inlining && !flag_wpa)
new_indirect_edges = VEC_alloc (cgraph_edge_p, heap, 8);
if (dump_file)
@ -1023,10 +1023,10 @@ cgraph_decide_inlining_of_small_functions (void)
if (where->global.inlined_to)
where = where->global.inlined_to;
if (!cgraph_decide_recursive_inlining (where,
flag_indirect_inlining
flag_indirect_inlining && !flag_wpa
? &new_indirect_edges : NULL))
continue;
if (flag_indirect_inlining)
if (flag_indirect_inlining && !flag_wpa)
add_new_edges_to_heap (heap, new_indirect_edges);
update_callee_keys (heap, where, updated_nodes);
}
@ -1045,7 +1045,7 @@ cgraph_decide_inlining_of_small_functions (void)
}
callee = edge->callee;
cgraph_mark_inline_edge (edge, true, &new_indirect_edges);
if (flag_indirect_inlining)
if (flag_indirect_inlining && !flag_wpa)
add_new_edges_to_heap (heap, new_indirect_edges);
update_callee_keys (heap, callee, updated_nodes);
@ -1114,7 +1114,7 @@ cgraph_decide_inlining (void)
int initial_size = 0;
cgraph_remove_function_insertion_hook (function_insertion_hook_holder);
if (in_lto_p && flag_indirect_inlining)
if (in_lto_p && flag_indirect_inlining && !flag_wpa)
ipa_update_after_lto_read ();
max_count = 0;
@ -1268,7 +1268,7 @@ cgraph_decide_inlining (void)
}
/* Free ipa-prop structures if they are no longer needed. */
if (flag_indirect_inlining)
if (flag_indirect_inlining && !flag_wpa)
free_all_ipa_structures_after_iinln ();
if (dump_file)
@ -1589,10 +1589,10 @@ cgraph_early_inlining (void)
if (sorrycount || errorcount)
return 0;
while (cgraph_decide_inlining_incrementally (node,
iterations
? INLINE_SIZE_NORECURSIVE : INLINE_SIZE, 0)
&& iterations < PARAM_VALUE (PARAM_EARLY_INLINER_MAX_ITERATIONS))
while (iterations < PARAM_VALUE (PARAM_EARLY_INLINER_MAX_ITERATIONS)
&& cgraph_decide_inlining_incrementally (node,
iterations
? INLINE_SIZE_NORECURSIVE : INLINE_SIZE, 0))
{
timevar_push (TV_INTEGRATION);
todo |= optimize_inline_calls (current_function_decl);
@ -1975,7 +1975,7 @@ inline_transform (struct cgraph_node *node)
static void
inline_read_summary (void)
{
if (flag_indirect_inlining)
if (flag_indirect_inlining && !flag_wpa)
{
ipa_register_cgraph_hooks ();
if (!flag_ipa_cp)