diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2020-03-06 14:05:03 +0100 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2020-03-10 17:41:45 +0100 |
commit | 02807fb45dd247554211e57fe22b3a89db970e53 (patch) | |
tree | b8e2fbc6190e065f6bbcc34f9ae763952fd90109 | |
parent | 0e95df7c002d5a7085b368dada87d1311f425c64 (diff) | |
download | gcc-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.cc | 9 |
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--; |