From e420c537d0aeb03e6946b1af996d69785c1f7660 Mon Sep 17 00:00:00 2001
From: nathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 23 Dec 2002 14:43:28 +0000
Subject: [PATCH] 	* tree.c (save_expr): Allow either side of a dyadic
 operand to be 	constant.

	* doc/portability.texi (portability): Update portability goals.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@60435 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog            |  7 +++++++
 gcc/doc/portability.texi | 11 ++++++-----
 gcc/tree.c               | 26 +++++++++++++++++++-------
 3 files changed, 32 insertions(+), 12 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 114be4503a81..ae22fbc4e591 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2002-12-22  Nathan Sidwell  <nathan@codesourcery.com>
+
+	* tree.c (save_expr): Allow either side of a dyadic operand to be
+	constant.
+
+	* doc/portability.texi (portability): Update portability goals.
+
 2002-12-23  Kazu Hirata  <kazu@cs.umass.edu>
 
 	* config/h8300/h8300.c (output_a_shift): Remove unused code.
diff --git a/gcc/doc/portability.texi b/gcc/doc/portability.texi
index c3d8e3913d77..b05698dcfa69 100644
--- a/gcc/doc/portability.texi
+++ b/gcc/doc/portability.texi
@@ -1,5 +1,5 @@
 @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-@c 1999, 2000, 2001 Free Software Foundation, Inc.
+@c 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
 @c This is part of the GCC manual.
 @c For copying conditions, see the file gcc.texi.
 
@@ -8,10 +8,11 @@
 @cindex portability
 @cindex GCC and portability
 
-The main goal of GCC was to make a good, fast compiler for machines in
-the class that the GNU system aims to run on: 32-bit machines that address
-8-bit bytes and have several general registers.  Elegance, theoretical
-power and simplicity are only secondary.
+GCC itself aims to be portable to any machine where @code{int} is at least
+a 32-bit type.  It aims to target machines with a flat (non-segmented) byte
+addressed data address space (the code address space can be separate).
+Target ABIs may have 8, 16, 32 or 64-bit @code{int} type. @code{char}
+can be wider than 8 bits.
 
 GCC gets most of the information about the target machine from a machine
 description which gives an algebraic formula for each of the machine's
diff --git a/gcc/tree.c b/gcc/tree.c
index b2b336b9561a..f2fc48fd8ce2 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -1363,12 +1363,23 @@ save_expr (expr)
      a constant, it will be more efficient to not make another SAVE_EXPR since
      it will allow better simplification and GCSE will be able to merge the
      computations if they actualy occur.  */
-  for (inner = t;
-       (TREE_CODE_CLASS (TREE_CODE (inner)) == '1'
-	|| (TREE_CODE_CLASS (TREE_CODE (inner)) == '2'
-	    && TREE_CONSTANT (TREE_OPERAND (inner, 1))));
-       inner = TREE_OPERAND (inner, 0))
-    ;
+  inner = t;
+  while (1)
+    {
+      if (TREE_CODE_CLASS (TREE_CODE (inner)) == '1')
+	inner = TREE_OPERAND (inner, 0);
+      else if (TREE_CODE_CLASS (TREE_CODE (inner)) == '2')
+	{
+	  if (TREE_CONSTANT (TREE_OPERAND (inner, 1)))
+	    inner = TREE_OPERAND (inner, 0);
+	  else if (TREE_CONSTANT (TREE_OPERAND (inner, 0)))
+	    inner = TREE_OPERAND (inner, 1);
+	  else
+	    break;
+	}
+      else
+	break;
+    }
 
   /* If the tree evaluates to a constant, then we don't want to hide that
      fact (i.e. this allows further folding, and direct checks for constants).
@@ -1377,7 +1388,8 @@ save_expr (expr)
      literal node.  */
   if (TREE_CONSTANT (inner)
       || (TREE_READONLY (inner) && ! TREE_SIDE_EFFECTS (inner))
-      || TREE_CODE (inner) == SAVE_EXPR || TREE_CODE (inner) == ERROR_MARK)
+      || TREE_CODE (inner) == SAVE_EXPR
+      || TREE_CODE (inner) == ERROR_MARK)
     return t;
 
   /* If T contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
-- 
GitLab