RFR(S): 8146792: Predicate moved after partial peel may lead to broken graph
vladimir.kozlov at oracle.com
Tue Jan 12 00:43:49 UTC 2016
Now I think I understand.
Note, there should be NO any control between loop's head and predicate check. I assume CastPP is attached to it because
its original check was removed by dominated similar check (for example NULL check).
I think it is safe to move CastPP above original dummy predicate checks (one or two checks if there is loop limit
checks) since Cast PP should not depend on them. It will solve the problem since moved check(new predicate) is always
inserted before original dummy predicate (which will be removed later).
On 1/11/16 7:07 AM, Roland Westrelin wrote:
> - partial peeling is applied to a loop
> - the peeled section is optimized and leaves a pinned node between the loop predicates and the loop body but no control flow
> - loop predicates are applied and a predicate that depends on the pinned node is moved out of the loop, before the pinned node, leading to a broken graph
> This is the same issue that came up during review of 8139771. Vladimir suggested it gets reviewed separately. With the included test case it reproduces without the change from 8139771.
More information about the hotspot-compiler-dev