From a2cd028f5fd512c04e4fdce69d4398d13b51cfb9 Mon Sep 17 00:00:00 2001 From: Janis Johnson Date: Wed, 6 Feb 2002 22:13:01 +0000 Subject: 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 From-SVN: r49556 --- gcc/loop.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'gcc/loop.c') diff --git a/gcc/loop.c b/gcc/loop.c index 0067e74..e0847a8 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -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); -- cgit v1.1