I found a weird piece of code that was added by kenner in a really early
revision. It checks for VAR_DECLs with frame or stack pointers as
DECL_RTL, and the comment in front of it mentions strength reduction.
Presumably this was for the old loop optimizer? I can't think of
anything that would require this in a modern version of gcc.
Bootstrapped and tested on i686-linux; no changes in code generation on
any of my test files. Ok?
Bernd
* expr.c (expand_expr_real_2) [PLUS_EXPR]: Delete code dealing with
VAR_DECLs of frame or stack pointers.
Index: gcc/expr.c
===================================================================
--- gcc/expr.c (revision 184790)
+++ gcc/expr.c (working copy)
@@ -8040,30 +8040,6 @@ expand_expr_real_2 (sepops ops, rtx targ
fold_convert_loc (loc, ssizetype,
treeop1));
case PLUS_EXPR:
- /* If we are adding a constant, a VAR_DECL that is sp, fp, or ap, and
- something else, make sure we add the register to the constant and
- then to the other thing. This case can occur during strength
- reduction and doing it this way will produce better code if the
- frame pointer or argument pointer is eliminated.
-
- fold-const.c will ensure that the constant is always in the inner
- PLUS_EXPR, so the only case we need to do anything about is if
- sp, ap, or fp is our second argument, in which case we must swap
- the innermost first argument and our second argument. */
-
- if (TREE_CODE (treeop0) == PLUS_EXPR
- && TREE_CODE (TREE_OPERAND (treeop0, 1)) == INTEGER_CST
- && TREE_CODE (treeop1) == VAR_DECL
- && (DECL_RTL (treeop1) == frame_pointer_rtx
- || DECL_RTL (treeop1) == stack_pointer_rtx
- || DECL_RTL (treeop1) == arg_pointer_rtx))
- {
- tree t = treeop1;
-
- treeop1 = TREE_OPERAND (treeop0, 0);
- TREE_OPERAND (treeop0, 0) = t;
- }
-
/* If the result is to be ptr_mode and we are adding an integer to
something, we might be forming a constant. So try to use
plus_constant. If it produces a sum and we can't accept it,