diff options
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0182-PR-tree-optimization-48734.patch')
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0182-PR-tree-optimization-48734.patch | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0182-PR-tree-optimization-48734.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0182-PR-tree-optimization-48734.patch new file mode 100644 index 0000000000..f38422d841 --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0182-PR-tree-optimization-48734.patch @@ -0,0 +1,66 @@ +From a3ac868928384ffe6f10c3aa0fd3ac9ab8cc1aae Mon Sep 17 00:00:00 2001 +From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> +Date: Tue, 26 Apr 2011 13:44:51 +0000 +Subject: [PATCH 182/200] 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. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172969 138bc75d-0d04-0410-961f-82ee72b054a4 + +index 581f168..566f02e 100644 +new file mode 100644 +index 0000000..b20ea80 +--- /dev/null ++++ b/gcc/testsuite/gcc.c-torture/compile/pr48734.c +@@ -0,0 +1,11 @@ ++/* PR tree-optimization/48734 */ ++ ++unsigned int ++foo (int x, unsigned int y, unsigned int z) ++{ ++ z &= (x == -__INT_MAX__ - 1 ? x : -x) > y; ++ z &= (x == -__INT_MAX__ - 1 ? x : -x) > y; ++ z &= (x == -__INT_MAX__ - 1 ? x : -x) > y; ++ z &= (x == -__INT_MAX__ - 1 ? x : -x) > y; ++ return z; ++} +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: "); +-- +1.7.0.4 + |