Message ID | 20130911130202.GF6732@virgil.suse |
---|---|
State | New |
Headers | show |
Ping. 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 <mjambor@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;
> 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 <mjambor@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;
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;