From 410bd69891071449226b009b3e53d7fe82bc06f1 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Sun, 22 Sep 1996 11:12:06 -0400 Subject: [PATCH] (combine_givs): Improve combining DEST_REG giv with its only use. From-SVN: r12769 --- gcc/loop.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/gcc/loop.c b/gcc/loop.c index f4670fd0735..b3c49a4dd03 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -1,5 +1,5 @@ /* Perform various loop optimizations, including strength reduction. - Copyright (C) 1987, 88, 89, 91-4, 1995 Free Software Foundation, Inc. + Copyright (C) 1987, 88, 89, 91-5, 1996 Free Software Foundation, Inc. This file is part of GNU CC. @@ -5672,14 +5672,26 @@ combine_givs (bl) /* g2->new_reg set by `combine_givs_p' */ g2->same = g1; g1->combined_with = 1; - g1->benefit += g2->benefit; + + /* If one of these givs is a DEST_REG that was only used + once, by the other giv, this is actually a single use. */ + if ((g1->giv_type != DEST_REG + || n_times_used[REGNO (g1->dest_reg)] != 1 + || ! reg_mentioned_p (g1->dest_reg, PATTERN (g2->insn))) + && (g2->giv_type != DEST_REG + || n_times_used[REGNO (g2->dest_reg)] != 1 + || ! reg_mentioned_p (g2->dest_reg, + PATTERN (g1->insn)))) + { + g1->benefit += g2->benefit; + g1->times_used += g2->times_used; + } /* ??? The new final_[bg]iv_value code does a much better job of finding replaceable giv's, and hence this code may no longer be necessary. */ if (! g2->replaceable && REG_USERVAR_P (g2->dest_reg)) g1->benefit -= copy_cost; g1->lifetime += g2->lifetime; - g1->times_used += g2->times_used; if (loop_dump_stream) fprintf (loop_dump_stream, "giv at %d combined with giv at %d\n", -- 2.30.2