diff options
author | Jakub Jelinek <jakub@redhat.com> | 2011-04-26 15:33:49 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2011-04-26 15:33:49 +0200 |
commit | 2c9da85bf03e2920af2dca3bb124abc745bc365b (patch) | |
tree | 7b95eb186ef89a03e38a882771508f6648604711 /gcc/tree-ssa-reassoc.c | |
parent | ac6fdeacafe537496c0b370c670737a5e3d165f8 (diff) | |
download | gcc-2c9da85bf03e2920af2dca3bb124abc745bc365b.zip gcc-2c9da85bf03e2920af2dca3bb124abc745bc365b.tar.gz gcc-2c9da85bf03e2920af2dca3bb124abc745bc365b.tar.bz2 |
re PR tree-optimization/48734 (ICE in eliminate_redundant_comparison, at tree-ssa-reassoc.c:1321)
PR tree-optimization/48734
* tree-ssa-reassoc.c (eliminate_redundant_comparison): Give up
if return value from maybe_fold_*_comparsions isn't something
the code is prepared to handle.
* gcc.c-torture/compile/pr48734.c: New test.
From-SVN: r172967
Diffstat (limited to 'gcc/tree-ssa-reassoc.c')
-rw-r--r-- | gcc/tree-ssa-reassoc.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index 904fef8..987ec65 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -1,5 +1,6 @@ /* Reassociation for trees. - Copyright (C) 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 2005, 2007, 2008, 2009, 2010, 2011 + Free Software Foundation, Inc. Contributed by Daniel Berlin <dan@dberlin.org> This file is part of GCC. @@ -1279,6 +1280,20 @@ eliminate_redundant_comparison (enum tree_code opcode, if (!useless_type_conversion_p (TREE_TYPE (curr->op), TREE_TYPE (t))) t = fold_convert (TREE_TYPE (curr->op), t); + if (TREE_CODE (t) != INTEGER_CST + && !operand_equal_p (t, curr->op, 0)) + { + enum tree_code subcode; + tree newop1, newop2; + if (!COMPARISON_CLASS_P (t)) + continue; + extract_ops_from_tree (t, &subcode, &newop1, &newop2); + STRIP_USELESS_TYPE_CONVERSION (newop1); + STRIP_USELESS_TYPE_CONVERSION (newop2); + if (!is_gimple_val (newop1) || !is_gimple_val (newop2)) + continue; + } + if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "Equivalence: "); |