diff options
Diffstat (limited to 'gcc/vr-values.c')
-rw-r--r-- | gcc/vr-values.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/gcc/vr-values.c b/gcc/vr-values.c index 0e10aca..b401516 100644 --- a/gcc/vr-values.c +++ b/gcc/vr-values.c @@ -118,7 +118,10 @@ vr_values::get_value_range (const_tree var) if (POINTER_TYPE_P (TREE_TYPE (sym)) && (nonnull_arg_p (sym) || get_ptr_nonnull (var))) - vr->set_nonnull (TREE_TYPE (sym)); + { + vr->set_nonzero (TREE_TYPE (sym)); + vr->equiv_clear (); + } else if (INTEGRAL_TYPE_P (TREE_TYPE (sym))) { get_range_info (var, *vr); @@ -130,7 +133,10 @@ vr_values::get_value_range (const_tree var) } else if (TREE_CODE (sym) == RESULT_DECL && DECL_BY_REFERENCE (sym)) - vr->set_nonnull (TREE_TYPE (sym)); + { + vr->set_nonzero (TREE_TYPE (sym)); + vr->equiv_clear (); + } } return vr; @@ -858,7 +864,10 @@ vr_values::extract_range_from_binary_expr (value_range *vr, || (vr1.kind () == VR_ANTI_RANGE && vr1.min () == op0 && vr1.min () == vr1.max ()))) - vr->set_nonnull (expr_type); + { + vr->set_nonzero (expr_type); + vr->equiv_clear (); + } } /* Extract range information from a unary expression CODE OP0 based on @@ -1085,7 +1094,8 @@ vr_values::extract_range_basic (value_range *vr, gimple *stmt) && TREE_CODE (SSA_NAME_VAR (arg)) == PARM_DECL && cfun->after_inlining) { - vr->set_null (type); + vr->set_zero (type); + vr->equiv_clear (); return; } break; @@ -1392,7 +1402,10 @@ vr_values::extract_range_basic (value_range *vr, gimple *stmt) && gimple_stmt_nonnegative_warnv_p (stmt, &sop)) set_value_range_to_nonnegative (vr, type); else if (vrp_stmt_computes_nonzero (stmt)) - vr->set_nonnull (type); + { + vr->set_nonzero (type); + vr->equiv_clear (); + } else vr->set_varying (); } |