From 8c354a412f1d5fb32a44baff649eb21d67ac4a16 Mon Sep 17 00:00:00 2001 From: "J\"orn Rennecke" Date: Tue, 16 Feb 1999 17:34:35 +0000 Subject: [PATCH] loop.c (strength_reduce): Calculate maybe_dead before calling recombine_givs. * loop.c (strength_reduce): Calculate maybe_dead before calling recombine_givs. From-SVN: r25251 --- gcc/ChangeLog | 5 +++++ gcc/loop.c | 52 +++++++++++++++++++++++++++++---------------------- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1b0c8ad45fd..d51cea9a627 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Wed Feb 17 01:29:07 1999 J"orn Rennecke + + * loop.c (strength_reduce): Calculate maybe_dead before + calling recombine_givs. + Wed Feb 17 00:43:12 1999 J"orn Rennecke * loop.c (strength_reduce): Dump biv increment -> giv conversions. diff --git a/gcc/loop.c b/gcc/loop.c index 81ed3e13e4e..0979b999e5c 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -4621,6 +4621,35 @@ strength_reduce (scan_start, end, loop_top, insn_count, } } + /* Check for givs whose first use is their definition and whose + last use is the definition of another giv. If so, it is likely + dead and should not be used to derive another giv nor to + eliminate a biv. */ + for (v = bl->giv; v; v = v->next_iv) + { + if (v->ignore + || (v->same && v->same->ignore)) + continue; + + if (v->last_use) + { + struct induction *v1; + + for (v1 = bl->giv; v1; v1 = v1->next_iv) + if (v->last_use == v1->insn) + v->maybe_dead = 1; + } + else if (v->giv_type == DEST_REG + && REGNO_FIRST_UID (REGNO (v->dest_reg)) == INSN_UID (v->insn)) + { + struct induction *v1; + + for (v1 = bl->giv; v1; v1 = v1->next_iv) + if (REGNO_LAST_UID (REGNO (v->dest_reg)) == INSN_UID (v1->insn)) + v->maybe_dead = 1; + } + } + #if 0 /* XXX Temporary. */ /* Now that we know which givs will be reduced, try to rearrange the @@ -4789,11 +4818,8 @@ strength_reduce (scan_start, end, loop_top, insn_count, For each giv register that can be reduced now: if replaceable, substitute reduced reg wherever the old giv occurs; - else add new move insn "giv_reg = reduced_reg". + else add new move insn "giv_reg = reduced_reg". */ - Also check for givs whose first use is their definition and whose - last use is the definition of another giv. If so, it is likely - dead and should not be used to eliminate a biv. */ for (v = bl->giv; v; v = v->next_iv) { if (v->same && v->same->ignore) @@ -4802,24 +4828,6 @@ strength_reduce (scan_start, end, loop_top, insn_count, if (v->ignore) continue; - if (v->last_use) - { - struct induction *v1; - - for (v1 = bl->giv; v1; v1 = v1->next_iv) - if (v->last_use == v1->insn) - v->maybe_dead = 1; - } - else if (v->giv_type == DEST_REG - && REGNO_FIRST_UID (REGNO (v->dest_reg)) == INSN_UID (v->insn)) - { - struct induction *v1; - - for (v1 = bl->giv; v1; v1 = v1->next_iv) - if (REGNO_LAST_UID (REGNO (v->dest_reg)) == INSN_UID (v1->insn)) - v->maybe_dead = 1; - } - /* Update expression if this was combined, in case other giv was replaced. */ if (v->same) -- 2.30.2