mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 23:01:17 +08:00
tree.c (save_expr): Allow either side of a dyadic operand to be constant.
* tree.c (save_expr): Allow either side of a dyadic operand to be constant. * doc/portability.texi (portability): Update portability goals. From-SVN: r60435
This commit is contained in:
parent
1df7e439e1
commit
0c685f1256
@ -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.
|
||||
|
@ -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
|
||||
|
26
gcc/tree.c
26
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user