File nov102315.diff of Package gcc33

Backport of

revision 1.322.2.9
date: 2004/03/23 23:30:48;  author: kazu;  state: Exp;  lines: +3 -0
gcc/
        PR optimization/14669
        * fold-const.c (fold): Only unwiden integer comparisons for equality
        and inequality operators, or when the signedness doesn't change.

gcc/testsuite/
        PR optimization/14669
        * g++.dg/opt/fold2.C: New test case.

Index: gcc/fold-const.c
===================================================================
--- gcc/fold-const.c.orig	2009-11-20 13:05:56.000000000 +0100
+++ gcc/fold-const.c	2009-11-20 13:06:42.000000000 +0100
@@ -6620,6 +6620,9 @@ fold (expr)
       else if (TREE_CODE (TREE_TYPE (arg0)) == INTEGER_TYPE
 	       && TREE_CODE (arg0) == NOP_EXPR
 	       && (tem = get_unwidened (arg0, NULL_TREE)) != arg0
+	       && (code == EQ_EXPR || code == NE_EXPR
+		   || TREE_UNSIGNED (TREE_TYPE (arg0))
+		      == TREE_UNSIGNED (TREE_TYPE (tem)))
 	       && (t1 = get_unwidened (arg1, TREE_TYPE (tem))) != 0
 	       && (TREE_TYPE (t1) == TREE_TYPE (tem)
 		   || (TREE_CODE (t1) == INTEGER_CST
openSUSE Build Service is sponsored by