This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH 5/7] ira.c use DF luid rather than tracking insn ordering
- From: Alan Modra <amodra at gmail dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Mon, 21 Mar 2016 12:11:45 +1030
- Subject: [PATCH 5/7] ira.c use DF luid rather than tracking insn ordering
- Authentication-results: sourceware.org; auth=none
- References: <20160321013723 dot GC22605 at bubble dot grove dot modra dot org>
df_analyze set up luids are more-or-less still valid. The only
insn changes at this point are due to combine_and_move_insns.
* ira.c (add_store_equivs): Use DF_INSN_LUID rather than
bitmap seen_insns.
diff --git a/gcc/ira.c b/gcc/ira.c
index cfd448c..1cace25 100644
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -3567,17 +3567,12 @@ update_equiv_regs (void)
static void
add_store_equivs (void)
{
- bitmap_head seen_insns;
-
- bitmap_initialize (&seen_insns, NULL);
for (rtx_insn *insn = get_insns (); insn; insn = NEXT_INSN (insn))
{
rtx set, src, dest;
unsigned regno;
rtx_insn *init_insn;
- bitmap_set_bit (&seen_insns, INSN_UID (insn));
-
if (! INSN_P (insn))
continue;
@@ -3597,7 +3592,11 @@ add_store_equivs (void)
&& ! reg_equiv[regno].pdx_subregs
&& reg_equiv[regno].init_insns != NULL
&& (init_insn = reg_equiv[regno].init_insns->insn ()) != 0
- && bitmap_bit_p (&seen_insns, INSN_UID (init_insn))
+ /* combine_and_move_insns may have created a new insn for
+ init_insn. If we hit one of those its luid will be zero,
+ but that's OK as we know it is immediately before insn.
+ For all other cases the luids should be valid. */
+ && DF_INSN_LUID (init_insn) < DF_INSN_LUID (insn)
&& ! find_reg_note (init_insn, REG_EQUIV, NULL_RTX)
&& validate_equiv_mem (init_insn, src, dest)
&& ! memref_used_between_p (dest, init_insn, insn)
@@ -3617,7 +3616,6 @@ add_store_equivs (void)
INSN_UID (insn));
}
}
- bitmap_clear (&seen_insns);
}
/* Scan all regs killed in an insn to see if any of them are registers
--
Alan Modra
Australia Development Lab, IBM