Request for review (M): 6969574: invokedynamic call sites deoptimize instead of executing
Vladimir Kozlov
vladimir.kozlov at oracle.com
Fri Jul 16 08:32:25 PDT 2010
OK.
Vladimir
On 7/15/10 10:24 PM, John Rose wrote:
> I made a slight change: Unloaded CI methods should never be classified as special internal "method_handle_invokes".
>
> See changes near "is_loaded" calls here:
> http://cr.openjdk.java.net/~jrose/6969574/webrev.01/src/share/vm/ci/ciMethod.cpp.udiff.html
>
> When C1 was using the changed code, the call from ciMethod::is_method_handle_invoke to check_if_loaded was throwing asserts.
>
> (Hat tip to Stephen Bannasch on mlvm-dev for smoking this bug out almost immediately!)
>
> -- John
>
> On Jul 15, 2010, at 3:01 PM, Vladimir Kozlov wrote:
>
>> Looks good.
>>
>> Vladimir
>>
>> John Rose wrote:
>>> http://cr.openjdk.java.net/~jrose/6969574/
>>> The compilation of invokedynamic needs several small fixes to enable the expected code generation.
>>> An initial breakage in ciTypeFlow was causing the compiler to deoptimize on dynamic call sites. Fixing this exposed a couple of other issues.
>>> Summary of fixes:
>>> 1. Add missing case for byte_no classification. (cpCacheOop.hpp)
>>> 2. Rewrite misleading comment about byte_no. (cpCacheOop.cpp)
>>> 3. Pull "signature invoker" for an indy instruction from the correct CP cache field (f1). (ciEnv.cpp)
>>> 4. Clarify tests for is_method_handle_adapter vs. is_method_handle_invoke, and assert disjointness.
>>> (methodOop.cpp, ciMethod.cpp)
>>> 5. Correct format assertion on ldc. (methodHandleWalk.cpp)
>>> The original problem (fixed by step 1) was a broken "is linked" test in ciTypeFlow which always caused a bail-out to the interpreter.
>>> This made benchmark results somewhat... suboptimal.
>>> Hat tip to Eric Bodden, who reported this last month.
>>> http://mail.openjdk.java.net/pipermail/mlvm-dev/2010-June/001767.html
>>> -- John
>
More information about the hotspot-compiler-dev
mailing list