aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0182-PR-tree-optimization-48734.patch
diff options
context:
space:
mode:
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.patch66
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
+