From: Eric Botcazou Date: Sat, 28 Feb 2004 07:33:10 +0000 (+0000) Subject: fold-const.c (fold): Strip NOPs that change the signedness for RSHIFT too. X-Git-Tag: releases/gcc-4.0.0~9778 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=68a1a5da2b17865bb90a28ba13a117092b82b608;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 879bbfcf1705..8722e946c578 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,8 +1,13 @@ +2004-02-28 Eric Botcazou + + * fold-const.c (fold): Strip NOPs that change the signedness + for RSHIFT too. Expand comment. + 2004-02-27 Ian Lance Taylor 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 diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 9178a3441782..04452de6c7f6 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -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)