fold-const.c (fold): Strip NOPs that change the signedness for RSHIFT too.

* fold-const.c (fold): Strip NOPs that change the signedness
	for RSHIFT too.  Expand comment.

From-SVN: r78603
This commit is contained in:
Eric Botcazou 2004-02-28 07:33:10 +00:00
parent a10016d3b0
commit 68a1a5da2b
2 changed files with 19 additions and 8 deletions

View File

@ -1,8 +1,13 @@
2004-02-28 Eric Botcazou <ebotcazou@act-europe.fr>
* fold-const.c (fold): Strip NOPs that change the signedness
for RSHIFT too. Expand comment.
2004-02-27 Ian Lance Taylor <ian@wasabisystems.com>
PR optimization/7871
* flow.c (mark_set_1): Don't add LOG_LINKS for global registers
from or to call insns.
from or to call insns.
2004-02-27 Eric Botcazou <ebotcazou@libertysurf.fr>

View File

@ -5423,14 +5423,20 @@ fold (tree expr)
if (op == 0)
continue; /* Valid for CALL_EXPR, at least. */
if (kind == '<' || code == RSHIFT_EXPR)
{
/* Signedness matters here. Perhaps we can refine this
later. */
STRIP_SIGN_NOPS (op);
}
/* Strip any conversions that don't change the mode. This is
safe for every expression, except for a comparison expression
because its signedness is derived from its operands. So, in
the latter case, only strip conversions that don't change the
signedness.
Note that this is done as an internal manipulation within the
constant folder, in order to find the simplest representation
of the arguments so that their form can be studied. In any
cases, the appropriate type conversions should be put back in
the tree that will get out of the constant folder. */
if (kind == '<')
STRIP_SIGN_NOPS (op);
else
/* Strip any conversions that don't change the mode. */
STRIP_NOPS (op);
if (TREE_CODE (op) == COMPLEX_CST)