Use EAF_RETURN_ARG in tree-ssa-ccp.c
authorJan Hubicka <jh@suse.cz>
Tue, 27 Oct 2020 08:03:45 +0000 (09:03 +0100)
committerJan Hubicka <jh@suse.cz>
Tue, 27 Oct 2020 08:03:45 +0000 (09:03 +0100)
* tree-ssa-ccp.c (evaluate_stmt): Use EAF_RETURN_ARG; do not handle
string buitings specially.

gcc/tree-ssa-ccp.c

index 0432fe5513dbaad82e474e4583237d5a881a8729..ef44e66ce8b7d1b984c2d0e37eb7c1c0882420bf 100644 (file)
@@ -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);
     }