Patchwork Move edge_within_scc to ipa-utils.c

login
register
mail settings
Submitter Martin Jambor
Date Sept. 11, 2013, 1:02 p.m.
Message ID <20130911130202.GF6732@virgil.suse>
Download mbox | patch
Permalink /patch/274273/
State New
Headers show

Comments

Martin Jambor - Sept. 11, 2013, 1:02 p.m.
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.
Martin Jambor - Oct. 11, 2013, 5:31 p.m.
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;
Jan Hubicka - Oct. 12, 2013, 10:50 p.m.
> 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;

Patch

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;