aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2020-03-06 14:05:03 +0100
committerAldy Hernandez <aldyh@redhat.com>2020-03-10 17:41:45 +0100
commit02807fb45dd247554211e57fe22b3a89db970e53 (patch)
treeb8e2fbc6190e065f6bbcc34f9ae763952fd90109
parent0e95df7c002d5a7085b368dada87d1311f425c64 (diff)
downloadgcc-02807fb45dd247554211e57fe22b3a89db970e53.zip
gcc-02807fb45dd247554211e57fe22b3a89db970e53.tar.gz
gcc-02807fb45dd247554211e57fe22b3a89db970e53.tar.bz2
Early bail out of logical_combine if all operands are varying.
-rw-r--r--gcc/gimple-range-gori.cc9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/gimple-range-gori.cc b/gcc/gimple-range-gori.cc
index b1f321f..ee501f2 100644
--- a/gcc/gimple-range-gori.cc
+++ b/gcc/gimple-range-gori.cc
@@ -788,6 +788,10 @@ gori_compute::logical_combine (irange &r, enum tree_code code,
const irange &op2_true,
const irange &op2_false)
{
+ if (op1_true.varying_p () && op1_false.varying_p ()
+ && op2_true.varying_p () && op2_false.varying_p ())
+ return false;
+
// This is not a simple fold of a logical expression, rather it
// determines ranges which flow through the logical expression.
//
@@ -835,7 +839,6 @@ gori_compute::logical_combine (irange &r, enum tree_code code,
return true;
}
return false;
-
}
switch (code)
@@ -976,8 +979,8 @@ gori_compute::compute_logical_operands (irange &r, gimple *stmt,
get_tree_range (op2_true, name, name, name_range);
op2_false = op2_true;
}
- if (!logical_combine (r, gimple_expr_code (stmt), lhs, op1_true, op1_false,
- op2_true, op2_false))
+ if (!logical_combine (r, gimple_expr_code (stmt), lhs,
+ op1_true, op1_false, op2_true, op2_false))
r.set_varying (TREE_TYPE (name));
depth--;