On Apr 17, 2007, at 12:34 AM, Mikhail Fursov wrote:

On 4/17/07, Naveen Neelakantam <[EMAIL PROTECTED]> wrote:

But in general, other optimization passes can perform transformations
that break important dataflow relationships between variables.  This
sometimes makes it impossible for ABCD to prove that a particular
bounds check is redundant (ABCD uses "constraints", which are derived
from dataflow).


Naveen, if any of optimizations we have can break ABCD with Maxim's example,
it worth to be analyzed. I hope there are no such optimizations in JIT
today. If you know one we can proceed and check it: it may lead to
additional improvements in ABCD algorithm.

I could not find a pass order that break's ABCD with Maxim's example. However, I found a pass order using loop peeling that prevents bounds checks from being proven redundant with the BidirectionalBubbleSort example in HARMONY-1564. The following pass order in opt.emconf will prevent 2 bounds checks from being proven redundant: - XDjit.CS_OPT.path.optimizer=ssa,devirt,inline,uce,purge,simplify,dce,uce ,lazyexc,memopt,simplify,dce,uce,dessa,statprof,peel,ssa,classic_abcd,lo wer,dessa,statprof,markglobals

Whereas these pass orders both work (and both use loop peeling):
- XDjit.CS_OPT.path.optimizer=ssa,devirt,inline,uce,purge,simplify,dce,uce ,lazyexc,memopt,simplify,dce,uce,dessa,statprof,peel,ssa,memopt,classic_ abcd,lower,dessa,statprof,markglobals - XDjit.CS_OPT.path.optimizer=ssa,devirt,inline,uce,purge,simplify,dce,uce ,lazyexc,memopt,simplify,dce,uce,classic_abcd,dessa,statprof,peel,ssa,lo wer,dessa,statprof,markglobals

The takeaway is that classic_abcd should either be run before loop peeling, or if it runs after loop peeling, memopt should be run between it and loop peeling.

Naveen


--
Mikhail Fursov

Reply via email to