+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>
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)