diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-11-26 09:43:27 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-11-26 09:43:27 +0100 |
commit | 89789ec91d14bf5aca8a0a60dcbf7ee6e0bed5c5 (patch) | |
tree | acef6a0d29e49bb359cac97102d6e46a331cf467 /gcc/tree-ssa-phiopt.c | |
parent | f4a74d2786ec812e40cfd0b3b7fa3cbeb2093444 (diff) | |
download | gcc-89789ec91d14bf5aca8a0a60dcbf7ee6e0bed5c5.zip gcc-89789ec91d14bf5aca8a0a60dcbf7ee6e0bed5c5.tar.gz gcc-89789ec91d14bf5aca8a0a60dcbf7ee6e0bed5c5.tar.bz2 |
re PR tree-optimization/92644 (ICE in wide_int_to_tree_1, at tree.c:1530)
PR tree-optimization/92644
* tree-ssa-phiopt.c (minmax_replacement): Add INTEGRAL_TYPE_P check
next to INTEGER_CST checks.
* g++.dg/opt/pr92644.C: New test.
From-SVN: r278720
Diffstat (limited to 'gcc/tree-ssa-phiopt.c')
-rw-r--r-- | gcc/tree-ssa-phiopt.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c index 9058309..1ae925d 100644 --- a/gcc/tree-ssa-phiopt.c +++ b/gcc/tree-ssa-phiopt.c @@ -1381,7 +1381,8 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb, /* Turn EQ/NE of extreme values to order comparisons. */ if ((cmp == NE_EXPR || cmp == EQ_EXPR) - && TREE_CODE (rhs) == INTEGER_CST) + && TREE_CODE (rhs) == INTEGER_CST + && INTEGRAL_TYPE_P (TREE_TYPE (rhs))) { if (wi::eq_p (wi::to_wide (rhs), wi::min_value (TREE_TYPE (rhs)))) { @@ -1407,7 +1408,8 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb, larger = rhs; /* If we have smaller < CST it is equivalent to smaller <= CST-1. Likewise smaller <= CST is equivalent to smaller < CST+1. */ - if (TREE_CODE (larger) == INTEGER_CST) + if (TREE_CODE (larger) == INTEGER_CST + && INTEGRAL_TYPE_P (TREE_TYPE (larger))) { if (cmp == LT_EXPR) { @@ -1435,7 +1437,8 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb, larger = gimple_cond_lhs (cond); /* If we have larger > CST it is equivalent to larger >= CST+1. Likewise larger >= CST is equivalent to larger > CST-1. */ - if (TREE_CODE (smaller) == INTEGER_CST) + if (TREE_CODE (smaller) == INTEGER_CST + && INTEGRAL_TYPE_P (TREE_TYPE (smaller))) { wi::overflow_type overflow; if (cmp == GT_EXPR) |