On Apr 17, 2007, at 12:34 AM, Mikhail Fursov wrote:
> On 4/17/07, Naveen Neelakantam <neelakan@uiuc.edu> 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 HARMONY1564. 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
