Intermediate writes to array slot not eliminated by optimizer
Vitaly Davidovich
vitalyd at gmail.com
Wed May 13 14:19:44 UTC 2015
Great, thank you
On Wed, May 13, 2015 at 10:19 AM, Roland Westrelin <
roland.westrelin at oracle.com> wrote:
> > Thanks Roland. Did you by chance confirm this on your end? I wanted to
> make sure this wasn't some artifact on my part.
>
> Yes, it’s a problem on our side.
>
> Roland.
>
> >
> > Vitaly
> >
> > On Wed, May 13, 2015 at 10:08 AM, Roland Westrelin <
> roland.westrelin at oracle.com> wrote:
> > Vitaly,
> >
> > I filed:
> >
> > https://bugs.openjdk.java.net/browse/JDK-8080289
> >
> > Roland.
> >
> >
> > > On May 12, 2015, at 7:56 PM, Vitaly Davidovich <vitalyd at gmail.com>
> wrote:
> > >
> > > Well, this seems more about detecting that each iteration of the loop
> is storing to the same address, which means if the loop is counted (or
> otherwise determined to end), then only final value can be stored. Even if
> loop is not removed entirely and the final value computed statically (as
> one could conceive in this case), I'd think working with a temp inside the
> loop and then storing the temp value into memory would be good as well.
> > >
> > > FWIW, gcc and llvm do the "right" thing here in similarly shaped C++
> code :).
> > >
> > > On Tue, May 12, 2015 at 1:47 PM, Vladimir Kozlov <
> vladimir.kozlov at oracle.com> wrote:
> > > The most important thing we need do with this code is move Store from
> the loop. We definitely collapse empty loops.
> > > We do move some loop invariant nodes from loops but this case could be
> different. I think the problem is stored value is loop variant.
> > > Yes, it would benefit in general if we could move such stores from
> loops.
> > >
> > > Vladimir
> > >
> > > On 5/12/15 10:16 AM, Vitaly Davidovich wrote:
> > > Thanks Vladimir. I believe I did see the split pre/main/post loop form
> > > in the compiled code; I tried it with both increment and decrement, and
> > > also a plain counted for loop, but same asm in the end. Clearly the
> > > example I gave is just for illustrating the point, but perhaps this
> type
> > > of code can be left behind after some other optimization passes
> > > complete. Do you think it's worth handling these types of things?
> > >
> > > On Tue, May 12, 2015 at 1:12 PM, Vladimir Kozlov
> > > <vladimir.kozlov at oracle.com <mailto:vladimir.kozlov at oracle.com>>
> wrote:
> > >
> > > I would need to look on ideal graph to find what is going on.
> > > My guess is that the problem is Store node has control edge
> pointing
> > > to loop head so we can't move it from loop. Or stupid staff like we
> > > only do it for index increment and not for decrement (which I
> doubt).
> > >
> > > Most possible scenario is we convert this loop to canonical Counted
> > > and split it (creating 3 loops: pre, main, post) before we had a
> > > chance to collapse it.
> > >
> > > Regards,
> > > Vladimir
> > >
> > > On 5/12/15 10:05 AM, Vitaly Davidovich wrote:
> > >
> > > Anyone? :)
> > >
> > > Thanks
> > >
> > > On Mon, May 11, 2015 at 8:25 PM, Vitaly Davidovich
> > > <vitalyd at gmail.com <mailto:vitalyd at gmail.com>
> > > <mailto:vitalyd at gmail.com <mailto:vitalyd at gmail.com>>> wrote:
> > >
> > > Hi guys,
> > >
> > > Suppose we have the following code:
> > >
> > > private static final long[] ARR = new long[10];
> > > private static final int ITERATIONS = 500 * 1000 * 1000;
> > >
> > >
> > > static void loop() {
> > > int i = ITERATIONS;
> > > while(--i >= 0) {
> > > ARR[4] = i;
> > > }
> > > }
> > >
> > > My expectation would be that loop() effectively compiles
> to:
> > > ARR[4] = 0;
> > > ret;
> > >
> > > However, an actual loop is compiled. This example is a
> > > reduction of
> > > a slightly more involved case that I had in mind, but I'm
> > > curious if
> > > I'm missing something here.
> > >
> > > I tested this with 8u40 and tiered compilation disabled,
> > > for what
> > > it's worth.
> > >
> > > Thanks
> > >
> > >
> > >
> > >
> >
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20150513/e0368f71/attachment-0001.html>
More information about the hotspot-compiler-dev
mailing list