[lworld] RFR: 8336003: [lworld] TestLWorld::test151 triggers "Should have been buffered" assert [v2]
Quan Anh Mai
qamai at openjdk.org
Mon Jun 16 18:06:44 UTC 2025
On Mon, 16 Jun 2025 17:45:56 GMT, Quan Anh Mai <qamai at openjdk.org> wrote:
>> Hi,
>>
>> The issue here is that the IGVN cannot deduce that the `IsBuffered` input is a constant 1. This is because after the `InlineTypeNode` is pushed down through a `Phi` cluster, the `IsBuffered` input is a `Phi` cluster with loop phis, which makes it difficult for the IGVN to see through. A solution is to do another round of CCP after loop opts, but it is rather a big hammer. In this PR, I propose to make it possible for a `PhiNode` to look through its `Phi` inputs to discover the unique non-phi input of a `Phi` cluster. The test still fails but it seems more like an expected behaviour rather than an issue this time, I have modified the test a little bit for it to pass.
>>
>> Please take a look and share your thoughts, thanks very much.
>
> Quan Anh Mai has updated the pull request incrementally with one additional commit since the last revision:
>
> fix dead loop
Thanks for your testing, the failure is due to the fact that when traversing the `Phi` inputs, I decided to skip dead inputs. This may lead to a case like an iv with a dead backedge: `Phi = Phi + 1`. However, since the backedge is dead, the function only finds the entry node, leading to `entry = entry + 1`. I fixed this by traversing all the inputs instead of only the live ones.
-------------
PR Comment: https://git.openjdk.org/valhalla/pull/1489#issuecomment-2977545145
More information about the valhalla-dev
mailing list