[killloop] Patch for PR24762

Zdenek Dvorak rakdver@atrey.karlin.mff.cuni.cz
Tue Nov 15 14:36:00 GMT 2005


Hello,

> On Tue, 2005-11-15 at 15:13 +0100, Steven Bosscher wrote:
> > On Nov 15, 2005 02:59 PM, Zdenek Dvorak
> > <rakdver@atrey.karlin.mff.cuni.cz> wrote:
> > 
> > > > It's quite possible your brokenness related to EH is because he's
> > > > using
> > > > analyze_subcfg, which doesn't know which blocks have eh handling
> > > > info in
> > > > them, and which blocks don't, so it doesn't say to process them.
> > (...)
> > > however, invariant motion does not at all care about liveness. All it
> > > uses are UD chains.
> >  
> > And it is not getting those right either.
> >  
> 
> Only because this is barely documented, and certainly the semantics you
> are describing are not those that the docs or flow.c say.
> 
> Nowhere does it say "These registers are considered to be defined by the
> eh edges".
> 
> tm.texi says: "A C expression whose value is the @var{N}th register
> number used for
> data by exception handlers, or @code{INVALID_REGNUM} if fewer than
> @var{N} registers are usable.
> "
> 
> "used for data".  Not "whose value is set by exception handling
> mechanisms when incoming to an eh block".
> 
> flow.c says:
> "  /* Mark the registers that will contain data for the handler.  */"
> 
> Not 
> "  /* Mark the registers that will be defined when coming into the
> handler.  */"
> 
> You guys keep saying these are defs, and not uses, and that the register
> is implicitly defined by the eh edge.
> 
> But the docs, and flow.c, give absolutely no indication that this is
> true.
> 
> They all imply that there is a *real def* somewhere, and that this is
> just a use of it.

well, I just look at what dw2_build_landing_pads does, what code is
produced, and for what these registers are used.  The "real" defs of
those registers are somewhere in the EH machinery, that sets them
according to the exception that is being thrown.

Zdenek



More information about the Gcc-patches mailing list