aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-ccp.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2020-10-27 09:03:45 +0100
committerJan Hubicka <jh@suse.cz>2020-10-27 09:03:45 +0100
commit7f227da3e603cffe7659d404f094e07507a993b1 (patch)
tree39b6f571d5e527fdd04d1d151e862539cb26517a /gcc/tree-ssa-ccp.c
parent5707996c14fcbbe9e71f97e703f0f5767b1f0611 (diff)
downloadgcc-7f227da3e603cffe7659d404f094e07507a993b1.zip
gcc-7f227da3e603cffe7659d404f094e07507a993b1.tar.gz
gcc-7f227da3e603cffe7659d404f094e07507a993b1.tar.bz2
Use EAF_RETURN_ARG in tree-ssa-ccp.c
* tree-ssa-ccp.c (evaluate_stmt): Use EAF_RETURN_ARG; do not handle string buitings specially.
Diffstat (limited to 'gcc/tree-ssa-ccp.c')
-rw-r--r--gcc/tree-ssa-ccp.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c
index 0432fe5..ef44e66 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);
}