Hi,

Would please a gatekeeper review my fix for bug 717?

https://bugs.open64.net/show_bug.cgi?id=717



The problem happens in setting/resetting the flag ISOP_INVARIANT_VISITED.
This flag is used in Invariant_cr and Invariant_cr_rec (opt_loop.cxx) to
remember the OPs found to be loop invariant (to reduce the compile time).



The flag is set when an CK_OP is found to be loop invariant.

The flag is reset when

1) cr->opnd(kid) is loop variant, reset cr->opnd(0), ..., cr->opnd(kid-1)
(line #605)

2) After finishing recursive function Invariant_cr_rec, if the cr is loop
invariant, resetting cr’s flag (because the loop invariant information is
stale for different loops). (line #635)



The problem is that it misses the fact that a CK_OP can be the child of a
CK_IVAR. If the CK_OP is loop variant, it is set ISOP_INVARIANT_VISITED. But
its parent CK_IVAR is loop variant. Thus, CK_OP is never reset. For anther
loop, although this CK_OP is not loop invariant, it is marked as loop
invariant because of ISOP_INVARIANT_VISITED.



Here is the failing test case:

for (s = seg_tab; s - seg_tab < segCount; s++) {

          for (i = s->startCode; i <= s->endCode; i++) {

                  index = s->idDelta + i;

                  if (index < 0 )

                    ttf_fail ("cmap: glyph index out of range [0..%i)",
index);

            }

}



The address computation for s->idDelta is set  ISOP_INVARIANT_VISITED for
the inner loop and never reset. And s->idDelta is NOT loop invariant for the
outer loop.


My fix is to reset ISOP_INVARIANT_VISITED for the CK_IVAR if it returns loop
variant.

Thanks,

Min

Attachment: invar.p
Description: Binary data

------------------------------------------------------------------------------
Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
Finally, a world-class log management solution at an even better price-free!
Download using promo code Free_Logger_4_Dev2Dev. Offer expires 
February 28th, so secure your free ArcSight Logger TODAY! 
http://p.sf.net/sfu/arcsight-sfd2d
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to