aboutsummaryrefslogtreecommitdiff
path: root/gcc/vr-values.c
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2018-07-11 15:30:51 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2018-07-11 15:30:51 +0000
commit288aaa5f852b6f93078e15b7ac17af3b4930decd (patch)
tree774a14ad8d1ed095e9895cd329d92655d84195e0 /gcc/vr-values.c
parentdff2abcbee65dbb4b7ca3ade0f7622ffdc0af391 (diff)
downloadgcc-288aaa5f852b6f93078e15b7ac17af3b4930decd.zip
gcc-288aaa5f852b6f93078e15b7ac17af3b4930decd.tar.gz
gcc-288aaa5f852b6f93078e15b7ac17af3b4930decd.tar.bz2
vr-values.c (gimple_stmt_nonzero_p): Abstract common code to...
* vr-values.c (gimple_stmt_nonzero_p): Abstract common code to... * gimple.c (gimple_call_nonnull_result_p): ...here... (gimple_call_nonnull_arg): ...and here. * gimple.h (gimple_call_nonnull_result_p): New. (gimple_call_nonnull_arg): New. From-SVN: r262557
Diffstat (limited to 'gcc/vr-values.c')
-rw-r--r--gcc/vr-values.c32
1 files changed, 3 insertions, 29 deletions
diff --git a/gcc/vr-values.c b/gcc/vr-values.c
index 32f64e0..bba170f 100644
--- a/gcc/vr-values.c
+++ b/gcc/vr-values.c
@@ -313,35 +313,9 @@ gimple_stmt_nonzero_p (gimple *stmt)
return gimple_assign_nonzero_p (stmt);
case GIMPLE_CALL:
{
- tree fndecl = gimple_call_fndecl (stmt);
- if (!fndecl) return false;
- if (flag_delete_null_pointer_checks && !flag_check_new
- && DECL_IS_OPERATOR_NEW (fndecl)
- && !TREE_NOTHROW (fndecl))
- return true;
- /* References are always non-NULL. */
- if (flag_delete_null_pointer_checks
- && TREE_CODE (TREE_TYPE (fndecl)) == REFERENCE_TYPE)
- return true;
- if (flag_delete_null_pointer_checks &&
- lookup_attribute ("returns_nonnull",
- TYPE_ATTRIBUTES (gimple_call_fntype (stmt))))
- return true;
-
- gcall *call_stmt = as_a<gcall *> (stmt);
- unsigned rf = gimple_call_return_flags (call_stmt);
- if (rf & ERF_RETURNS_ARG)
- {
- unsigned argnum = rf & ERF_RETURN_ARG_MASK;
- if (argnum < gimple_call_num_args (call_stmt))
- {
- tree arg = gimple_call_arg (call_stmt, argnum);
- if (SSA_VAR_P (arg)
- && infer_nonnull_range_by_attribute (stmt, arg))
- return true;
- }
- }
- return gimple_alloca_call_p (stmt);
+ gcall *call_stmt = as_a<gcall *> (stmt);
+ return (gimple_call_nonnull_result_p (call_stmt)
+ || gimple_call_nonnull_arg (call_stmt));
}
default:
gcc_unreachable ();