> > 2013-06-11 Martin Jambor <mjam...@suse.cz> > > PR tree-optimization/57358 > * ipa-prop.c (ipa_func_spec_opts_forbid_analysis_p): New function. > (ipa_compute_jump_functions_for_edge): Bail out if it returns true. > (ipa_analyze_params_uses): Generate pessimistic info when true. > > testsuite > * gcc.dg/ipa/pr57358.c: New test. > > Index: src/gcc/ipa-prop.c > =================================================================== > --- src.orig/gcc/ipa-prop.c > +++ src/gcc/ipa-prop.c > @@ -78,6 +78,21 @@ struct ipa_cst_ref_desc > > static alloc_pool ipa_refdesc_pool; > > +/* Return true if DECL_FUNCTION_SPECIFIC_OPTIMIZATION of the decl associated > + with NODE should prevent us from analyzing it for the purposes of IPA-CP. > */ > + > +static bool > +ipa_func_spec_opts_forbid_analysis_p (struct cgraph_node *node) > +{ > + tree fs_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (node->symbol.decl); > + struct cl_optimization *os; > + > + if (!fs_opts) > + return false; > + os = TREE_OPTIMIZATION (fs_opts); > + return !os->x_optimize || !os->x_flag_ipa_cp; > +}
Hmm, somewhat ugly, but I suppose it is as ugly as it needs to be. I wonder about the other IPA passes. Do we want to always ignore them? How the ICE happens? Is it because we don't do the analysis? Honza