On Wed, 11 Jan 2023 16:14:24 GMT, Maurizio Cimadamore <[email protected]>
wrote:
>> True - probably 3 * 3 can be achieved if this:
>>
>>
>> ThisEscapeLoop ref21 = ref14;
>>
>> Is replaced with
>>
>>
>> ThisEscapeLoop ref21 = this;
>>
>>
>> In which case the inner loop won't converge immediately (as it will have to
>> propagate from ref21 to ref22 to ref23 to ref24).
>>
>> I guess what I'm uncomfortable with is that we have effectively unbounded
>> computation here (especially when we also consider the fact that the
>> analysis "follows" method bodies as well, if they are found in the same
>> compilation unit).
>>
>> I suggest one experiment where you:
>> 1. downgrade the warnings to notes (so that they won't make the JDK build
>> fail)
>> 2. enable this Lint everywhere
>> 3. compare JDK `clean images` time w/ and w/o the Lint
>
> Also, looking at the loop test more closely, it seems to me that what the
> compiler needs to do is to prove that there can be possible paths by which a
> `this` can land into ref4.
>
> If we build a graph of all the assignments, we get:
>
> ref4 <- ref3 <- ref2 <- ref1 <- this
>
> So, if we ask "can ref4 possibly contain `this`?" we could "walk" the
> variable dependencies backwards and discover that, yes, there exist a
> possible path in which `this` would get there.
>
> Now, of course without a loop this can never be a real issue (since you can
> never send a `this` fully down the chain) - but again, this is a question of
> how much effort should be spend to handle false negatives in what look like a
> pathological case.
Good idea. Looks like the difference is in the noise, at least on my Macbook:
Builds of master (jdk-21+3-69-gc6588d5bb3f)
==================================
Build times:
real 2m24.650s
user 13m46.727s
sys 2m33.554s
real 2m27.224s
user 13m43.464s
sys 2m37.251s
real 2m26.658s
user 13m42.578s
sys 2m36.133s
Builds of ThisEscape (jdk-21+3-125-g6e96a7d76f8)
==================================
Modifications:
- Reverted files in the make/ subdirectory to enable warning
- Commented out lines 363-382 in ThisEscapeAnalyzer.java
so no warnings are actually reported
Build times:
real 2m25.912s
user 13m45.860s
sys 2m32.741s
real 2m27.213s
user 13m44.830s
sys 2m36.596s
real 2m25.756s
user 13m42.889s
sys 2m35.659s
-------------
PR: https://git.openjdk.org/jdk/pull/11874