On Jun 18, 2011, at 5:15 AM, Rémi Forax wrote:

> On 06/18/2011 03:15 AM, Tom Rodriguez wrote:
>> On Jun 17, 2011, at 5:00 PM, John Rose wrote:
>> 
>>> On Jun 17, 2011, at 10:21 AM, Tom Rodriguez wrote:
>>> 
>>>>> Sorry, I was thinking recording which branch of the GWT is taken and
>>>>> storing them in the GWT.
>>>>> Two GWTs should not share the same metadata.
>>>> This is the major problem with GWT/selectAlternative.  Previously when GWT 
>>>> was bytecodes we at least had a chance to get some profile information on 
>>>> which way the branch was likely to go but with the ricochet frame version 
>>>> we have no knowledge so each side of the if has equal probability.  The 
>>>> were no guarantees that the GWT would always be used as a fast/slow idiom 
>>>> but in practice it was so we used to get good data.  We'll have to find 
>>>> someway to capture profiles for this if we can to treat fast/slow in a 
>>>> more aggressive way.
>>> selectAlternative has a branch profile.  As long as GWT is being used as 
>>> expected (for fast/slow splits), selectAlternative will have a fast/slow 
>>> profile, just like the original GWT invokers.
>>> 
>>> The PROB_FAIR in CallGenerator::for_method_handle_inline could be made 
>>> "smarter", by feeding from the control inputs of the Phi; that would be a 
>>> good start.
>> Well duh on me.  When I wrote that my brain was thinking cmove instruction, 
>> not a real If diamond with probability.  I don't think fixing this will 
>> improve the inlining in the fast case but it should reduce useless inlining 
>> in the slow path.  I've got part of this working.
>> 
>> tom
> 
> But all GWT share the same selectAlternative, so the probability
> of the inputs of the Phi is the propability of all GWTs.
> I think it's better to artificially mark the fallback as never been 
> called instead of relying
> on a global shared profile.

Are you suggesting that MethodHandles.guardWithTest should always assume that 
the second choice is effectively never called?  That seems like a strong 
assumption.  It unfortunate that the method handles interface doesn't give 
better hinting for something like this.

Can someone explain the idiom being used here a little more?  It seems like 
selectAlternative is being used to build a caching call site but I would have 
expected that to be a more first class object, like a CallSite subclass with a 
guard and fallback.

tom

> 
> Also, the fallback will be called a few times (usually at least once) 
> before the target
> of a callsite becomes stable so a global profile will be artificially 
> pollutedp
> by the initialization phases of all GWTs.
> 
> Another way to solve the problem is to generate the code twice as the 
> tiered compilation does.
> The first generation will include MDOs that will be used by the second 
> generation.
> 
> Rémi
> 
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev@openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to