RFR: JDK-8234507 [lworld] Macro ASM version of access_value_copy

David Simms david.simms at oracle.com
Fri Nov 22 13:03:37 UTC 2019


Thanks for the review, I know it is not the easiest code to pick 
through, thanks for taking the time...

Updated webrev1: 
http://cr.openjdk.java.net/~dsimms/valhalla/8234507/webrev1/

All comments applied, see below for details...

On 21/11/19 5:20 PM, Frederic Parain wrote:
> David,
>
> Thank you for this work, it was huge but it seems you tackled it nicely.
> Nice refactoring of the allocation code.
> And the performance numbers sound great.
>
> Here’s my feedback on your webrev:
>
>
> src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp
>
>    No comment
>
> src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.hpp
>
>    No comment
>
> src/hotspot/cpu/x86/interp_masm_x86.cpp
>
>    No comment
>
> src/hotspot/cpu/x86/interp_masm_x86.hpp
>
>    line 227: does the method really need to be virtual?

Nope, removed

>
> src/hotspot/cpu/x86/macroAssembler_x86.cpp
>
>    line 4520: using temp_reg instead of obj for the temp register of test_klass_is_empty_value()
>               would make the code easier to read (just my opinion)
You are correct, done
>
> src/hotspot/cpu/x86/macroAssembler_x86.hpp
>
>    line 107: I don’t get the comment (seems to be a bad copy/paste from line 574)
>    line 551: does the method really need to be virtual?

107: you are right, looks like when I rearranged where method decls went

551: nope, removed

> src/hotspot/cpu/x86/templateTable_x86.cpp
>
>     line 4339: the template of defaultvalue could be simplified by using the new get_empty_value_oop()
>     line 3704: qputfield could be re-written to use access_value_copy() and avoid the runtime call
>                (this could be delayed to another CR)
>     line 3795: Label slow_path is not used

4339: Done

3704: Yeap, but deferred for another CR for now (JDK-8234632 for 
putfield and JDK-8234633 for aaload/aastore)

3795: Label removed

>
> src/hotspot/share/gc/shared/collectedHeap.hpp
>
> src/hotspot/share/gc/shared/collectedHeap.inline.hpp
>
>    No comment
>
> src/hotspot/share/gc/shared/memAllocator.cpp
>
>    No comment
>
> src/hotspot/share/gc/shared/memAllocator.hpp
>
>    No comment
>
> src/hotspot/share/oops/instanceKlass.cpp
>
>    line 508: [style] add empty line?
>
> src/hotspot/share/oops/instanceKlass.hpp
>
>    No comment
>
> src/hotspot/share/oops/valueKlass.cpp
>
>    no comment
>
> src/hotspot/share/oops/valueKlass.hpp
>
>    line 109: allocate_instance_buffer() it would be helpful to have a comment here to explicitly
>              state that the allocated instance memory has not been cleared, so initialization of
>              its payload *must* follow before returning the oop to Java (there’s a comment in
>              collectedHeap.hpp, but people have to dig in to find it)

Good spotting. This was left over code from attempting to improve the 
interpreter runtime call, I really should have given it a little more 
care than the initial benchmarking hack. Commented as:

   // allocates a stand alone value buffer in the Java heap
   // DOES NOT have memory cleared, user MUST initialize payload before
   // returning to Java (i.e.: value_copy)

> src/hotspot/share/gc/shared/barrierSetRuntime.cpp
>
>    No comment
>
> src/hotspot/share/gc/shared/barrierSetRuntime.hpp
>
>    No comment
>
> Regards,
>
> Fred





More information about the valhalla-dev mailing list