diff options
author | Janis Johnson <janis187@us.ibm.com> | 2002-02-06 22:13:01 +0000 |
---|---|---|
committer | Janis Johnson <janis@gcc.gnu.org> | 2002-02-06 22:13:01 +0000 |
commit | a2cd028f5fd512c04e4fdce69d4398d13b51cfb9 (patch) | |
tree | 93504553b0df399034cbe81b85b0505d6feffeb5 /gcc/loop.c | |
parent | 199ecb183b32d791550aa97bd377532d742a62c1 (diff) | |
download | gcc-a2cd028f5fd512c04e4fdce69d4398d13b51cfb9.zip gcc-a2cd028f5fd512c04e4fdce69d4398d13b51cfb9.tar.gz gcc-a2cd028f5fd512c04e4fdce69d4398d13b51cfb9.tar.bz2 |
loop.c (remove_constant_addition): Avoid clobbering a shared CONST expression.
* loop.c (remove_constant_addition): Avoid clobbering a shared
CONST expression.
Co-Authored-By: Jan Hubicka <jh@suse.cz>
From-SVN: r49556
Diffstat (limited to 'gcc/loop.c')
-rw-r--r-- | gcc/loop.c | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -3683,8 +3683,19 @@ remove_constant_addition (x) HOST_WIDE_INT addval = 0; rtx exp = *x; + /* Avoid clobbering a shared CONST expression. */ if (GET_CODE (exp) == CONST) - exp = XEXP (exp, 0); + { + if (GET_CODE (XEXP (exp, 0)) == PLUS + && GET_CODE (XEXP (XEXP (exp, 0), 0)) == SYMBOL_REF + && GET_CODE (XEXP (XEXP (exp, 0), 1)) == CONST_INT) + { + *x = XEXP (XEXP (exp, 0), 0); + return INTVAL (XEXP (XEXP (exp, 0), 1)); + } + return 0; + } + if (GET_CODE (exp) == CONST_INT) { addval = INTVAL (exp); |