aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-reassoc.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2014-10-17 12:50:16 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2014-10-17 12:50:16 +0200
commit4eb4a256cd4a39555f4d834c47cabc2e136ed02a (patch)
tree57d50dcdf67827495420438304dc1e393caa452f /gcc/tree-ssa-reassoc.c
parent9d4ded759a1367ebe6588be36d0ea1410e24e3ca (diff)
downloadgcc-4eb4a256cd4a39555f4d834c47cabc2e136ed02a.zip
gcc-4eb4a256cd4a39555f4d834c47cabc2e136ed02a.tar.gz
gcc-4eb4a256cd4a39555f4d834c47cabc2e136ed02a.tar.bz2
re PR tree-optimization/63302 (Code with 64-bit long long constants is miscompiled on 32-bit host)
PR tree-optimization/63302 * tree-ssa-reassoc.c (optimize_range_tests_xor, optimize_range_tests_diff): Use !integer_pow2p () instead of tree_log2 () < 0. * gcc.c-torture/execute/pr63302.c: New test. From-SVN: r216391
Diffstat (limited to 'gcc/tree-ssa-reassoc.c')
-rw-r--r--gcc/tree-ssa-reassoc.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c
index 4714a38..ac33f75 100644
--- a/gcc/tree-ssa-reassoc.c
+++ b/gcc/tree-ssa-reassoc.c
@@ -2200,7 +2200,7 @@ optimize_range_tests_xor (enum tree_code opcode, tree type,
lowxor = fold_binary (BIT_XOR_EXPR, type, lowi, lowj);
if (lowxor == NULL_TREE || TREE_CODE (lowxor) != INTEGER_CST)
return false;
- if (tree_log2 (lowxor) < 0)
+ if (!integer_pow2p (lowxor))
return false;
highxor = fold_binary (BIT_XOR_EXPR, type, highi, highj);
if (!tree_int_cst_equal (lowxor, highxor))
@@ -2247,7 +2247,7 @@ optimize_range_tests_diff (enum tree_code opcode, tree type,
tem1 = fold_binary (MINUS_EXPR, type, lowj, lowi);
if (tem1 == NULL_TREE || TREE_CODE (tem1) != INTEGER_CST)
return false;
- if (tree_log2 (tem1) < 0)
+ if (!integer_pow2p (tem1))
return false;
type = unsigned_type_for (type);