diff options
author | Richard Stallman <rms@gnu.org> | 1992-08-26 06:04:35 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1992-08-26 06:04:35 +0000 |
commit | 1b81aa149386d6b086c0a55837e9c34331f3bb27 (patch) | |
tree | 8188c7a2288304fd39d66ef4d35e4eaedf28d981 /gcc/fold-const.c | |
parent | 3bf40d18826c0f6cfad45d8d3a5e604c854b8d34 (diff) | |
download | gcc-1b81aa149386d6b086c0a55837e9c34331f3bb27.zip gcc-1b81aa149386d6b086c0a55837e9c34331f3bb27.tar.gz gcc-1b81aa149386d6b086c0a55837e9c34331f3bb27.tar.bz2 |
(fold): Avoid the normal STRIP_NOPS on arg of NOP_EXPR.
From-SVN: r1959
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 44933bf..e23683e 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -2849,7 +2849,27 @@ fold (expr) } kind = TREE_CODE_CLASS (code); - if (kind == 'e' || kind == '<' || kind == '1' || kind == '2' || kind == 'r') + if (code == NOP_EXPR || code == FLOAT_EXPR || code == CONVERT_EXPR) + { + /* Special case for conversion ops that can have fixed point args. */ + arg0 = TREE_OPERAND (t, 0); + + /* Don't use STRIP_NOPS, because signedness of argument type matters. */ + if (arg0 != 0) + STRIP_TYPE_NOPS (arg0); + + if (arg0 != 0 && TREE_CODE (arg0) != INTEGER_CST +#if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC) + && TREE_CODE (arg0) != REAL_CST +#endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */ + ) + /* Note that TREE_CONSTANT isn't enough: + static var addresses are constant but we can't + do arithmetic on them. */ + wins = 0; + } + else if (kind == 'e' || kind == '<' + || kind == '1' || kind == '2' || kind == 'r') { register int len = tree_code_length[(int) code]; register int i; |