This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[new-ra] fix x86 gnatlib_and_tools
- From: Michael Matz <matz at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Mon, 27 Oct 2003 17:59:22 +0100 (CET)
- Subject: [new-ra] fix x86 gnatlib_and_tools
Hi,
I usually forget to do an make gnatlib_and_tools for my bootstrap, instead
I'm just bootstrapping. Now I did this, there was an error, this fixes
it.
Bootstrapped all langs minus treelang on i686-linux. (Hmm,
gnatlib_and_tools still doesn't work, though ...)
Ciao,
Michael.
--
* ra-build.c (live_out_1): Join the undefinedness in the trace.
(livethrough_conflicts_bb): Check also for has_memset.
Index: ra-build.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/ra-build.c,v
retrieving revision 1.1.2.23
diff -u -p -r1.1.2.23 ra-build.c
--- ra-build.c 16 Oct 2003 19:08:59 -0000 1.1.2.23
+++ ra-build.c 27 Oct 2003 16:10:11 -0000
@@ -728,9 +728,23 @@ live_out_1 (struct df *df ATTRIBUTE_UNUS
int uid = INSN_UID (insn);
struct web_part *wp = use->wp;
- /* Mark, that this insn needs this webpart live. */
- visit_trace[uid].wp = wp;
- visit_trace[uid].undefined = use->undefined;
+ /* Mark, that this insn needs this webpart live. Carefull that we
+ don't delete some trace from other parts of the current web, because
+ then the visiting order of insns depends on the order of the uses,
+ which could change in later passes. This can lead to different
+ numbers in for instance the num_call member. */
+ if (visit_trace[uid].wp
+ && DF_REF_REGNO (visit_trace[uid].wp->ref) == use->regno)
+ {
+ union_web_parts (visit_trace[uid].wp, use->wp);
+ visit_trace[uid].wp = wp;
+ visit_trace[uid].undefined |= use->undefined;
+ }
+ else
+ {
+ visit_trace[uid].wp = wp;
+ visit_trace[uid].undefined = use->undefined;
+ }
if (INSN_P (insn))
{
@@ -1147,7 +1161,8 @@ livethrough_conflicts_bb (basic_block bb
/* And now, if we have found anything, make all live_through
uses conflict with all defs, and update their other members. */
- if (deaths > 0 || contains_call || bitmap_first_set_bit (all_defs) >= 0)
+ if (deaths > 0 || contains_call || has_memset
+ || bitmap_first_set_bit (all_defs) >= 0)
EXECUTE_IF_SET_IN_BITMAP (info->live_throughout, first, use_id,
{
struct web_part *wp = &web_parts[df->def_id + use_id];