This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: RTL sharing bootstrap failure on sparc-sun-solaris2.10
- From: Jan Hubicka <hubicka at ucw dot cz>
- To: "Kaveh R. GHAZI" <ghazi at caip dot rutgers dot edu>
- Cc: gcc-patches at gcc dot gnu dot org, gcc at gcc dot gnu dot org, jh at suse dot cz
- Date: Thu, 6 Sep 2007 19:43:04 +0200
- Subject: Re: RTL sharing bootstrap failure on sparc-sun-solaris2.10
- References: <Pine.GSO.4.58.0709061316510.12686@caipclassic.rutgers.edu>
> (Sorry, first one bounced from gcc@ because it was over 400k)
>
> Hi Jan,
>
> On sparc-sun-solaris2.10, I'm getting new bootstrap failures in stage2
> complaining several times about rtl sharing. I've included four .i files
> for modules that ICEed during stage2, and the cc1 invocations below.
>
> Would you please take a look?
Hi,
I already have fix for this just waiting for Andreas Tobler to verify
that it does what expected. If you could give it a try, it would be
nice.
The problem is
/* Called when INSN is being moved from a location near the target of a jump.
We leave a marker of the form (use (INSN)) immediately in front
of WHERE for mark_target_live_regs. These markers will be deleted when
reorg finishes.
We used to try to update the live status of registers if WHERE is at
the start of a basic block, but that can't work since we may remove a
BARRIER in relax_delay_slots. */
static void
update_block (rtx insn, rtx where)
{
/* Ignore if this was in a delay slot and it came from the target of
a branch. */
if (INSN_FROM_TARGET_P (insn))
return;
emit_insn_before (gen_rtx_USE (VOIDmode, insn), where);
/* INSN might be making a value live in a block where it didn't use to
be. So recompute liveness information for this block. */
incr_ticks_for_insn (insn);
}
Producing USE expressions embedding whole INSN. The comment promise
that those will be removed before reorg ends, but they are not. This
patch just adds simple code to remove them in very last dbr_schedule
pass.
Honza
Index: reorg.c
===================================================================
--- reorg.c (revision 128145)
+++ reorg.c (working copy)
@@ -3991,6 +3991,9 @@ dbr_schedule (rtx first)
if (GET_CODE (pat) == SEQUENCE)
insn = XVECEXP (pat, 0, 0);
}
+ if (INSN_P (insn) && GET_CODE (PATTERN (insn)) == USE
+ && INSN_P (XEXP (PATTERN (insn), 0)))
+ delete_insn (insn);
if (!JUMP_P (insn))
continue;