aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1997-03-16 15:50:56 -0700
committerJeff Law <law@gcc.gnu.org>1997-03-16 15:50:56 -0700
commitab16257805b6614e1ad674b29965a9faca5511bd (patch)
tree35f10784c5bc49520b0e58b68ed1f84ee4481035 /gcc
parentc8163b58edb375a97197b7a2c36c1c3645528d7d (diff)
downloadgcc-ab16257805b6614e1ad674b29965a9faca5511bd.zip
gcc-ab16257805b6614e1ad674b29965a9faca5511bd.tar.gz
gcc-ab16257805b6614e1ad674b29965a9faca5511bd.tar.bz2
loop.c (strength_reduce): Adjust BENEFIT appropriately if an autoincrement memory reference will...
* loop.c (strength_reduce): Adjust BENEFIT appropriately if an autoincrement memory reference will eliminate add insns. From-SVN: r13717
Diffstat (limited to 'gcc')
-rw-r--r--gcc/loop.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/gcc/loop.c b/gcc/loop.c
index 0ea4f20..3e7bb58 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -3850,9 +3850,23 @@ strength_reduce (scan_start, end, loop_top, insn_count,
unchanged (recompute it from the biv each time it is used).
This decision can be made independently for each giv. */
- /* ??? Perhaps attempt to guess whether autoincrement will handle
- some of the new add insns; if so, can increase BENEFIT
- (undo the subtraction of add_cost that was done above). */
+#ifdef AUTO_INC_DEC
+ /* Attempt to guess whether autoincrement will handle some of the
+ new add insns; if so, increase BENEFIT (undo the subtraction of
+ add_cost that was done above). */
+ if (v->giv_type == DEST_ADDR
+ && GET_CODE (v->mult_val) == CONST_INT)
+ {
+#if defined (HAVE_POST_INCREMENT) || defined (HAVE_PRE_INCREMENT)
+ if (INTVAL (v->mult_val) == GET_MODE_SIZE (v->mem_mode))
+ benefit += add_cost * bl->biv_count;
+#endif
+#if defined (HAVE_POST_DECREMENT) || defined (HAVE_PRE_DECREMENT)
+ if (-INTVAL (v->mult_val) == GET_MODE_SIZE (v->mem_mode))
+ benefit += add_cost * bl->biv_count;
+#endif
+ }
+#endif
/* If an insn is not to be strength reduced, then set its ignore
flag, and clear all_reduced. */