hg: valhalla/valhalla: First transition step toward L-world experimentation

Frederic Parain frederic.parain at oracle.com
Thu Feb 15 20:53:32 UTC 2018


Important warning about this changeset that has just been pushed to the valhalla repo, in the lworld branch.

This changeset is the first one to transition the code base from the Valhalla Value Types / Minimal
Value Types experimentations to the L-world experiment being discussed on this mailing list
recently. This transition requires a significant amount of work and couldn't be done in a single step.
This changeset aims to provide a common ground from which each team will start migrating their
code to the new model.

Here’s a non-extensive list of modifications in this changeset:
  - removed most vbytecodes (only 2 a kept in the L-world mode)
  - renamed vdefault and vwithfield to defaultvalue and withfield respectively, these bytecodes have
    also been renumbered
  - removed support for “;Q…:” format in signatures, in the L-world, both object classes and value
    classes are using the “L…;” format
  - retrograded T_VALUETYPE from the set of main BasicTypes to a secondary level (T_VALUETYPE
    couldn’t be removed yet because too much code still depend on it), and removed types related to
    T_VALUETYPE (like the TosState qtos) and some code related to T_VALUETYPE (like OopMap
    generation)
  - added declaration of the ACC_FLATTENABLE flag, and started updating code which should test
    is_flattenable() instead of is_value_type() (still a lot of fixes required in this area)
  - added support for ACC_FLATTENABLE in meta-data (AccessFlags, FieldIndo, cpCache)
  - reworked InstanceKlass/ValueKlass layout to gather ValueKlass specific fields into a single block
    with fixed layout
  - removed usages of java/lang/__Value as the super-type of all value classes (in the L-world, their
    super-type is java/lang/Object)
  - started removing code specific to MVT (Minimal Value Types)

The end result of these changes is a workspace that builds on Linux and Mac OS X, and can even
pass a few tests compiled with the new version of javac pushed by Srikanth.

But a number of shortcuts were needed to reach this status:
  - most optimizations specific to value types are currently disabled
  - value flattening is currently disabled
  - JIT compiler is currently not able to compile code with value classes (tests that pass are forced
    to run in interpreted mode)

So, basically, value are mostly handled as objects. The plan is to incrementally restore these
optimizations as teams adapt their code to the new L-world model.

In places where the source code has been modified:
  - if the changes required by the new model were obvious, they have been made
  - otherwise, source code has been changed to pass compilation, without providing the right
    semantic. When obsolete code were complex, it has been commented instead of being removed

The webrev with all the changes is available here:
http://cr.openjdk.java.net/~fparain/L-world/webrev.00/

If this changeset breaks too many things, please let me know. We still have the option to
roll it back and find another way to initiate the transition to the L-world.

Regards,

Fred
 

> On Feb 15, 2018, at 15:55, frederic.parain at oracle.com wrote:
> 
> Changeset: e4adfb753051
> Author:    fparain
> Date:      2018-02-15 15:51 -0500
> URL:       http://hg.openjdk.java.net/valhalla/valhalla/rev/e4adfb753051
> 
> First transition step toward L-world experimentation
> 
> ! src/hotspot/cpu/x86/globals_x86.hpp
> ! src/hotspot/cpu/x86/interp_masm_x86.cpp
> ! src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp
> ! src/hotspot/cpu/x86/templateTable_x86.cpp
> ! src/hotspot/share/ci/bcEscapeAnalyzer.cpp
> ! src/hotspot/share/ci/ciEnv.cpp
> ! src/hotspot/share/ci/ciField.cpp
> ! src/hotspot/share/ci/ciInstanceKlass.cpp
> ! src/hotspot/share/ci/ciMethodBlocks.cpp
> ! src/hotspot/share/ci/ciStreams.cpp
> ! src/hotspot/share/ci/ciType.cpp
> ! src/hotspot/share/ci/ciTypeFlow.cpp
> ! src/hotspot/share/classfile/classFileParser.cpp
> ! src/hotspot/share/classfile/classFileParser.hpp
> ! src/hotspot/share/classfile/classLoader.cpp
> ! src/hotspot/share/classfile/javaClasses.cpp
> ! src/hotspot/share/classfile/systemDictionary.cpp
> ! src/hotspot/share/classfile/systemDictionary.hpp
> ! src/hotspot/share/classfile/verificationType.cpp
> ! src/hotspot/share/classfile/verificationType.hpp
> ! src/hotspot/share/classfile/verifier.cpp
> ! src/hotspot/share/classfile/verifier.hpp
> ! src/hotspot/share/classfile/vmSymbols.cpp
> ! src/hotspot/share/classfile/vmSymbols.hpp
> ! src/hotspot/share/compiler/compileBroker.cpp
> ! src/hotspot/share/compiler/methodLiveness.cpp
> ! src/hotspot/share/include/jvm.h
> ! src/hotspot/share/interpreter/bytecodeTracer.cpp
> ! src/hotspot/share/interpreter/bytecodes.cpp
> ! src/hotspot/share/interpreter/bytecodes.hpp
> ! src/hotspot/share/interpreter/interpreterRuntime.cpp
> ! src/hotspot/share/interpreter/interpreterRuntime.hpp
> ! src/hotspot/share/interpreter/linkResolver.cpp
> ! src/hotspot/share/interpreter/oopMapCache.cpp
> ! src/hotspot/share/interpreter/rewriter.cpp
> ! src/hotspot/share/interpreter/templateInterpreter.cpp
> ! src/hotspot/share/interpreter/templateInterpreter.hpp
> ! src/hotspot/share/interpreter/templateInterpreterGenerator.cpp
> ! src/hotspot/share/interpreter/templateInterpreterGenerator.hpp
> ! src/hotspot/share/interpreter/templateTable.cpp
> ! src/hotspot/share/interpreter/templateTable.hpp
> ! src/hotspot/share/oops/arrayKlass.cpp
> ! src/hotspot/share/oops/cpCache.cpp
> ! src/hotspot/share/oops/cpCache.hpp
> ! src/hotspot/share/oops/fieldInfo.hpp
> ! src/hotspot/share/oops/generateOopMap.cpp
> ! src/hotspot/share/oops/generateOopMap.hpp
> ! src/hotspot/share/oops/instanceKlass.cpp
> ! src/hotspot/share/oops/instanceKlass.hpp
> ! src/hotspot/share/oops/instanceKlass.inline.hpp
> ! src/hotspot/share/oops/klass.cpp
> ! src/hotspot/share/oops/klassVtable.cpp
> ! src/hotspot/share/oops/methodData.cpp
> ! src/hotspot/share/oops/objArrayKlass.cpp
> ! src/hotspot/share/oops/valueKlass.cpp
> ! src/hotspot/share/oops/valueKlass.hpp
> ! src/hotspot/share/opto/compile.cpp
> ! src/hotspot/share/opto/graphKit.cpp
> ! src/hotspot/share/opto/parse.hpp
> ! src/hotspot/share/opto/parse2.cpp
> ! src/hotspot/share/opto/parse3.cpp
> ! src/hotspot/share/opto/parseHelper.cpp
> ! src/hotspot/share/opto/type.cpp
> ! src/hotspot/share/prims/jni.cpp
> ! src/hotspot/share/prims/methodHandles.cpp
> ! src/hotspot/share/runtime/fieldDescriptor.hpp
> ! src/hotspot/share/runtime/fieldType.cpp
> ! src/hotspot/share/runtime/fieldType.hpp
> ! src/hotspot/share/runtime/globals.hpp
> ! src/hotspot/share/runtime/reflection.cpp
> ! src/hotspot/share/runtime/sharedRuntime.cpp
> ! src/hotspot/share/runtime/signature.cpp
> ! src/hotspot/share/runtime/signature.hpp
> ! src/hotspot/share/utilities/accessFlags.hpp
> ! src/hotspot/share/utilities/globalDefinitions.cpp
> ! src/hotspot/share/utilities/globalDefinitions.hpp
> ! src/java.base/share/native/include/classfile_constants.h.template
> ! test/hotspot/jtreg/TEST.groups
> - test/hotspot/jtreg/runtime/valhalla/valuetypes/DeriveValueTypeCreation.java
> ! test/hotspot/jtreg/runtime/valhalla/valuetypes/Empty.java
> - test/hotspot/jtreg/runtime/valhalla/valuetypes/MVTCombo.java
> - test/hotspot/jtreg/runtime/valhalla/valuetypes/MVTComboDebugTier1.java
> - test/hotspot/jtreg/runtime/valhalla/valuetypes/MVTComboTier1.java
> ! test/hotspot/jtreg/runtime/valhalla/valuetypes/Test8186715.java
> ! test/hotspot/jtreg/runtime/valhalla/valuetypes/TestInheritedValueTypeFields.java
> ! test/hotspot/jtreg/runtime/valhalla/valuetypes/UninitializedValueFieldsTest.java
> ! test/hotspot/jtreg/runtime/valhalla/valuetypes/VDefaultTest.java
> ! test/hotspot/jtreg/runtime/valhalla/valuetypes/VTBufferTest.java
> ! test/hotspot/jtreg/runtime/valhalla/valuetypes/VWithFieldTest.java
> ! test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueOops.java
> - test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueOopsMvt.java
> ! test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueTypeArray.java
> ! test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueTypeCreation.java
> ! test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueTypeDensity.java
> ! test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueTypeGetField.java
> - test/hotspot/jtreg/runtime/valhalla/valuetypes/VboxUnbox.java
> 



More information about the valhalla-dev mailing list