This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [tuples] [patch] Fix in_phi in verify_expr


>  Actually you do not need to walk the tree for t at all.  In fact, PHI arguments
>  need to be either SSA_NAMEs or is_gimple_min_invariant ()s.  So
>
>               /* Addressable variables do have SSA_NAMEs but they
>                  are not considered gimple values.  */
>
>               else if (TREE_CODE (t) != SSA_NAME
>                        && TREE_CODE (t) != FUNCTION_DECL
>                        && !is_gimple_val (t))
>                 {
>
>  just becomes
>
>               /* Addressable variables do have SSA_NAMEs but they
>                  are not considered gimple values.  */
>
>               else if (TREE_CODE (t) != SSA_NAME
>                        && TREE_CODE (t) != FUNCTION_DECL
>                        && !is_gimple_min_invariant (t))
>                 {
>
>  (no idea where this FUNCTION_DECL is for - we should only see addresses
>  of functions here?)
>
>  Adding the SSA_NAME freelist test there is no need to further walk t at all
>  (apart from for verify_node_sharing).

OK. I am going to test the attached patch on trunk.

It remove the in_phi variable and changes the is_gimple_val to
is_gimple_min_invariant.

>  Richard.
>

Cheers,
-- 
Rafael Avila de Espindola

Google Ireland Ltd.
Gordon House
Barrow Street
Dublin 4
Ireland

Registered in Dublin, Ireland
Registration Number: 368047
Index: gcc/tree-cfg.c
===================================================================
--- gcc/tree-cfg.c	(revision 133790)
+++ gcc/tree-cfg.c	(working copy)
@@ -3113,7 +3113,6 @@
 verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
 {
   tree t = *tp, x;
-  bool in_phi = (data != NULL);
 
   if (TYPE_P (t))
     *walk_subtrees = 0;
@@ -3164,23 +3163,6 @@
 	bool new_constant;
 	bool new_side_effects;
 
-        /* ??? tree-ssa-alias.c may have overlooked dead PHI nodes, missing
-	   dead PHIs that take the address of something.  But if the PHI
-	   result is dead, the fact that it takes the address of anything
-	   is irrelevant.  Because we can not tell from here if a PHI result
-	   is dead, we just skip this check for PHIs altogether.  This means
-	   we may be missing "valid" checks, but what can you do?
-	   This was PR19217.  */
-        if (in_phi)
-	  {
-	    if (!is_gimple_min_invariant (t))
-	      {
-		error ("non-invariant address expression in PHI argument");
-		return t;
-	      }
-	    break;
-	  }
-
 	old_invariant = TREE_INVARIANT (t);
 	old_constant = TREE_CONSTANT (t);
 	old_side_effects = TREE_SIDE_EFFECTS (t);
@@ -4338,7 +4320,7 @@
 		 are not considered gimple values.  */
 	      else if (TREE_CODE (t) != SSA_NAME
 		       && TREE_CODE (t) != FUNCTION_DECL
-		       && !is_gimple_val (t))
+		       && !is_gimple_min_invariant (t))
 		{
 		  error ("PHI def is not a GIMPLE value");
 		  debug_generic_stmt (phi);
@@ -4346,13 +4328,6 @@
 		  err |= true;
 		}
 
-	      addr = walk_tree (&t, verify_expr, (void *) 1, NULL);
-	      if (addr)
-		{
-		  debug_generic_stmt (addr);
-		  err |= true;
-		}
-
 	      addr = walk_tree (&t, verify_node_sharing, visited, NULL);
 	      if (addr)
 		{

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]