[9] RFR (S): 8074548: Never-taken branches cause repeated deopts in MHs.GWT case

Vladimir Kozlov vladimir.kozlov at oracle.com
Mon Mar 16 20:40:27 UTC 2015

You already have 'result' variable for argument(0), why reread?:


Usually IfTrue is the fast path. IGVN will revert that check to have 
that. But it is better to have it in code. Current code looks like 
double negation.

There is no explanation in changes why false_count never seen (== 0) is 
more important than true_count == 0. The comment says "one of the values".


On 3/16/15 11:26 AM, Vladimir Ivanov 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
> Best regards,
> Vladimir Ivanov
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

More information about the hotspot-compiler-dev mailing list