[9] RFR (S): 8074548: Never-taken branches cause repeated deopts in MHs.GWT case
Vladimir Ivanov
vladimir.x.ivanov at oracle.com
Mon Mar 16 19:27:06 UTC 2015
Thanks, John!
Will fix the typo before pushing the fix.
Best regards,
Vladimir Ivanov
On 3/16/15 9:51 PM, John Rose wrote:
> Good fix, thanks. — John
>
> P.S. I noticed a typo: "it's" (contraction of "it is") should be "its" (genitive of "it").
>
> On Mar 16, 2015, at 11:26 AM, Vladimir Ivanov <vladimir.x.ivanov at oracle.com> wrote:
>>
>> http://cr.openjdk.java.net/~vlivanov/8074548/webrev.00/
>> https://bugs.openjdk.java.net/browse/JDK-8074548
>>
>> MethodHandleImpl::profileBoolean doesn't update never-taken branch count when hitting a deopt on it. As a result, for rarely taken branches consequent compilations consider them as never-taken and prune them again causing repeated deopts. It severely affects peak performance.
>>
>> The fix is to update MHI::profileBoolean intrinsic to insert a guard and uncommon trap w/ reexecute bit set for never-seen value. Once previously never seen value is encountered, the execution resumes after deopt in MHI::profileBoolean and corresponding count becomes non-zero.
>>
>> The guard doesn't add any additional overhead, since it dominates all value usages and all branches on the same value are eliminated.
>>
>> Testing: java/lang/invoke, nashorn, octane
>
More information about the mlvm-dev
mailing list