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