[PATCH] PR/17860: wrong code generated by loop optimizer up to 3.4

Paolo Bonzini paolo.bonzini@polimi.it
Tue Oct 12 13:43:00 GMT 2004


 > 2)  Does it actually matter directly that the VTOPs don't match?
 > AFAICS the test (set (reg:CCGC 17 flags) ...) at the LOOP_BEG (insn
 > 61) is dead, isn't it, since there's nothing in straight-line between
 > it and the clobber (reg:CC 17 flags) at insn 28.  The code in the dbra
 > optimisation that you've patched out doesn't check for anything else
 > except the existence of a vtop; if the two tests still matched, would
 > it still be wrong?

No.  But it is relying on vtop's to deduce a property of a loop (being a 
while loop rather than do...while), and the testcase shows how this 
property may not be true anymore after CSE.  Uses of vtop like the one I 
removed need to be either fixed or removed; and I suspect that *all of 
the uses of vtop* need to.

Basically, I think that removing a not-very-often-used transformation in 
an almost dead optimization pass is feasible.  Remember 3.4 has Zdenek's 
dominator-based loop optimizer as well.

 >   But the invalid note remains in the generated rtl, yes?  And so it
 > might perhaps - but in these testcases doesn't - cause a problem in one
 > of these four later places you list ? [...]
 >
 >   I'm not familiar with the loop optimisers, so forgive me if some of my
 > questions seem dumb, but I'm curious about the implications of these
 > uses.  Are you fairly confident that simply removing the code that emits
 > the VTOP notes will just cause a few optimisation opportunities to be
 > lost but is unlikely to lead to misbehaviour in these places?

It definitely won't.  VTOP notes are only extra information, they are 
used to gather properties of the instructions between them and END.  If 
you write all your loops like this,

   if (--x > 0)
     do
       ...
     while (--x > 0);

voila, no more VTOP notes, because the only place they are created is 
during loop header copying.  Besides, mainline has not had them since 
the tree-ssa merge (and they have been completely removed last August).

So removing them can only give pessimization (and less bugs), leaving 
them in can only give more optimization (and more bugs).

 > And those last two cases that you mention in unroll.c, if we're just
 > trying to find the loop iteration count, wouldn't it be possible to
 > determine the information from the LOOP_BEG instead of the VTOP?  They
 > both seem like they ought to be quite simple cases to recognize,
 > shouldn't they?

It seems like other parts of the optimizer make this less than trivial 
(very much so), while VTOP notes make it easier.  But they are 
intrinsically brittle, it seems to me.

Paolo




More information about the Gcc mailing list