This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fix PR55833 + cheaper checking


Hi,

> On Thu, Jan 10, 2013 at 11:19:43PM +0100, Zdenek Dvorak wrote:
> > I agree -- at the very least, unswitch_single_loop should check whether there
> > is any possiblity it could have affected irreducible loops information (this
> > should only be the case when some already existing irreducible loop is altered
> > in the progress).  Which is what it (or more precisely, remove_path function
> > used by it) tries to do -- so is should be sufficient to check why this fails
> > for the considered testcase, and make sure the situation is correctly detected,
> 
> Actually, in this case, we don't call remove_path from unswitch_single_loop
> at all.

I am not quite sure what you mean by that -- remove_path is called unconditionally
in unswitch_loop (and fix_loop_placement is only called through remove_path).

> So, here's another stab at it.  In this version, we will call
> mark_irreducible_loops only in case where we're removing a loop
> from loop hierarchy tree.  Because when we do that (and we're in some
> irreducible region), the edge that connects those two loops
> should be marked as EDGE_IRREDUCIBLE_LOOP.  And the preheader BB
> eventually as BB_IRREDUCIBLE_LOOP.  Does this look any better?
> I'm not actually checking whether we really are in a irreducible
> region, should that be done (how?)?

Yes, you should check whether you are in an irreducible loop.  This is done by
testing EDGE_IRREDUCIBLE_LOOP flag,

Zdenek


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]