Use EAF_RETURN_ARG in tree-ssa-ccp.c

Jan Hubicka hubicka@ucw.cz
Mon Oct 26 21:53:37 GMT 2020


Hi,
while looking for special cases of buitins I noticed that tree-ssa-ccp
can use EAF_RETURNS_ARG.  I wonder if same should be done by value
numbering and other propagators....

Bootstrapped/regtested x86_64-linux, OK?

Honza

	* tree-ssa-ccp.c (evaluate_stmt): Use EAF_RETURNS_ARG; do not handle
	string buitings specially.
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c
index 0432fe5513d..ef44e66ce8b 100644
--- a/gcc/tree-ssa-ccp.c
+++ b/gcc/tree-ssa-ccp.c
@@ -1796,6 +1796,7 @@ evaluate_stmt (gimple *stmt)
   ccp_lattice_t likelyvalue = likely_value (stmt);
   bool is_constant = false;
   unsigned int align;
+  bool ignore_return_flags = false;
 
   if (dump_file && (dump_flags & TDF_DETAILS))
     {
@@ -1965,22 +1966,9 @@ evaluate_stmt (gimple *stmt)
 	      val.mask = ~((HOST_WIDE_INT) align / BITS_PER_UNIT - 1);
 	      break;
 
-	    /* These builtins return their first argument, unmodified.  */
-	    case BUILT_IN_MEMCPY:
-	    case BUILT_IN_MEMMOVE:
-	    case BUILT_IN_MEMSET:
-	    case BUILT_IN_STRCPY:
-	    case BUILT_IN_STRNCPY:
-	    case BUILT_IN_MEMCPY_CHK:
-	    case BUILT_IN_MEMMOVE_CHK:
-	    case BUILT_IN_MEMSET_CHK:
-	    case BUILT_IN_STRCPY_CHK:
-	    case BUILT_IN_STRNCPY_CHK:
-	      val = get_value_for_expr (gimple_call_arg (stmt, 0), true);
-	      break;
-
 	    case BUILT_IN_ASSUME_ALIGNED:
 	      val = bit_value_assume_aligned (stmt, NULL_TREE, val, false);
+	      ignore_return_flags = true;
 	      break;
 
 	    case BUILT_IN_ALIGNED_ALLOC:
@@ -2049,6 +2037,15 @@ evaluate_stmt (gimple *stmt)
 	      if (attrs)
 		val = bit_value_assume_aligned (stmt, attrs, val, true);
 	    }
+	  int flags = ignore_return_flags
+		      ? 0 : gimple_call_return_flags (as_a <gcall *> (stmt));
+	  if (flags & ERF_RETURNS_ARG
+	      && (flags & ERF_RETURN_ARG_MASK) < gimple_call_num_args (stmt))
+	    {
+	      val = get_value_for_expr
+			 (gimple_call_arg (stmt,
+					   flags & ERF_RETURN_ARG_MASK), true);
+	    }
 	}
       is_constant = (val.lattice_val == CONSTANT);
     }


More information about the Gcc-patches mailing list