Request for review (M): 6969574: invokedynamic call sites deoptimize instead of executing

John Rose john.r.rose at oracle.com
Thu Jul 15 22:24:17 PDT 2010


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