> Ping.
OK,
thanks!
Honza
>
> Thanks,
>
> Martin
>
> On Wed, Sep 11, 2013 at 03:02:02PM +0200, Martin Jambor wrote:
> > Hi,
> >
> > edge_within_scc should really be a part of API accompanying
> > ipa_reduced_postorder just like ipa_get_nodes_in_cycle and so this
> > patch moves it to ipa-utils.c and gives it the ipa_ prefix.
> >
> > Bootstrapped and tested on x86_64-linux. OK for trunk?
> >
> > Thanks,
> >
> > Martin
> >
> >
> >
> > 2013-09-10 Martin Jambor <mjam...@suse.cz>
> >
> > * ipa-utils.h (ipa_edge_within_scc): Declare.
> > * ipa-cp.c (edge_within_scc): Moved...
> > * ipa-utils.c (ipa_edge_within_scc): ...here. Updated all callers.
> >
> > Index: src/gcc/ipa-utils.c
> > ===================================================================
> > --- src.orig/gcc/ipa-utils.c
> > +++ src/gcc/ipa-utils.c
> > @@ -253,6 +253,22 @@ ipa_get_nodes_in_cycle (struct cgraph_no
> > return v;
> > }
> >
> > +/* Return true iff the CS is an edge within a strongly connected component
> > as
> > + computed by ipa_reduced_postorder. */
> > +
> > +bool
> > +ipa_edge_within_scc (struct cgraph_edge *cs)
> > +{
> > + struct ipa_dfs_info *caller_dfs = (struct ipa_dfs_info *)
> > cs->caller->symbol.aux;
> > + struct ipa_dfs_info *callee_dfs;
> > + struct cgraph_node *callee = cgraph_function_node (cs->callee, NULL);
> > +
> > + callee_dfs = (struct ipa_dfs_info *) callee->symbol.aux;
> > + return (caller_dfs
> > + && callee_dfs
> > + && caller_dfs->scc_no == callee_dfs->scc_no);
> > +}
> > +
> > struct postorder_stack
> > {
> > struct cgraph_node *node;
> > Index: src/gcc/ipa-utils.h
> > ===================================================================
> > --- src.orig/gcc/ipa-utils.h
> > +++ src/gcc/ipa-utils.h
> > @@ -42,6 +42,7 @@ int ipa_reduced_postorder (struct cgraph
> > bool (*ignore_edge) (struct cgraph_edge *));
> > void ipa_free_postorder_info (void);
> > vec<cgraph_node_ptr> ipa_get_nodes_in_cycle (struct cgraph_node *);
> > +bool ipa_edge_within_scc (struct cgraph_edge *);
> > int ipa_reverse_postorder (struct cgraph_node **);
> > tree get_base_var (tree);
> > void ipa_merge_profiles (struct cgraph_node *dst,
> > Index: src/gcc/ipa-cp.c
> > ===================================================================
> > --- src.orig/gcc/ipa-cp.c
> > +++ src/gcc/ipa-cp.c
> > @@ -287,22 +287,6 @@ ipa_lat_is_single_const (struct ipcp_lat
> > return true;
> > }
> >
> > -/* Return true iff the CS is an edge within a strongly connected component
> > as
> > - computed by ipa_reduced_postorder. */
> > -
> > -static inline bool
> > -edge_within_scc (struct cgraph_edge *cs)
> > -{
> > - struct ipa_dfs_info *caller_dfs = (struct ipa_dfs_info *)
> > cs->caller->symbol.aux;
> > - struct ipa_dfs_info *callee_dfs;
> > - struct cgraph_node *callee = cgraph_function_node (cs->callee, NULL);
> > -
> > - callee_dfs = (struct ipa_dfs_info *) callee->symbol.aux;
> > - return (caller_dfs
> > - && callee_dfs
> > - && caller_dfs->scc_no == callee_dfs->scc_no);
> > -}
> > -
> > /* Print V which is extracted from a value in a lattice to F. */
> >
> > static void
> > @@ -957,7 +941,7 @@ add_value_to_lattice (struct ipcp_lattic
> > for (val = lat->values; val; val = val->next)
> > if (values_equal_for_ipcp_p (val->value, newval))
> > {
> > - if (edge_within_scc (cs))
> > + if (ipa_edge_within_scc (cs))
> > {
> > struct ipcp_value_source *s;
> > for (s = val->sources; s ; s = s->next)
> > @@ -1030,7 +1014,7 @@ propagate_vals_accross_pass_through (str
> > are arithmetic functions with circular dependencies, there is infinite
> > number of them and we would just make lattices bottom. */
> > if ((ipa_get_jf_pass_through_operation (jfunc) != NOP_EXPR)
> > - and edge_within_scc (cs))
> > + && ipa_edge_within_scc (cs))
> > ret = set_lattice_contains_variable (dest_lat);
> > else
> > for (src_val = src_lat->values; src_val; src_val = src_val->next)
> > @@ -1061,7 +1045,7 @@ propagate_vals_accross_ancestor (struct
> > struct ipcp_value *src_val;
> > bool ret = false;
> >
> > - if (edge_within_scc (cs))
> > + if (ipa_edge_within_scc (cs))
> > return set_lattice_contains_variable (dest_lat);
> >
> > for (src_val = src_lat->values; src_val; src_val = src_val->next)
> > @@ -2129,7 +2113,7 @@ propagate_constants_topo (struct topo_in
> > struct cgraph_edge *cs;
> >
> > for (cs = v->callees; cs; cs = cs->next_callee)
> > - if (edge_within_scc (cs)
> > + if (ipa_edge_within_scc (cs)
> > && propagate_constants_accross_call (cs))
> > push_node_to_stack (topo, cs->callee);
> > v = pop_node_from_stack (topo);
> > @@ -2146,7 +2130,7 @@ propagate_constants_topo (struct topo_in
> > estimate_local_effects (v);
> > add_all_node_vals_to_toposort (v);
> > for (cs = v->callees; cs; cs = cs->next_callee)
> > - if (!edge_within_scc (cs))
> > + if (!ipa_edge_within_scc (cs))
> > propagate_constants_accross_call (cs);
> > }
> > cycle_nodes.release ();
> > @@ -3462,7 +3446,7 @@ spread_undeadness (struct cgraph_node *n
> > struct cgraph_edge *cs;
> >
> > for (cs = node->callees; cs; cs = cs->next_callee)
> > - if (edge_within_scc (cs))
> > + if (ipa_edge_within_scc (cs))
> > {
> > struct cgraph_node *callee;
> > struct ipa_node_params *info;
> > @@ -3493,7 +3477,7 @@ has_undead_caller_from_outside_scc_p (st
> > has_undead_caller_from_outside_scc_p,
> > NULL, true))
> > return true;
> > - else if (!edge_within_scc (cs)
> > + else if (!ipa_edge_within_scc (cs)
> > && !IPA_NODE_REF (cs->caller)->node_dead)
> > return true;
> > return false;