2006-06-16 Michael Matz <matz@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Jun 2006 08:34:39 +0000 (08:34 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Jun 2006 08:34:39 +0000 (08:34 +0000)
Richard Guenther  <rguenther@suse.de>

* fold-const.c (fold_truthop): Only return new tree node if
we canonicalized something.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114713 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/fold-const.c

index e600a4e..96ca893 100644 (file)
@@ -1,3 +1,9 @@
+2006-06-16  Michael Matz  <matz@suse.de>
+       Richard Guenther  <rguenther@suse.de>
+
+       * fold-const.c (fold_truthop): Only return new tree node if
+       we canonicalized something.
+
 2006-06-16  Richard Guenther  <rguenther@suse.de>
 
        * function.h (enum function_frequency): Move declaration
index 6522afd..4b49fa9 100644 (file)
@@ -4862,6 +4862,8 @@ fold_truthop (enum tree_code code, tree truth_type, tree lhs, tree rhs)
   tree lntype, rntype, result;
   int first_bit, end_bit;
   int volatilep;
+  tree orig_lhs = lhs, orig_rhs = rhs;
+  enum tree_code orig_code = code;
 
   /* Start by getting the comparison codes.  Fail if anything is volatile.
      If one operand is a BIT_AND_EXPR with the constant one, treat it as if
@@ -4955,7 +4957,11 @@ fold_truthop (enum tree_code code, tree truth_type, tree lhs, tree rhs)
                       build_int_cst (TREE_TYPE (ll_arg), 0));
 
       if (LOGICAL_OP_NON_SHORT_CIRCUIT)
-       return build2 (code, truth_type, lhs, rhs);
+       {
+         if (code != orig_code || lhs != orig_lhs || rhs != orig_rhs)
+           return build2 (code, truth_type, lhs, rhs);
+         return NULL_TREE;
+       }
     }
 
   /* See if the comparisons can be merged.  Then get all the parameters for