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
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