changeset 49029:e4adfb753051 lworld

First transition step toward L-world experimentation
author fparain
date Thu, 15 Feb 2018 15:51:07 -0500
parents 3f5d80a69361
children 51eab9946bcb
files 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
diffstat 96 files changed, 544 insertions(+), 3006 deletions(-) [+]
line wrap: on
line diff
--- a/src/hotspot/cpu/x86/globals_x86.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/cpu/x86/globals_x86.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -103,8 +103,8 @@
 define_pd_global(bool, ThreadLocalHandshakes, false);
 #endif
 
-define_pd_global(bool, ValueTypePassFieldsAsArgs, LP64_ONLY(true) NOT_LP64(false));
-define_pd_global(bool, ValueTypeReturnedAsFields, LP64_ONLY(true) NOT_LP64(false));
+define_pd_global(bool, ValueTypePassFieldsAsArgs, LP64_ONLY(false) NOT_LP64(false));
+define_pd_global(bool, ValueTypeReturnedAsFields, LP64_ONLY(false) NOT_LP64(false));
 
 #define ARCH_FLAGS(develop, \
                    product, \
--- a/src/hotspot/cpu/x86/interp_masm_x86.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/cpu/x86/interp_masm_x86.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -347,7 +347,6 @@
   const Address val_addr(rcx, JvmtiThreadState::earlyret_value_offset());
 #ifdef _LP64
   switch (state) {
-    case qtos: // fall through
     case atos: movptr(rax, oop_addr);
                movptr(oop_addr, (int32_t)NULL_WORD);
                verify_oop(rax, state);              break;
@@ -369,7 +368,6 @@
   const Address val_addr1(rcx, JvmtiThreadState::earlyret_value_offset()
                              + in_ByteSize(wordSize));
   switch (state) {
-    case qtos: // fall through
     case atos: movptr(rax, oop_addr);
                movptr(oop_addr, NULL_WORD);
                verify_oop(rax, state);                break;
@@ -632,8 +630,6 @@
 
 void InterpreterMacroAssembler::pop(TosState state) {
   switch (state) {
-  case ptos: // Fall through
-  case qtos: // Fall through
   case atos: pop_ptr();                 break;
   case btos:
   case ztos:
@@ -652,7 +648,6 @@
 void InterpreterMacroAssembler::push(TosState state) {
   verify_oop(rax, state);
   switch (state) {
-  case qtos: // Fall through
   case atos: push_ptr();                break;
   case btos:
   case ztos:
@@ -689,7 +684,6 @@
 
 void InterpreterMacroAssembler::pop(TosState state) {
   switch (state) {
-    case qtos:                                               // fall through
     case atos: pop_ptr(rax);                                 break;
     case btos:                                               // fall through
     case ztos:                                               // fall through
@@ -739,7 +733,6 @@
 void InterpreterMacroAssembler::push(TosState state) {
   verify_oop(rax, state);
   switch (state) {
-    case qtos:                                               // fall through
     case atos: push_ptr(rax); break;
     case btos:                                               // fall through
     case ztos:                                               // fall through
--- a/src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/cpu/x86/templateInterpreterGenerator_x86.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -204,7 +204,7 @@
   // and NULL it as marker that esp is now tos until next java call
   __ movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD);
 
-  if (state == qtos && ValueTypeReturnedAsFields) {
+  if (/*state == qtos*/ false && ValueTypeReturnedAsFields) {
 #ifndef _LP64
     __ super_call_VM_leaf(StubRoutines::store_value_type_fields_to_buf());
 #else
@@ -1864,12 +1864,10 @@
                                                          address& lep,
                                                          address& fep,
                                                          address& dep,
-                                                         address& qep,
                                                          address& vep) {
   assert(t->is_valid() && t->tos_in() == vtos, "illegal template");
   Label L;
   aep = __ pc();  __ push_ptr();   __ jmp(L);
-  qep = __ pc();  __ push_ptr();   __ jmp(L);
 #ifndef _LP64
   fep = __ pc(); __ push(ftos); __ jmp(L);
   dep = __ pc(); __ push(dtos); __ jmp(L);
--- a/src/hotspot/cpu/x86/templateTable_x86.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/cpu/x86/templateTable_x86.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -781,12 +781,6 @@
   __ movptr(rax, aaddress(rbx));
 }
 
-void TemplateTable::vload() {
-  transition(vtos, qtos);
-  locals_index(rbx);
-  __ movptr(rax, aaddress(rbx));
-}
-
 void TemplateTable::locals_index_wide(Register reg) {
   __ load_unsigned_short(reg, at_bcp(2));
   __ bswapl(reg);
@@ -825,12 +819,6 @@
   __ movptr(rax, aaddress(rbx));
 }
 
-void TemplateTable::wide_vload() {
-  transition(vtos, qtos);
-  locals_index_wide(rbx);
-  __ movptr(rax, aaddress(rbx));
-}
-
 void TemplateTable::index_check(Register array, Register index) {
   // Pop ptr into array
   __ pop_ptr(array);
@@ -908,17 +896,6 @@
                                 arrayOopDesc::base_offset_in_bytes(T_OBJECT)));
 }
 
-void TemplateTable::vaload() {
-  transition(itos, qtos);
-
-  Register array = rcx;
-  Register index = rax;
-
-  index_check(array, index); // kills rbx, pops array
-
-  __ call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::value_array_load) , array, index);
-}
-
 void TemplateTable::baload() {
   transition(itos, itos);
   // rax: index
@@ -1097,13 +1074,6 @@
   __ movptr(aaddress(rbx), rax);
 }
 
-void TemplateTable::vstore() {
-  transition(vtos, vtos);
-  __ pop_ptr(rax);
-  locals_index(rbx);
-  __ movptr(aaddress(rbx), rax);
-}
-
 void TemplateTable::wide_istore() {
   transition(vtos, vtos);
   __ pop_i();
@@ -1149,13 +1119,6 @@
   __ movptr(aaddress(rbx), rax);
 }
 
-void TemplateTable::wide_vstore() {
-  transition(vtos, vtos);
-  __ pop_ptr(rax);
-  locals_index_wide(rbx);
-  __ movptr(aaddress(rbx), rax);
-}
-
 void TemplateTable::iastore() {
   transition(itos, vtos);
   __ pop_i(rbx);
@@ -1256,22 +1219,23 @@
   __ addptr(rsp, 3 * Interpreter::stackElementSize);
 }
 
-void TemplateTable::vastore() {
-  transition(vtos, vtos);
-
-  Register value = rcx;
-  Register index = rbx;
-  Register array = rax;
-
-  // stack: ..., array, index, value
-  __ pop_ptr(value);
-  __ pop_i(index);
-  __ pop_ptr(array);
-
-  index_check_without_pop(array, index);
-
-  __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::value_array_store), array, index, value);
-}
+// This code has to be merged with aastore
+//void TemplateTable::vastore() {
+//  transition(vtos, vtos);
+//
+//  Register value = rcx;
+//  Register index = rbx;
+//  Register array = rax;
+//
+//  // stack: ..., array, index, value
+//  __ pop_ptr(value);
+//  __ pop_i(index);
+//  __ pop_ptr(array);
+//
+//  index_check_without_pop(array, index);
+//
+//  __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::value_array_store), array, index, value);
+//}
 
 void TemplateTable::bastore() {
   transition(itos, vtos);
@@ -2805,12 +2769,13 @@
     __ bind(no_safepoint);
   }
 #endif
-  if (state == qtos) {
-    const Register thread1 = NOT_LP64(rcx) LP64_ONLY(r15_thread);
-    __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::return_value), rax);
-    NOT_LP64(__ get_thread(thread1));
-    __ get_vm_result(rax, thread1);
-  }
+//  This code has to be re-store before re-enabling value buffering in TLVB
+//  if (state == qtos) {
+//    const Register thread1 = NOT_LP64(rcx) LP64_ONLY(r15_thread);
+//    __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::return_value), rax);
+//    NOT_LP64(__ get_thread(thread1));
+//    __ get_vm_result(rax, thread1);
+//  }
 
   // Narrow result if state is itos but result type is smaller.
   // Need to narrow in the return bytecode rather than in generate_return_entry
@@ -2830,7 +2795,7 @@
   }
 #endif // ASSERT
 
-  __ remove_activation(state, rbcp, true, true, true, state == qtos && ValueTypeReturnedAsFields);
+  __ remove_activation(state, rbcp, true, true, true, /*state == qtos*/ false && ValueTypeReturnedAsFields);
 
   __ jmp(rbcp);
 }
@@ -3056,33 +3021,33 @@
 
   __ bind(notByte);
 
-  __ cmpl(flags, qtos);
-  __ jcc(Assembler::notEqual, notValueType);
-  // qtos
-  if (is_static) {
-    Label initialized;
-    // Issue below if the static field has not been initialized yet
-    __ load_heap_oop(rax, field);
-    __ testptr(rax, rax);
-    __ jcc(Assembler::notZero, initialized);
-    __ andl(flags2, ConstantPoolCacheEntry::field_index_mask);
-    __ call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::uninitialized_static_value_field),
-         obj, flags2);
-    __ verify_oop(rax);
-    __ bind(initialized);
-    __ push(qtos);
-  } else {
-    __ andl(flags2, ConstantPoolCacheEntry::field_index_mask);
-    pop_and_check_object(rbx);
-    call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::qgetfield),
-            rbx, flags2, rcx);
-    __ verify_oop(rax);
-    __ push(qtos);
-    // Bytecode rewrite?
-  }
-  __ jmp(Done);
-
-  __ bind(notValueType);
+//  __ cmpl(flags, qtos);
+//  __ jcc(Assembler::notEqual, notValueType);
+//  // qtos
+//  if (is_static) {
+//    Label initialized;
+//    // Issue below if the static field has not been initialized yet
+//    __ load_heap_oop(rax, field);
+//    __ testptr(rax, rax);
+//    __ jcc(Assembler::notZero, initialized);
+//    __ andl(flags2, ConstantPoolCacheEntry::field_index_mask);
+//    __ call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::uninitialized_static_value_field),
+//         obj, flags2);
+//    __ verify_oop(rax);
+//    __ bind(initialized);
+//    __ push(atos);
+//  } else {
+//    __ andl(flags2, ConstantPoolCacheEntry::field_index_mask);
+//    pop_and_check_object(rbx);
+//    call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::qgetfield),
+//            rbx, flags2, rcx);
+//    __ verify_oop(rax);
+//    __ push(atos);
+//    // Bytecode rewrite?
+//  }
+//  __ jmp(Done);
+//
+//  __ bind(notValueType);
 
   if (!is_static) pop_and_check_object(obj);
 
@@ -3219,15 +3184,15 @@
   getfield_or_static(byte_no, true);
 }
 
-void TemplateTable::vwithfield() {
-  transition(vtos, qtos);
+void TemplateTable::withfield() {
+  transition(vtos, atos);
 
   Register cache = LP64_ONLY(c_rarg1) NOT_LP64(rcx);
   Register index = LP64_ONLY(c_rarg2) NOT_LP64(rdx);
 
   resolve_cache_and_index(f2_byte, cache, index, sizeof(u2));
 
-  call_VM(rbx, CAST_FROM_FN_PTR(address, InterpreterRuntime::vwithfield), cache);
+  call_VM(rbx, CAST_FROM_FN_PTR(address, InterpreterRuntime::withfield), cache);
   // new value type is returned in rbx
   // stack adjustement is returned in rax
   __ verify_oop(rbx);
@@ -3401,29 +3366,31 @@
   }
 
   __ bind(notObj);
-  __ cmpl(flags, qtos);
-  __ jcc(Assembler::notEqual, notValueType);
-
-  // qtos
-  {
-    __ pop(qtos); // => rax == value
-    if (!is_static) {
-      // value types in non-static fields are embedded
-      pop_and_check_object(rbx);
-      call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::qputfield),
-          rbx, rax, rcx);
-      __ jmp(notVolatile); // value types are never volatile
-    } else {
-      // Store into the static field
-      // Value types in static fields are currently handled with indirection
-      // but a copy to the Java heap might be required if the value is currently
-      // stored in a thread local buffer
-      call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::qputstatic), rax, off, obj);
-    }
-    __ jmp(Done);
-  }
-
-  __ bind(notValueType);
+
+//  __ cmpl(flags, qtos);
+//  __ jcc(Assembler::notEqual, notValueType);
+//
+//  // qtos
+//  {
+//    __ pop(atos); // => rax == value
+//    if (!is_static) {
+//      // value types in non-static fields are embedded
+//      pop_and_check_object(rbx);
+//      call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::qputfield),
+//          rbx, rax, rcx);
+//      __ jmp(notVolatile); // value types are never volatile
+//    } else {
+//      // Store into the static field
+//      // Value types in static fields are currently handled with indirection
+//      // but a copy to the Java heap might be required if the value is currently
+//      // stored in a thread local buffer
+//      call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::qputstatic), rax, off, obj);
+//    }
+//    __ jmp(Done);
+//  }
+//
+//  __ bind(notValueType);
+
   __ cmpl(flags, itos);
   __ jcc(Assembler::notEqual, notInt);
 
@@ -4377,8 +4344,8 @@
   __ bind(done);
 }
 
-void TemplateTable::vdefault() {
-  transition(vtos, qtos);
+void TemplateTable::defaultvalue() {
+  transition(vtos, atos);
 
   Register rarg1 = LP64_ONLY(c_rarg1) NOT_LP64(rcx);
   Register rarg2 = LP64_ONLY(c_rarg2) NOT_LP64(rdx);
@@ -4386,7 +4353,7 @@
   __ get_unsigned_2_byte_index_at_bcp(rarg2, 1);
   __ get_constant_pool(rarg1);
 
-  call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::vdefault),
+  call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::defaultvalue),
       rarg1, rarg2);
   __ verify_oop(rax);
 }
@@ -4545,30 +4512,6 @@
   // rax = 1: obj != NULL and obj is     an instanceof the specified klass
 }
 
-void TemplateTable::_vbox() {
-  transition(qtos, atos);
-
-  Register rarg1 = LP64_ONLY(c_rarg1) NOT_LP64(rcx);
-  Register rarg2 = LP64_ONLY(c_rarg2) NOT_LP64(rdx);
-
-  __ get_unsigned_2_byte_index_at_bcp(rarg2, 1);
-  __ get_constant_pool(rarg1);
-  call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::vbox),
-      rarg1, rarg2, rax);
-}
-
-void TemplateTable::_vunbox() {
-  transition(atos, qtos);
-
-  Register rarg1 = LP64_ONLY(c_rarg1) NOT_LP64(rcx);
-  Register rarg2 = LP64_ONLY(c_rarg2) NOT_LP64(rdx);
-
-  __ get_unsigned_2_byte_index_at_bcp(rarg2, 1);
-  __ get_constant_pool(rarg1);
-  call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::vunbox),
-      rarg1, rarg2, rax);
-}
-
 //----------------------------------------------------------------------------------------------------
 // Breakpoints
 void TemplateTable::_breakpoint() {
--- a/src/hotspot/share/ci/bcEscapeAnalyzer.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/ci/bcEscapeAnalyzer.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -431,7 +431,6 @@
         break;
       }
       case Bytecodes::_aload:
-      case Bytecodes::_vload:
         state.apush(state._vars[s.get_index()]);
         break;
       case Bytecodes::_iload:
@@ -485,7 +484,6 @@
         set_method_escape(state.apop());
         state.lpush();
         break;
-      case Bytecodes::_vaload:
       case Bytecodes::_aaload:
         { state.spop();
           ArgumentMap array = state.apop();
@@ -519,7 +517,6 @@
         state.lpop();
         break;
       case Bytecodes::_astore:
-      case Bytecodes::_vstore:
         state._vars[s.get_index()] = state.apop();
         break;
       case Bytecodes::_astore_0:
@@ -565,17 +562,18 @@
         set_modified(arr, OFFSET_ANY, type2size[T_OBJECT]*HeapWordSize);
         break;
       }
-      case Bytecodes::_vastore:
-      {
-        set_global_escape(state.apop());
-        state.spop();
-        ArgumentMap arr = state.apop();
-        // If the array is flattened, a larger part of it is modified than
-        // the size of a reference. However, if OFFSET_ANY is given as
-        // parameter to set_modified(), size is not taken into account.
-        set_modified(arr, OFFSET_ANY, type2size[T_VALUETYPE]*HeapWordSize);
-        break;
-      }
+//      the vastore case below should be refactored to the aastore case above
+//      case Bytecodes::_vastore:
+//      {
+//        set_global_escape(state.apop());
+//        state.spop();
+//        ArgumentMap arr = state.apop();
+//        // If the array is flattened, a larger part of it is modified than
+//        // the size of a reference. However, if OFFSET_ANY is given as
+//        // parameter to set_modified(), size is not taken into account.
+//        set_modified(arr, OFFSET_ANY, type2size[T_VALUETYPE]*HeapWordSize);
+//        break;
+//      }
       case Bytecodes::_pop:
         state.raw_pop();
         break;
@@ -864,7 +862,6 @@
         fall_through = false;
         break;
       case Bytecodes::_areturn:
-      case Bytecodes::_vreturn:
         set_returned(state.apop());
         fall_through = false;
         break;
@@ -958,10 +955,10 @@
         }
         break;
       case Bytecodes::_new:
-      case Bytecodes::_vdefault:
+      case Bytecodes::_defaultvalue:
         state.apush(allocated_obj);
         break;
-      case Bytecodes::_vwithfield: {
+      case Bytecodes::_withfield: {
         bool will_link;
         ciField* field = s.get_field(will_link);
         BasicType field_type = field->type()->basic_type();
@@ -1043,11 +1040,6 @@
       }
       case Bytecodes::_breakpoint:
         break;
-      case Bytecodes::_vbox:
-      case Bytecodes::_vunbox:
-        set_method_escape(state.apop());
-        state.apush(allocated_obj);
-        break;
       default:
         ShouldNotReachHere();
         break;
--- a/src/hotspot/share/ci/ciEnv.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/ci/ciEnv.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -395,7 +395,7 @@
 
   // Now we need to check the SystemDictionary
   Symbol* sym = name->get_symbol();
-  if ((sym->byte_at(0) == 'L' || sym->byte_at(0) == 'Q') &&
+  if (sym->byte_at(0) == 'L' &&
     sym->byte_at(sym->utf8_length()-1) == ';') {
     // This is a name from a signature.  Strip off the trimmings.
     // Call recursive to keep scope of strippedsym.
@@ -450,7 +450,7 @@
   // to be loaded if their element klasses are loaded, except when memory
   // is exhausted.
   if (sym->byte_at(0) == '[' &&
-      (sym->byte_at(1) == '[' || sym->byte_at(1) == 'L' || sym->byte_at(1) == 'Q')) {
+      (sym->byte_at(1) == '[' || sym->byte_at(1) == 'L')) {
     // We have an unloaded array.
     // Build it on the fly if the element class exists.
     TempNewSymbol elem_sym = SymbolTable::new_symbol(sym->as_utf8()+1,
--- a/src/hotspot/share/ci/ciField.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/ci/ciField.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -374,7 +374,7 @@
   VM_ENTRY_MARK;
   assert(bc == Bytecodes::_getstatic || bc == Bytecodes::_putstatic ||
          bc == Bytecodes::_getfield  || bc == Bytecodes::_putfield  ||
-         bc == Bytecodes::_vwithfield, "unexpected bytecode");
+         bc == Bytecodes::_withfield, "unexpected bytecode");
 
   if (_offset == -1) {
     // at creation we couldn't link to our holder so we need to
--- a/src/hotspot/share/ci/ciInstanceKlass.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/ci/ciInstanceKlass.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -667,17 +667,7 @@
 }
 
 ciInstanceKlass* ciInstanceKlass::vcc_klass() {
-  InstanceKlass* ik = get_instanceKlass();
-  if (ik->has_vcc_klass()) {
-    if (_vcc_klass == NULL) {
-      VM_ENTRY_MARK;
-      InstanceKlass* k = InstanceKlass::cast(ik->get_vcc_klass());
-      _vcc_klass = CURRENT_THREAD_ENV->get_instance_klass(k);
-    }
-    return _vcc_klass;
-  } else {
-    return NULL;
-  }
+  return NULL;
 }
 
 // Utility class for printing of the contents of the static fields for
--- a/src/hotspot/share/ci/ciMethodBlocks.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/ci/ciMethodBlocks.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -239,7 +239,6 @@
       case Bytecodes::_freturn     :
       case Bytecodes::_dreturn     :
       case Bytecodes::_areturn     :
-      case Bytecodes::_vreturn     :
       case Bytecodes::_return      :
         cur_block->set_control_bci(bci);
         if (s.next_bci() < limit_bci) {
--- a/src/hotspot/share/ci/ciStreams.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/ci/ciStreams.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -170,10 +170,8 @@
   case Bytecodes::_anewarray:
   case Bytecodes::_multianewarray:
   case Bytecodes::_new:
-  case Bytecodes::_vdefault:
+  case Bytecodes::_defaultvalue:
   case Bytecodes::_newarray:
-  case Bytecodes::_vunbox:
-  case Bytecodes::_vbox:
     return get_index_u2();
   default:
     ShouldNotReachHere();
@@ -271,7 +269,7 @@
          cur_bc() == Bytecodes::_putfield ||
          cur_bc() == Bytecodes::_getstatic ||
          cur_bc() == Bytecodes::_putstatic ||
-         cur_bc() == Bytecodes::_vwithfield, "wrong bc");
+         cur_bc() == Bytecodes::_withfield, "wrong bc");
   return get_index_u2_cpcache();
 }
 
--- a/src/hotspot/share/ci/ciType.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/ci/ciType.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -64,7 +64,7 @@
 // ciType::is__Value
 //
 bool ciType::is__Value() const {
-  return (this == ciEnv::____Value_klass);
+  return false;
 }
 
 // ------------------------------------------------------------------
--- a/src/hotspot/share/ci/ciTypeFlow.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/ci/ciTypeFlow.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -932,10 +932,8 @@
   }
 
   switch(str->cur_bc()) {
-  case Bytecodes::_vaload:
   case Bytecodes::_aaload: do_aload(str);                           break;
 
-  case Bytecodes::_vastore:
   case Bytecodes::_aastore:
     {
       pop_object();
@@ -948,7 +946,6 @@
       push_null();
       break;
     }
-  case Bytecodes::_vload:
   case Bytecodes::_aload:   load_local_object(str->get_index());    break;
   case Bytecodes::_aload_0: load_local_object(0);                   break;
   case Bytecodes::_aload_1: load_local_object(1);                   break;
@@ -968,7 +965,6 @@
       break;
     }
   case Bytecodes::_areturn:
-  case Bytecodes::_vreturn:
   case Bytecodes::_ifnonnull:
   case Bytecodes::_ifnull:
     {
@@ -994,7 +990,6 @@
       push_int();
       break;
     }
-  case Bytecodes::_vstore:
   case Bytecodes::_astore:   store_local_object(str->get_index());  break;
   case Bytecodes::_astore_0: store_local_object(0);                 break;
   case Bytecodes::_astore_1: store_local_object(1);                 break;
@@ -1497,8 +1492,8 @@
 
   case Bytecodes::_new:      do_new(str);                           break;
 
-  case Bytecodes::_vdefault: do_vdefault(str);                      break;
-  case Bytecodes::_vwithfield: do_vwithfield(str);                  break;
+  case Bytecodes::_defaultvalue: do_vdefault(str);                  break;
+  case Bytecodes::_withfield: do_vwithfield(str);                   break;
 
   case Bytecodes::_newarray: do_newarray(str);                      break;
 
@@ -1527,16 +1522,7 @@
       push(value2);
       break;
     }
-  case Bytecodes::_vunbox:
-     {
-       do_vunbox(str);
-       break;
-     }
-     case Bytecodes::_vbox:
-     {
-       do_vbox(str);
-       break;
-     }
+
   case Bytecodes::_wide:
   default:
     {
@@ -1826,7 +1812,6 @@
       case Bytecodes::_freturn:
       case Bytecodes::_dreturn:
       case Bytecodes::_areturn:
-      case Bytecodes::_vreturn:
       case Bytecodes::_return:
         _successors =
           new (arena) GrowableArray<Block*>(arena, 1, 0, NULL);
@@ -2264,7 +2249,6 @@
     case Bytecodes::_freturn:
     case Bytecodes::_dreturn:
     case Bytecodes::_areturn:
-    case Bytecodes::_vreturn:
     case Bytecodes::_return:
       // We can assume the monitor stack is empty in this analysis.
       return false;
--- a/src/hotspot/share/classfile/classFileParser.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/classfile/classFileParser.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -496,33 +496,7 @@
         Symbol* const name = cp->symbol_at(class_index);
         const unsigned int name_len = name->utf8_length();
 
-        // check explicitly for ;Qjava/lang/__Value;
-        if (name_len == 20 &&
-            name->equals(";Qjava/lang/__Value;")) {
-            cp->symbol_at_put(class_index, vmSymbols::java_lang____Value());
-            cp->unresolved_value_type_at_put(index, class_index, num_klasses++);
-        } else if (EnableValhalla || EnableMVT) {
-          const char* derive_vt_classname_postfix = "$Value;";
-          // check for a value type
-          // check for name > 3 to rule out ";Q;" where no name is present
-          // check for name = 9 to rule out ";Q$Value;" where no name is present for EnableMVT
-          if (name_len != 0 &&
-              name_len > 3 &&
-              name->starts_with(";Q") &&
-              ((EnableValhalla && (name->byte_at(name_len-1) == ';')) ||
-               (EnableMVT &&
-                ClassLoader::string_ends_with(name->as_utf8(), derive_vt_classname_postfix) &&
-                name_len != 9))) {
-            Symbol* const strippedsym = SymbolTable::new_symbol(name, 2, name_len-1, CHECK);
-            assert(strippedsym != NULL, "failure to create value type stripped name");
-            cp->symbol_at_put(class_index, strippedsym);
-            cp->unresolved_value_type_at_put(index, class_index, num_klasses++);
-          } else {
-            cp->unresolved_klass_at_put(index, class_index, num_klasses++);
-          }
-        } else {
-          cp->unresolved_klass_at_put(index, class_index, num_klasses++);
-        }
+        cp->unresolved_klass_at_put(index, class_index, num_klasses++);
         break;
       }
       case JVM_CONSTANT_ValueIndex: {
@@ -1103,7 +1077,6 @@
     _jdk_internal_vm_annotation_Contended,
     _field_Stable,
     _jdk_internal_vm_annotation_ReservedStackAccess,
-    _jdk_incubator_mvt_ValueCapableClass,
     _annotation_LIMIT
   };
   const Location _location;
@@ -1139,8 +1112,6 @@
 
   void set_stable(bool stable) { set_annotation(_field_Stable); }
   bool is_stable() const { return has_annotation(_field_Stable); }
-
-  bool is_value_capable_class() const { return has_annotation(_jdk_incubator_mvt_ValueCapableClass); }
 };
 
 // This class also doubles as a holder for metadata cleanup.
@@ -1493,13 +1464,13 @@
   STATIC_SHORT,         // shorts
   STATIC_WORD,          // ints
   STATIC_DOUBLE,        // aligned long or double
-  STATIC_VALUETYPE,     // Value types
+  STATIC_FLATTENABLE,   // flattenable field
   NONSTATIC_OOP,
   NONSTATIC_BYTE,
   NONSTATIC_SHORT,
   NONSTATIC_WORD,
   NONSTATIC_DOUBLE,
-  NONSTATIC_VALUETYPE,
+  NONSTATIC_FLATTENABLE,
   MAX_FIELD_ALLOCATION_TYPE,
   BAD_ALLOCATION_TYPE = -1
 };
@@ -1519,7 +1490,6 @@
   NONSTATIC_DOUBLE,    // T_LONG        = 11,
   NONSTATIC_OOP,       // T_OBJECT      = 12,
   NONSTATIC_OOP,       // T_ARRAY       = 13,
-  NONSTATIC_VALUETYPE, // T_VALUETYPE   = 14,
   BAD_ALLOCATION_TYPE, // T_VOID        = 15,
   BAD_ALLOCATION_TYPE, // T_ADDRESS     = 16,
   BAD_ALLOCATION_TYPE, // T_NARROWOOP   = 17,
@@ -1541,7 +1511,6 @@
   STATIC_DOUBLE,       // T_LONG        = 11,
   STATIC_OOP,          // T_OBJECT      = 12,
   STATIC_OOP,          // T_ARRAY       = 13,
-  STATIC_VALUETYPE,    // T_VALUETYPE   = 14,
   BAD_ALLOCATION_TYPE, // T_VOID        = 15,
   BAD_ALLOCATION_TYPE, // T_ADDRESS     = 16,
   BAD_ALLOCATION_TYPE, // T_NARROWOOP   = 17,
@@ -1659,8 +1628,8 @@
       signature_index, CHECK);
     const Symbol* const sig = cp->symbol_at(signature_index);
     verify_legal_field_signature(name, sig, CHECK);
-    if (sig->starts_with("Q")) {
-      _has_value_fields = true;
+    if (access_flags.is_flattenable()) {
+      _has_flattenable_fields = true;
     }
 
     u2 constantvalue_index = 0;
@@ -1773,9 +1742,9 @@
     FieldInfo* const field = FieldInfo::from_field_array(fa, index);
     field->initialize(JVM_ACC_FIELD_INTERNAL | JVM_ACC_STATIC,
                       vmSymbols::default_value_name_enum,
-                      vmSymbols::java_lang___Value_signature_enum,
+                      vmSymbols::java_lang_Object_enum,
                       0);
-    const BasicType type = FieldType::basic_type(vmSymbols::java_lang___Value_signature());
+    const BasicType type = FieldType::basic_type(vmSymbols::object_signature());
     const FieldAllocationType atype = fac->update(true, type);
     field->set_allocation_type(atype);
     index++;
@@ -2206,12 +2175,6 @@
       if (RestrictReservedStack && !privileged) break; // honor privileges
       return _jdk_internal_vm_annotation_ReservedStackAccess;
     }
-    case vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_mvt_ValueCapableClass_signature) : {
-      if (_location != _in_class) {
-        break;
-      }
-      return _jdk_incubator_mvt_ValueCapableClass;
-    }
     default: {
       break;
     }
@@ -2254,9 +2217,6 @@
 void ClassFileParser::ClassAnnotationCollector::apply_to(InstanceKlass* ik) {
   assert(ik != NULL, "invariant");
   ik->set_is_contended(is_contended());
-  if (is_value_capable_class()) {
-    ik->set_has_vcc_annotation();
-  }
 }
 
 #define MAX_ARGS_SIZE 255
@@ -3978,7 +3938,7 @@
   int next_static_oop_offset    = InstanceMirrorKlass::offset_of_static_fields();
   // Value types in static fields are not embedded, they are handled with oops
   int next_static_double_offset = next_static_oop_offset +
-                                  ((fac->count[STATIC_OOP] + fac->count[STATIC_VALUETYPE]) * heapOopSize);
+                                  ((fac->count[STATIC_OOP] + fac->count[STATIC_FLATTENABLE]) * heapOopSize);
   if ( fac->count[STATIC_DOUBLE] &&
        (Universe::field_type_should_be_aligned(T_DOUBLE) ||
         Universe::field_type_should_be_aligned(T_LONG)) ) {
@@ -3999,7 +3959,7 @@
   // in-lining of value types (with header removal) in packed arrays and
   // flatten value types
   int initial_value_type_padding = 0;
-  if (is_value_type() || is_value_capable_class()) {
+  if (is_value_type()) {
     int old = nonstatic_fields_start;
     nonstatic_fields_start = align_up(nonstatic_fields_start, BytesPerLong);
     initial_value_type_padding = nonstatic_fields_start - old;
@@ -4015,7 +3975,7 @@
   }
 
   // Temporary value types restrictions
-  if (is_value_type() || is_value_capable_class()) {
+  if (is_value_type()) {
     if (is_contended_class) {
       throwValueTypeLimitation(THREAD_AND_LOCATION, "Value Types do not support @Contended annotation yet");
       return;
@@ -4039,7 +3999,7 @@
   unsigned int value_type_oop_map_count = 0;
   int not_flattened_value_types = 0;
 
-  int max_nonstatic_value_type = fac->count[NONSTATIC_VALUETYPE] + 1;
+  int max_nonstatic_value_type = fac->count[NONSTATIC_FLATTENABLE] + 1;
 
   nonstatic_value_type_indexes = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, int,
                                                               max_nonstatic_value_type);
@@ -4050,9 +4010,9 @@
                                                               max_nonstatic_value_type);
 
   for (AllFieldStream fs(_fields, _cp); !fs.done(); fs.next()) {
-    if (fs.allocation_type() == STATIC_VALUETYPE) {
+    if (fs.allocation_type() == STATIC_FLATTENABLE) {
       static_value_type_count++;
-    } else if (fs.allocation_type() == NONSTATIC_VALUETYPE) {
+    } else if (fs.allocation_type() == NONSTATIC_FLATTENABLE) {
       Symbol* signature = fs.signature();
       Klass* klass = SystemDictionary::resolve_or_fail(signature,
                                                        Handle(THREAD, _loader_data->class_loader()),
@@ -4061,7 +4021,8 @@
       assert(klass->access_flags().is_value_type(), "Value type expected");
       ValueKlass* vk = ValueKlass::cast(klass);
       // Conditions to apply flattening or not should be defined in a single place
-      if ((ValueFieldMaxFlatSize < 0) || vk->size_helper() <= ValueFieldMaxFlatSize) {
+      if ( false &&  // Currently disabling flattening
+          ((ValueFieldMaxFlatSize < 0) || vk->size_helper() <= ValueFieldMaxFlatSize)) {
         nonstatic_value_type_indexes[nonstatic_value_type_count] = fs.index();
         nonstatic_value_type_klasses[nonstatic_value_type_count] = klass;
         nonstatic_value_type_count++;
@@ -4084,7 +4045,7 @@
   // Total non-static fields count, including every contended field
   unsigned int nonstatic_fields_count = fac->count[NONSTATIC_DOUBLE] + fac->count[NONSTATIC_WORD] +
                                         fac->count[NONSTATIC_SHORT] + fac->count[NONSTATIC_BYTE] +
-                                        fac->count[NONSTATIC_OOP] + fac->count[NONSTATIC_VALUETYPE];
+                                        fac->count[NONSTATIC_OOP] + fac->count[NONSTATIC_FLATTENABLE];
 
   const bool super_has_nonstatic_fields =
           (_super_klass != NULL && _super_klass->has_nonstatic_fields());
@@ -4094,9 +4055,7 @@
 
   if (is_value_type() && (!has_nonstatic_fields)) {
     // There are a number of fixes required throughout the type system and JIT
-    if (class_name() != vmSymbols::java_lang____Value()) {
-      throwValueTypeLimitation(THREAD_AND_LOCATION, "Value Types do not support zero instance size yet");
-    }
+    throwValueTypeLimitation(THREAD_AND_LOCATION, "Value Types do not support zero instance size yet");
   }
 
   // Prepare list of oops for oop map generation.
@@ -4278,7 +4237,7 @@
     // pack the rest of the fields
     switch (atype) {
       // Value types in static fields are handled with oops
-      case STATIC_VALUETYPE:   // Fallthrough
+      case STATIC_FLATTENABLE:   // Fallthrough
       case STATIC_OOP:
         real_offset = next_static_oop_offset;
         next_static_oop_offset += heapOopSize;
@@ -4299,7 +4258,7 @@
         real_offset = next_static_double_offset;
         next_static_double_offset += BytesPerLong;
         break;
-      case NONSTATIC_VALUETYPE:
+      case NONSTATIC_FLATTENABLE:
         if (fs.is_flatten()) {
           Klass* klass = nonstatic_value_type_klasses[next_value_type_index];
           assert(klass != NULL, "Klass should have been loaded and resolved earlier");
@@ -4443,7 +4402,7 @@
             break;
 
             // Value types in static fields are handled with oops
-          case NONSTATIC_VALUETYPE:
+          case NONSTATIC_FLATTENABLE:
             throwValueTypeLimitation(THREAD_AND_LOCATION,
                                      "@Contended annotation not supported for value types yet", fs.name(), fs.signature());
             return;
@@ -4487,7 +4446,7 @@
   // This helps to alleviate memory contention effects for subclass fields
   // and/or adjacent object.
   if (is_contended_class) {
-    assert(!is_value_type() && !is_value_capable_class(), "@Contended not supported for value types yet");
+    assert(!is_value_type(), "@Contended not supported for value types yet");
     next_nonstatic_padded_offset += ContendedPaddingWidth;
   }
 
@@ -4499,7 +4458,7 @@
   }
 
   int nonstatic_field_sz_align = heapOopSize;
-  if (is_value_type() || is_value_capable_class()) {
+  if (is_value_type()) {
     if ((notaligned_nonstatic_fields_end - nonstatic_fields_start) > heapOopSize) {
       nonstatic_field_sz_align = BytesPerLong; // value copy of fields only uses jlong copy
     }
@@ -4658,7 +4617,7 @@
     }
 
     for(int i = 0; i < defined_klass->java_fields_count(); i++) {
-      if (defined_klass->field_signature(i)->starts_with("Q")  && (((defined_klass->field_access_flags(i) & JVM_ACC_STATIC)) == 0)) {
+      if ((defined_klass->field_access_flags(i) & JVM_ACC_FLATTENABLE) != 0) {
         const Klass* klass = defined_klass->get_value_field_klass(i);
         defining_loader_data->record_dependency(klass, CHECK);
       }
@@ -5630,7 +5589,7 @@
     }
   }
 
-  if (ik->is_value() && (ik->name() != vmSymbols::java_lang____Value())) {
+  if (ik->is_value()) {
     ValueKlass* vk = ValueKlass::cast(ik);
     oop val = ik->allocate_instance(CHECK_NULL);
     vk->set_default_value(val);
@@ -5660,7 +5619,7 @@
   ik->set_nonstatic_field_size(_field_info->nonstatic_field_size);
   ik->set_has_nonstatic_fields(_field_info->has_nonstatic_fields);
   assert(_fac != NULL, "invariant");
-  ik->set_static_oop_field_count(_fac->count[STATIC_OOP] + _fac->count[STATIC_VALUETYPE]);
+  ik->set_static_oop_field_count(_fac->count[STATIC_OOP] + _fac->count[STATIC_FLATTENABLE]);
 
   // this transfers ownership of a lot of arrays from
   // the parser onto the InstanceKlass*
@@ -5799,12 +5758,6 @@
     vk->initialize_calling_convention();
   }
 
-  // Valhalla shady value type conversion
-  if (_parsed_annotations->is_value_capable_class()) {
-    ik->create_value_capable_class(Handle(THREAD, _loader_data->class_loader()),
-                                 _protection_domain, CHECK);
-  }
-
   // Add read edges to the unnamed modules of the bootstrap and app class loaders.
   if (changed_by_loadhook && !module_handle.is_null() && module_entry->is_named() &&
       !module_entry->has_default_read_edges()) {
@@ -5815,19 +5768,18 @@
   }
 
   int nfields = ik->java_fields_count();
-  if (ik->is_value() && (ik->name() != vmSymbols::java_lang____Value())) nfields++;
+  if (ik->is_value()) nfields++;
   for(int i = 0; i < nfields; i++) {
-    if (ik->field_signature(i)->starts_with("Q")) {
-      if ((((ik->field_access_flags(i) & JVM_ACC_STATIC)) == 0)) {
-        Klass* klass = SystemDictionary::resolve_or_fail(ik->field_signature(i),
-                                                         Handle(THREAD, ik->class_loader()),
-                                                         Handle(THREAD, ik->protection_domain()), true, CHECK);
-        assert(klass != NULL, "Sanity check");
-        assert(klass->access_flags().is_value_type(), "Value type expected");
-        ik->set_value_field_klass(i, klass);
-      } else if (is_value_type() && ((ik->field_access_flags(i) & JVM_ACC_FIELD_INTERNAL) != 0)) {
-        ValueKlass::cast(ik)->set_default_value_offset(ik->field_offset(i));
-      }
+    if (ik->field_access_flags(i) & JVM_ACC_FLATTENABLE) {
+      Klass* klass = SystemDictionary::resolve_or_fail(ik->field_signature(i),
+                                                       Handle(THREAD, ik->class_loader()),
+                                                       Handle(THREAD, ik->protection_domain()), true, CHECK);
+      assert(klass != NULL, "Sanity check");
+      assert(klass->access_flags().is_value_type(), "Value type expected");
+      ik->set_value_field_klass(i, klass);
+    } else if (is_value_type() && ((ik->field_access_flags(i) & JVM_ACC_FIELD_INTERNAL) != 0)
+        && ((ik->field_access_flags(i) & JVM_ACC_STATIC) != 0)) {
+      ValueKlass::cast(ik)->set_default_value_offset(ik->field_offset(i));
     }
   }
 
@@ -6003,7 +5955,7 @@
   _has_empty_finalizer(false),
   _has_vanilla_constructor(false),
   _max_bootstrap_specifier_index(-1),
-  _has_value_fields(false) {
+  _has_flattenable_fields(false) {
 
   _class_name = name != NULL ? name : vmSymbols::unknown_class_name();
 
@@ -6349,7 +6301,7 @@
   _fac = new FieldAllocationCount();
   parse_fields(stream,
                _access_flags.is_interface(),
-               _access_flags.is_value_type() && (_class_name != vmSymbols::java_lang____Value()),
+               _access_flags.is_value_type(),
                _fac,
                cp,
                cp_size,
@@ -6444,26 +6396,16 @@
       return;
     }
 
-    // For a java/lang/__Value super class, the class inheriting, must be a value class
+    // For a value class, only java/lang/Object is an acceptable super class
     if ((EnableValhalla || EnableMVT) &&
-        _super_klass->name() == vmSymbols::java_lang____Value()) {
-      guarantee_property((_access_flags.get_flags() & JVM_ACC_VALUE) != 0,
-                         "Only a value class can inherit from java/lang/__Value",
+        _access_flags.get_flags() & JVM_ACC_VALUE) {
+      guarantee_property(_super_klass->name() == vmSymbols::java_lang_Object(),
+                         "Value class can only inherit java/lang/Object",
                          CHECK);
     }
 
-    // For a value class, only java/lang/__Value is an acceptable super class
-    if ((EnableValhalla || EnableMVT) &&
-        _access_flags.get_flags() & JVM_ACC_VALUE) {
-      guarantee_property(_super_klass->name() == vmSymbols::java_lang____Value(),
-                         "Value class can only inherit java/lang/__Value",
-                         CHECK);
-    }
-
     // Make sure super class is not final
-    if (_super_klass->is_final()
-        && !(_super_klass->name() == vmSymbols::java_lang____Value()
-        && (_access_flags.get_flags() & JVM_ACC_VALUE))) {
+    if (_super_klass->is_final()) {
       THROW_MSG(vmSymbols::java_lang_VerifyError(), "Cannot inherit from final class");
     }
   }
@@ -6540,10 +6482,6 @@
   return _stream->clone();
 }
 
-bool ClassFileParser::is_value_capable_class() const {
-  return _parsed_annotations->is_value_capable_class();
-}
-
 // ----------------------------------------------------------------------------
 // debugging
 
--- a/src/hotspot/share/classfile/classFileParser.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/classfile/classFileParser.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -159,7 +159,7 @@
   bool _has_nonstatic_concrete_methods;
   bool _declares_nonstatic_concrete_methods;
   bool _has_final_method;
-  bool _has_value_fields;
+  bool _has_flattenable_fields;
 
   // precomputed flags
   bool _has_finalizer;
@@ -543,7 +543,7 @@
   bool is_interface() const { return _access_flags.is_interface(); }
   bool is_value_type() const { return _access_flags.is_value_type(); }
   bool is_value_capable_class() const;
-  bool has_value_fields() const { return _has_value_fields; }
+  bool has_flattenable_fields() const { return _has_flattenable_fields; }
 
   u2 java_fields_count() const { return _java_fields_count; }
 
--- a/src/hotspot/share/classfile/classLoader.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/classfile/classLoader.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -212,7 +212,7 @@
     // Set bad_class_name to true to indicate that the package name
     // could not be obtained due to an error condition.
     // In this situation, is_same_class_package returns false.
-    if (*class_name_ptr == 'L' || *class_name_ptr == 'Q') {
+    if (*class_name_ptr == 'L') {
       if (bad_class_name != NULL) {
         *bad_class_name = true;
       }
--- a/src/hotspot/share/classfile/javaClasses.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/classfile/javaClasses.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -1056,11 +1056,7 @@
     return;
   }
   if (is_instance)  {
-    if (is_value) {
-      st->print("Q");
-    } else {
       st->print("L");
-    }
   }
   st->write((char*) name->base(), (int) name->utf8_length());
   if (is_instance)  st->print(";");
--- a/src/hotspot/share/classfile/systemDictionary.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/classfile/systemDictionary.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -255,7 +255,7 @@
          class_loader.is_null() ? "null" : class_loader->klass()->name()->as_C_string());
   if (FieldType::is_array(class_name)) {
     return resolve_array_class_or_null(class_name, class_loader, protection_domain, THREAD);
-  } else if (FieldType::is_obj(class_name) || FieldType::is_valuetype(class_name)) {
+  } else if (FieldType::is_obj(class_name)) {
     ResourceMark rm(THREAD);
     // Ignore wrapping L and ;. (and Q and ; for value types);
     TempNewSymbol name = SymbolTable::new_symbol(class_name->as_C_string() + 1,
@@ -298,35 +298,6 @@
   return k;
 }
 
-// Temporary Minimal Value Type support code. Attempt to load VCC for DVT descriptor
-Klass* SystemDictionary::resolve_dvt_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS) {
-  assert(EnableMVT && FieldType::is_dvt_postfix(class_name), "Invariant");
-
-  ResourceMark rm(THREAD);
-  // Given a "Q-type" descriptor and EnableMVT, original exception is not so interesting
-  CLEAR_PENDING_EXCEPTION;
-
-  TempNewSymbol vcc_name = SymbolTable::new_symbol(FieldType::dvt_unmangle_vcc(class_name), CHECK_NULL);
-  Klass* vcc = do_resolve_instance_class_or_null(vcc_name, class_loader, protection_domain, CHECK_NULL);
-  if (vcc == NULL) {
-    return NULL;
-  }
-  Klass* dvt = do_resolve_instance_class_or_null(class_name, class_loader, protection_domain, CHECK_NULL);
-  if ((dvt !=NULL) && dvt->is_value() && (ValueKlass::cast(dvt)->get_vcc_klass() == vcc)) {
-    return dvt;
-  }
-  if (vcc->is_instance_klass() && (!InstanceKlass::cast(vcc)->has_vcc_annotation())) {
-    static const char not_vcc_msg[] =
-        "Failed to resolve %s, found possible ValueCapableClass name mangle match is not ValueCapableClass annotated: %s";
-    size_t buflen = strlen(not_vcc_msg) + class_name->utf8_length() + vcc_name->utf8_length();
-    char* buf = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, buflen);
-    jio_snprintf(buf, buflen, not_vcc_msg, class_name->as_C_string(), vcc_name->as_C_string());
-    THROW_MSG_NULL(vmSymbols::java_lang_NoClassDefFoundError(), buf);
-  }
-  return NULL;
-}
-
-
 // Must be called for any super-class or super-interface resolution
 // during class definition to allow class circularity checking
 // super-interface callers:
@@ -684,9 +655,6 @@
                                                         Handle protection_domain,
                                                         TRAPS) {
   Klass* k = do_resolve_instance_class_or_null(name, class_loader, protection_domain, THREAD);
-  if (EnableMVT && (k == NULL) && FieldType::is_dvt_postfix(name)) {
-    k = resolve_dvt_or_null(name, class_loader, protection_domain, THREAD);
-  }
   return k;
 }
 
@@ -699,7 +667,7 @@
                                                         Handle protection_domain,
                                                         TRAPS) {
   assert(name != NULL && !FieldType::is_array(name) &&
-         !FieldType::is_obj(name)  && !FieldType::is_valuetype(name), "invalid class name");
+         !FieldType::is_obj(name), "invalid class name");
 
   EventClassLoad class_load_start_event;
 
--- a/src/hotspot/share/classfile/systemDictionary.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/classfile/systemDictionary.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -190,8 +190,6 @@
   do_klass(CodeSource_klass,                            java_security_CodeSource,                  Pre                 ) \
   do_klass(ParseUtil_klass,                             sun_net_www_ParseUtil,                     Pre                 ) \
                                                                                                                          \
-  /* support for valhalla "shady" value type bytecode transformer */                                                     \
-  do_klass(Valhalla_MVT1_0_klass,                       valhalla_shady_MVT1_0,                     MVTClasses          ) \
                                                                                                                          \
   do_klass(StackTraceElement_klass,                     java_lang_StackTraceElement,               Opt                 ) \
                                                                                                                          \
@@ -214,7 +212,6 @@
   do_klass(Integer_klass,                               java_lang_Integer,                         Pre                 ) \
   do_klass(Long_klass,                                  java_lang_Long,                            Pre                 ) \
                                                                                                                          \
-  do_klass(___Value_klass,                              java_lang____Value,                        ValhallaClasses     ) \
                                                                                                                          \
   /* Extensions */                                                                                                       \
   WK_KLASSES_DO_EXT(do_klass)                                                                                            \
@@ -667,7 +664,6 @@
   static Klass* resolve_instance_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
   static Klass* do_resolve_instance_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
   static Klass* resolve_array_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
-  static Klass* resolve_dvt_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
   static InstanceKlass* handle_parallel_super_load(Symbol* class_name, Symbol* supername, Handle class_loader, Handle protection_domain, Handle lockObject, TRAPS);
   // Wait on SystemDictionary_lock; unlocks lockObject before
   // waiting; relocks lockObject with correct recursion count
--- a/src/hotspot/share/classfile/verificationType.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/classfile/verificationType.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -135,11 +135,6 @@
         name(), 2, name()->utf8_length() - 1,
         CHECK_(VerificationType::bogus_type()));
       return VerificationType::reference_type(component);
-    case 'Q':
-      component = context->create_temporary_symbol(
-        name(), 2, name()->utf8_length() - 1,
-        CHECK_(VerificationType::bogus_type()));
-      return VerificationType::valuetype_type(component);
     default:
       // Met an invalid type signature, e.g. [X
       return VerificationType::bogus_type();
--- a/src/hotspot/share/classfile/verificationType.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/classfile/verificationType.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -363,7 +363,7 @@
     // 2. Check java/lang/__Value - from may be trying to be assigned to a __Value parameter
     assert(is_valuetype() && from.is_valuetype(), "Is value type assignable called with a non-value type");
     return (name() == from.name() ||
-            name() == vmSymbols::java_lang____Value());
+            name() == vmSymbols::java_lang_Object());
   }
 
  public:
--- a/src/hotspot/share/classfile/verifier.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/classfile/verifier.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -241,7 +241,6 @@
     // or defineClass specified not to verify by default (flags override passed arg)
     // We need to skip the following few for bootstrapping
     name != vmSymbols::java_lang_Object() &&
-    name != vmSymbols::java_lang____Value() &&
     name != vmSymbols::java_lang_Class() &&
     name != vmSymbols::java_lang_String() &&
     name != vmSymbols::java_lang_Throwable() &&
@@ -590,10 +589,6 @@
   return VerificationType::reference_type(vmSymbols::java_lang_Object());
 }
 
-VerificationType ClassVerifier::__value_type() const {
-  return VerificationType::valuetype_type(vmSymbols::java_lang____Value());
-}
-
 TypeOrigin ClassVerifier::ref_ctx(const char* sig, TRAPS) {
   VerificationType vt = VerificationType::reference_type(
       create_temporary_symbol(sig, (int)strlen(sig), THREAD));
@@ -748,8 +743,7 @@
             opcode != Bytecodes::_istore && opcode != Bytecodes::_astore &&
             opcode != Bytecodes::_lstore && opcode != Bytecodes::_fload  &&
             opcode != Bytecodes::_dload  && opcode != Bytecodes::_fstore &&
-            opcode != Bytecodes::_dstore && opcode != Bytecodes::_vstore &&
-            opcode != Bytecodes::_vload) {
+            opcode != Bytecodes::_dstore) {
           /* Unreachable?  RawBytecodeStream's raw_next() returns 'illegal'
            * if we encounter a wide instruction that modifies an invalid
            * opcode (not one of the ones listed above) */
@@ -864,15 +858,6 @@
           index = opcode - Bytecodes::_dload_0;
           verify_dload(index, &current_frame, CHECK_VERIFY(this));
           no_control_flow = false; break;
-        case Bytecodes::_vload :
-          if (!vbytecodes_allowed) {
-            class_format_error(
-              "vload not supported by this class file version (%d.%d), class %s",
-              _klass->major_version(), _klass->minor_version(), _klass->external_name());
-            return;
-          }
-          verify_vload(bcs.get_index(), &current_frame, CHECK_VERIFY(this));
-          no_control_flow = false; break;
         case Bytecodes::_aload :
           verify_aload(bcs.get_index(), &current_frame, CHECK_VERIFY(this));
           no_control_flow = false; break;
@@ -1005,37 +990,37 @@
           }
           no_control_flow = false; break;
         }
-        case Bytecodes::_vaload : {
-          if (!vbytecodes_allowed) {
-            class_format_error(
-              "vaload not supported by this class file version (%d.%d), class %s",
-              _klass->major_version(), _klass->minor_version(), _klass->external_name());
-            return;
-          }
-          type = current_frame.pop_stack(
-            VerificationType::integer_type(), CHECK_VERIFY(this));
-          atype = current_frame.pop_stack(
-            VerificationType::reference_check(), CHECK_VERIFY(this));
-          // The null check is strictly not be necessary, left in for future proofing.
-          // Will be reconsidered if type indexes are removed.
-          if (atype.is_null() || !atype.is_value_array()) {
-            verify_error(ErrorContext::bad_type(bci,
-                current_frame.stack_top_ctx(),
-                TypeOrigin::implicit(VerificationType::reference_check())),
-                bad_type_msg, "vaload");
-            return;
-          }
-          VerificationType component = atype.get_component(this, CHECK_VERIFY(this));
-          if (!component.is_valuetype()) {
-            verify_error(ErrorContext::bad_type(bci,
-                current_frame.stack_top_ctx(),
-                TypeOrigin::implicit(VerificationType::valuetype_check())),
-                bad_type_msg, "vaload");
-            return;  
-          } 
-          current_frame.push_stack(component, CHECK_VERIFY(this));
-          no_control_flow = false; break;
-        }
+//        case Bytecodes::_vaload : {
+//          if (!vbytecodes_allowed) {
+//            class_format_error(
+//              "vaload not supported by this class file version (%d.%d), class %s",
+//              _klass->major_version(), _klass->minor_version(), _klass->external_name());
+//            return;
+//          }
+//          type = current_frame.pop_stack(
+//            VerificationType::integer_type(), CHECK_VERIFY(this));
+//          atype = current_frame.pop_stack(
+//            VerificationType::reference_check(), CHECK_VERIFY(this));
+//          // The null check is strictly not be necessary, left in for future proofing.
+//          // Will be reconsidered if type indexes are removed.
+//          if (atype.is_null() || !atype.is_value_array()) {
+//            verify_error(ErrorContext::bad_type(bci,
+//                current_frame.stack_top_ctx(),
+//                TypeOrigin::implicit(VerificationType::reference_check())),
+//                bad_type_msg, "vaload");
+//            return;
+//          }
+//          VerificationType component = atype.get_component(this, CHECK_VERIFY(this));
+//          if (!component.is_valuetype()) {
+//            verify_error(ErrorContext::bad_type(bci,
+//                current_frame.stack_top_ctx(),
+//                TypeOrigin::implicit(VerificationType::valuetype_check())),
+//                bad_type_msg, "vaload");
+//            return;
+//          }
+//          current_frame.push_stack(component, CHECK_VERIFY(this));
+//          no_control_flow = false; break;
+//        }
         case Bytecodes::_istore :
           verify_istore(bcs.get_index(), &current_frame, CHECK_VERIFY(this));
           no_control_flow = false; break;
@@ -1076,15 +1061,6 @@
           index = opcode - Bytecodes::_dstore_0;
           verify_dstore(index, &current_frame, CHECK_VERIFY(this));
           no_control_flow = false; break;
-        case Bytecodes::_vstore :
-          if (!vbytecodes_allowed) {
-            class_format_error(
-              "vstore not supported by this class file version (%d.%d), class %s",
-              _klass->major_version(), _klass->minor_version(), _klass->external_name());
-            return;
-          }
-          verify_vstore(bcs.get_index(), &current_frame, CHECK_VERIFY(this));
-          no_control_flow = false; break;
         case Bytecodes::_astore :
           verify_astore(bcs.get_index(), &current_frame, CHECK_VERIFY(this));
           no_control_flow = false; break;
@@ -1211,28 +1187,28 @@
           }
           // 4938384: relaxed constraint in JVMS 3nd edition.
           no_control_flow = false; break;
-        case Bytecodes::_vastore :
-          if (!vbytecodes_allowed) {
-            class_format_error(
-              "vastore not supported by this class file version (%d.%d), class %s",
-              _klass->major_version(), _klass->minor_version(), _klass->external_name());
-            return;
-          }
-          type = current_frame.pop_stack(__value_type(), CHECK_VERIFY(this));
-          type2 = current_frame.pop_stack(
-            VerificationType::integer_type(), CHECK_VERIFY(this));
-          atype = current_frame.pop_stack(
-            VerificationType::reference_check(), CHECK_VERIFY(this));
-          // The null check is strictly not be necessary, left in for future proofing.
-          // Will be reconsidered if type indexes are removed.
-          if (atype.is_null() || !atype.is_value_array()) {
-            verify_error(ErrorContext::bad_type(bci,
-                current_frame.stack_top_ctx(),
-                TypeOrigin::implicit(VerificationType::reference_check())),
-                bad_type_msg, "vastore");
-            return;
-          }
-          no_control_flow = false; break;
+//        case Bytecodes::_vastore :
+//          if (!vbytecodes_allowed) {
+//            class_format_error(
+//              "vastore not supported by this class file version (%d.%d), class %s",
+//              _klass->major_version(), _klass->minor_version(), _klass->external_name());
+//            return;
+//          }
+//          type = current_frame.pop_stack(__value_type(), CHECK_VERIFY(this));
+//          type2 = current_frame.pop_stack(
+//            VerificationType::integer_type(), CHECK_VERIFY(this));
+//          atype = current_frame.pop_stack(
+//            VerificationType::reference_check(), CHECK_VERIFY(this));
+//          // The null check is strictly not be necessary, left in for future proofing.
+//          // Will be reconsidered if type indexes are removed.
+//          if (atype.is_null() || !atype.is_value_array()) {
+//            verify_error(ErrorContext::bad_type(bci,
+//                current_frame.stack_top_ctx(),
+//                TypeOrigin::implicit(VerificationType::reference_check())),
+//                bad_type_msg, "vastore");
+//            return;
+//          }
+//          no_control_flow = false; break;
         case Bytecodes::_pop :
           current_frame.pop_stack(
             VerificationType::category1_check(), CHECK_VERIFY(this));
@@ -1684,18 +1660,18 @@
           verify_return_value(return_type, type, bci,
                               &current_frame, CHECK_VERIFY(this));
           no_control_flow = true; break;
-        case Bytecodes::_vreturn :
-          if (!vbytecodes_allowed) {
-            class_format_error(
-              "vreturn not supported by this class file version (%d.%d), class %s",
-              _klass->major_version(), _klass->minor_version(), _klass->external_name());
-            return;
-          }
-          type = current_frame.pop_stack(
-            VerificationType::valuetype_check(), CHECK_VERIFY(this));
-          verify_return_value(return_type, type, bci,
-                              &current_frame, CHECK_VERIFY(this));
-          no_control_flow = true; break;
+//        case Bytecodes::_vreturn :
+//          if (!vbytecodes_allowed) {
+//            class_format_error(
+//              "vreturn not supported by this class file version (%d.%d), class %s",
+//              _klass->major_version(), _klass->minor_version(), _klass->external_name());
+//            return;
+//          }
+//          type = current_frame.pop_stack(
+//            VerificationType::valuetype_check(), CHECK_VERIFY(this));
+//          verify_return_value(return_type, type, bci,
+//                              &current_frame, CHECK_VERIFY(this));
+//          no_control_flow = true; break;
         case Bytecodes::_return :
           if (return_type != VerificationType::bogus_type()) {
             verify_error(ErrorContext::bad_code(bci),
@@ -1724,7 +1700,7 @@
           verify_field_instructions(
             &bcs, &current_frame, cp, false, CHECK_VERIFY(this));
           no_control_flow = false; break;
-        case Bytecodes::_vwithfield :
+        case Bytecodes::_withfield :
           if (!vbytecodes_allowed) {
             class_format_error(
               "vwithfield not supported by this class file version (%d.%d), class %s",
@@ -1762,7 +1738,7 @@
           current_frame.push_stack(type, CHECK_VERIFY(this));
           no_control_flow = false; break;
         }
-        case Bytecodes::_vdefault :
+        case Bytecodes::_defaultvalue :
         {
           if (!vbytecodes_allowed) {
             class_format_error(
@@ -1822,36 +1798,6 @@
             VerificationType::integer_type(), CHECK_VERIFY(this));
           no_control_flow = false; break;
         }
-        case Bytecodes::_vbox : {
-          if (!EnableMVT || !vbytecodes_allowed) {
-            class_format_error(
-              "vbox not supported by this class file version (%d.%d), class %s",
-              _klass->major_version(), _klass->minor_version(), _klass->external_name());
-            return;
-          }
-          index = bcs.get_index_u2();
-          verify_cp_class_type(bci, index, cp, CHECK_VERIFY(this));
-          current_frame.pop_stack(VerificationType::valuetype_check(), CHECK_VERIFY(this));
-          VerificationType klass_type = cp_index_to_reference_type(
-            index, cp, CHECK_VERIFY(this));
-          current_frame.push_stack(klass_type, CHECK_VERIFY(this));
-          no_control_flow = false; break;
-        }
-        case Bytecodes::_vunbox : {
-          if (!EnableMVT || !vbytecodes_allowed) {
-            class_format_error(
-              "vunbox not supported by this class file version (%d.%d), class %s",
-              _klass->major_version(), _klass->minor_version(), _klass->external_name());
-            return;
-          }
-          index = bcs.get_index_u2();
-          verify_cp_value_type(bci, index, cp, CHECK_VERIFY(this));
-          current_frame.pop_stack(object_type(), CHECK_VERIFY(this));
-          VerificationType value_type = cp_index_to_valuetype(
-            index, cp, CHECK_VERIFY(this));
-          current_frame.push_stack(value_type, CHECK_VERIFY(this));
-          no_control_flow = false; break;
-        }
         case Bytecodes::_monitorenter :
         case Bytecodes::_monitorexit :
           current_frame.pop_stack(
@@ -3333,12 +3279,6 @@
   current_frame->push_stack(type, CHECK_VERIFY(this));
 }
 
-void ClassVerifier::verify_vload(u2 index, StackMapFrame* current_frame, TRAPS) {
-  VerificationType type = current_frame->get_local(
-    index, VerificationType::valuetype_check(), CHECK_VERIFY(this));
-  current_frame->push_stack(type, CHECK_VERIFY(this));
-}
-
 void ClassVerifier::verify_istore(u2 index, StackMapFrame* current_frame, TRAPS) {
   current_frame->pop_stack(
     VerificationType::integer_type(), CHECK_VERIFY(this));
@@ -3376,12 +3316,6 @@
   current_frame->set_local(index, type, CHECK_VERIFY(this));
 }
 
-void ClassVerifier::verify_vstore(u2 index, StackMapFrame* current_frame, TRAPS) {
-  VerificationType type = current_frame->pop_stack(
-    VerificationType::valuetype_check(), CHECK_VERIFY(this));
-  current_frame->set_local(index, type, CHECK_VERIFY(this));
-}
-
 void ClassVerifier::verify_iinc(u2 index, StackMapFrame* current_frame, TRAPS) {
   VerificationType type = current_frame->get_local(
     index, VerificationType::integer_type(), CHECK_VERIFY(this));
--- a/src/hotspot/share/classfile/verifier.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/classfile/verifier.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -355,13 +355,11 @@
   void verify_fload (u2 index, StackMapFrame* current_frame, TRAPS);
   void verify_dload (u2 index, StackMapFrame* current_frame, TRAPS);
   void verify_aload (u2 index, StackMapFrame* current_frame, TRAPS);
-  void verify_vload (u2 index, StackMapFrame* current_frame, TRAPS);
   void verify_istore(u2 index, StackMapFrame* current_frame, TRAPS);
   void verify_lstore(u2 index, StackMapFrame* current_frame, TRAPS);
   void verify_fstore(u2 index, StackMapFrame* current_frame, TRAPS);
   void verify_dstore(u2 index, StackMapFrame* current_frame, TRAPS);
   void verify_astore(u2 index, StackMapFrame* current_frame, TRAPS);
-  void verify_vstore(u2 index, StackMapFrame* current_frame, TRAPS);
   void verify_iinc  (u2 index, StackMapFrame* current_frame, TRAPS);
 
   bool name_in_supers(Symbol* ref_name, InstanceKlass* current);
--- a/src/hotspot/share/classfile/vmSymbols.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/classfile/vmSymbols.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -217,11 +217,7 @@
       return result;
     }
   }
-  if (s->byte_at(0) =='Q') {
-    return T_VALUETYPE;
-  } else {
-    return T_OBJECT;
-  }
+  return T_OBJECT;
 }
 
 
--- a/src/hotspot/share/classfile/vmSymbols.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/classfile/vmSymbols.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -122,7 +122,6 @@
   template(getBootClassPathEntryForClass_name,        "getBootClassPathEntryForClass")            \
   template(jdk_internal_vm_PostVMInitHook,            "jdk/internal/vm/PostVMInitHook")           \
   template(sun_net_www_ParseUtil,                     "sun/net/www/ParseUtil")                    \
-  template(java_lang____Value,                        "java/lang/__Value")                        \
                                                                                                   \
   template(jdk_internal_loader_ClassLoaders_AppClassLoader,      "jdk/internal/loader/ClassLoaders$AppClassLoader")      \
   template(jdk_internal_loader_ClassLoaders_PlatformClassLoader, "jdk/internal/loader/ClassLoaders$PlatformClassLoader") \
@@ -319,15 +318,8 @@
   NOT_LP64(  do_alias(intptr_signature,               int_signature)  )                           \
   LP64_ONLY( do_alias(intptr_signature,               long_signature) )                           \
                                                                                                   \
- /* support for valhalla "shady" value types */                                                   \
-  template(jdk_incubator_mvt_ValueCapableClass,           "jdk/incubator/mvt/ValueCapableClass")    \
-  template(jdk_incubator_mvt_ValueCapableClass_signature, "Ljdk/incubator/mvt/ValueCapableClass;")  \
-  template(valhalla_shady_MVT1_0,                        "valhalla/shady/MinimalValueTypes_1_0")  \
-  template(valhalla_shady_MVT1_0_createDerivedValueType,           "createDerivedValueType")      \
-  template(valhalla_shady_MVT1_0_createDerivedValueType_signature, "(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/security/ProtectionDomain;[Ljava/lang/String;[I)Ljava/lang/String;") \
                                                                                                   \
-                                                                                                                                      \
-  /* Support for JVMCI */                                                                                                             \
+  /* Support for JVMCI */                                                                         \
   JVMCI_VM_SYMBOLS_DO(template, do_alias)                                                         \
                                                                                                   \
   template(java_lang_StackWalker,                     "java/lang/StackWalker")                    \
@@ -450,7 +442,6 @@
   template(resolved_references_name,                  "<resolved_references>")                    \
   template(init_lock_name,                            "<init_lock>")                              \
   template(default_value_name,                        ".default")                                 \
-  template(java_lang___Value_signature,               "Qjava/lang/__Value;")                      \
                                                                                                   \
   /* name symbols needed by intrinsics */                                                         \
   VM_INTRINSICS_DO(VM_INTRINSIC_IGNORE, VM_SYMBOL_IGNORE, template, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE) \
--- a/src/hotspot/share/compiler/compileBroker.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/compiler/compileBroker.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -1060,12 +1060,6 @@
     }
   }
 
-  // Don't compile methods in __Value if value types are disabled
-  if (!EnableMVT && !EnableValhalla && method->method_holder()->name() == vmSymbols::java_lang____Value()) {
-    // This may happen with CompileTheWorld, ReplayCompiles or compilations triggered through the WhiteBox API
-    return NULL;
-  }
-
   // lock, make sure that the compilation
   // isn't prohibited in a straightforward way.
   AbstractCompiler* comp = CompileBroker::compiler(comp_level);
--- a/src/hotspot/share/compiler/methodLiveness.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/compiler/methodLiveness.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -347,7 +347,6 @@
       case Bytecodes::_freturn:
       case Bytecodes::_dreturn:
       case Bytecodes::_areturn:
-      case Bytecodes::_vreturn:
       case Bytecodes::_return:
         // These opcodes are  not the normal predecessors of any other opcodes.
         break;
@@ -643,8 +642,8 @@
     case Bytecodes::_goto_w:
     case Bytecodes::_aconst_null:
     case Bytecodes::_new:
-    case Bytecodes::_vdefault:
-    case Bytecodes::_vwithfield:
+    case Bytecodes::_defaultvalue:
+    case Bytecodes::_withfield:
     case Bytecodes::_iconst_m1:
     case Bytecodes::_iconst_0:
     case Bytecodes::_iconst_1:
@@ -671,7 +670,6 @@
     case Bytecodes::_saload:
     case Bytecodes::_laload:
     case Bytecodes::_daload:
-    case Bytecodes::_vaload:
     case Bytecodes::_aaload:
     case Bytecodes::_iastore:
     case Bytecodes::_fastore:
@@ -680,7 +678,6 @@
     case Bytecodes::_sastore:
     case Bytecodes::_lastore:
     case Bytecodes::_dastore:
-    case Bytecodes::_vastore:
     case Bytecodes::_aastore:
     case Bytecodes::_pop:
     case Bytecodes::_pop2:
@@ -784,15 +781,12 @@
     case Bytecodes::_instanceof:
     case Bytecodes::_athrow:
     case Bytecodes::_areturn:
-    case Bytecodes::_vreturn:
     case Bytecodes::_monitorenter:
     case Bytecodes::_monitorexit:
     case Bytecodes::_ifnull:
     case Bytecodes::_ifnonnull:
     case Bytecodes::_multianewarray:
     case Bytecodes::_lookupswitch:
-    case Bytecodes::_vbox:
-    case Bytecodes::_vunbox:
       // These bytecodes have no effect on the method's locals.
       break;
 
@@ -834,7 +828,6 @@
     case Bytecodes::_iinc:
     case Bytecodes::_fload:
     case Bytecodes::_aload:
-    case Bytecodes::_vload:
     case Bytecodes::_ret:
       load_one(instruction->get_index());
       break;
@@ -891,7 +884,6 @@
     case Bytecodes::_istore:
     case Bytecodes::_fstore:
     case Bytecodes::_astore:
-    case Bytecodes::_vstore:
       store_one(instruction->get_index());
       break;
 
--- a/src/hotspot/share/include/jvm.h	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/include/jvm.h	Thu Feb 15 15:51:07 2018 -0500
@@ -1087,7 +1087,8 @@
                                         JVM_ACC_ABSTRACT | \
                                         JVM_ACC_ANNOTATION | \
                                         JVM_ACC_ENUM | \
-                                        JVM_ACC_SYNTHETIC)
+                                        JVM_ACC_SYNTHETIC | \
+                                        JVM_ACC_VALUE)
 
 #define JVM_RECOGNIZED_FIELD_MODIFIERS (JVM_ACC_PUBLIC | \
                                         JVM_ACC_PRIVATE | \
@@ -1097,7 +1098,8 @@
                                         JVM_ACC_VOLATILE | \
                                         JVM_ACC_TRANSIENT | \
                                         JVM_ACC_ENUM | \
-                                        JVM_ACC_SYNTHETIC)
+                                        JVM_ACC_SYNTHETIC | \
+                                        JVM_ACC_FLATTENABLE)
 
 #define JVM_RECOGNIZED_METHOD_MODIFIERS (JVM_ACC_PUBLIC | \
                                          JVM_ACC_PRIVATE | \
--- a/src/hotspot/share/interpreter/bytecodeTracer.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/interpreter/bytecodeTracer.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -435,13 +435,11 @@
     case Bytecodes::_fload:
     case Bytecodes::_dload:
     case Bytecodes::_aload:
-    case Bytecodes::_vload:
     case Bytecodes::_istore:
     case Bytecodes::_lstore:
     case Bytecodes::_fstore:
     case Bytecodes::_dstore:
     case Bytecodes::_astore:
-    case Bytecodes::_vstore:
       st->print_cr(" #%d", get_index_special());
       break;
 
@@ -550,7 +548,7 @@
     case Bytecodes::_getstatic:
     case Bytecodes::_putfield:
     case Bytecodes::_getfield:
-    case Bytecodes::_vwithfield:
+    case Bytecodes::_withfield:
       print_field_or_method(get_index_u2_cpcache(), st);
       break;
 
@@ -575,9 +573,7 @@
     case Bytecodes::_new:
     case Bytecodes::_checkcast:
     case Bytecodes::_instanceof:
-    case Bytecodes::_vbox:
-    case Bytecodes::_vunbox:
-    case Bytecodes::_vdefault:
+    case Bytecodes::_defaultvalue:
       { int i = get_index_u2();
         ConstantPool* constants = method()->constants();
         Symbol* name = constants->klass_name_at(i);
--- a/src/hotspot/share/interpreter/bytecodes.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/interpreter/bytecodes.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -484,15 +484,8 @@
   def(_goto_w              , "goto_w"              , "boooo", NULL    , T_VOID   ,  0, false);
   def(_jsr_w               , "jsr_w"               , "boooo", NULL    , T_INT    ,  0, false);
   def(_breakpoint          , "breakpoint"          , ""     , NULL    , T_VOID   ,  0, true);
-  def(_vload               , "vload"               , "bi"   , "wbii"  , T_VALUETYPE,1, false);
-  def(_vstore              , "vstore"              , "bi"   , "wbii"  , T_VOID   , -1, false);
-  def(_vaload              , "vaload"              , "b"    , NULL    , T_VALUETYPE, -1, true);
-  def(_vastore             , "vastore"             , "b"    , NULL    , T_VOID   , -3, true );
-  def(_vreturn             , "vreturn"             , "b"    , NULL    , T_VALUETYPE, -1, true);
-  def(_vbox                , "vbox"                , "bkk"  , NULL    , T_OBJECT ,  0, true );
-  def(_vunbox              , "vunbox"              , "bkk"  , NULL    , T_VALUETYPE,0, true );
-  def(_vdefault            , "vdefault"            , "bkk"  , NULL    , T_VALUETYPE, 1, true);
-  def(_vwithfield          , "vwithfield"          , "bJJ"  , NULL    , T_VALUETYPE, -1, true );
+  def(_defaultvalue        , "defaultvalue"        , "bkk"  , NULL    , T_OBJECT ,  1, true);
+  def(_withfield           , "withfield"           , "bJJ"  , NULL    , T_OBJECT , -1, true );
 
   //  JVM bytecodes
   //  bytecode               bytecode name           format   wide f.   result tp  stk traps  std code
--- a/src/hotspot/share/interpreter/bytecodes.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/interpreter/bytecodes.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -244,15 +244,8 @@
     _breakpoint           = 202, // 0xca
 
     // value-type bytecodes
-    _vload                = 203, // 0xcb
-    _vstore               = 204, // 0xcc
-    _vaload               = 205, // 0xcd
-    _vastore              = 206, // 0xce
-    _vreturn              = 207, // 0xcf
-    _vdefault             = 208, // 0xd0
-    _vwithfield           = 209, // 0xd1
-    _vbox                 = 210, // 0xd2
-    _vunbox               = 211, // 0xd3
+    _defaultvalue         = 203, // 0xcb
+    _withfield            = 204, // 0xcc
 
     number_of_java_codes,
 
--- a/src/hotspot/share/interpreter/interpreterRuntime.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/interpreter/interpreterRuntime.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -244,10 +244,10 @@
   }
 }
 
-IRT_ENTRY(void, InterpreterRuntime::vdefault(JavaThread* thread, ConstantPool* pool, int index))
+IRT_ENTRY(void, InterpreterRuntime::defaultvalue(JavaThread* thread, ConstantPool* pool, int index))
   // Getting the ValueKlass
   Klass* k = pool->klass_at(index, CHECK);
-  assert(k->is_value(), "vdefault argument must be the value type class");
+  assert(k->is_value(), "defaultvalue argument must be the value type class");
   ValueKlass* vklass = ValueKlass::cast(k);
 
   vklass->initialize(THREAD);
@@ -255,14 +255,14 @@
   thread->set_vm_result(res);
 IRT_END
 
-IRT_ENTRY(int, InterpreterRuntime::vwithfield(JavaThread* thread, ConstantPoolCache* cp_cache))
+IRT_ENTRY(int, InterpreterRuntime::withfield(JavaThread* thread, ConstantPoolCache* cp_cache))
   LastFrameAccessor last_frame(thread);
   // Getting the ValueKlass
-  int index = ConstantPool::decode_cpcache_index(last_frame.get_index_u2_cpcache(Bytecodes::_vwithfield));
+  int index = ConstantPool::decode_cpcache_index(last_frame.get_index_u2_cpcache(Bytecodes::_withfield));
   ConstantPoolCacheEntry* cp_entry = cp_cache->entry_at(index);
-  assert(cp_entry->is_resolved(Bytecodes::_vwithfield), "Should have been resolved");
+  assert(cp_entry->is_resolved(Bytecodes::_withfield), "Should have been resolved");
   Klass* klass = cp_entry->f1_as_klass();
-  assert(klass->is_value(), "vwithfield only applies to value types");
+  assert(klass->is_value(), "withfield only applies to value types");
   ValueKlass* vklass = ValueKlass::cast(klass);
 
   // Getting Field information
@@ -341,54 +341,7 @@
 
   // returning result
   thread->set_vm_result(new_value_h());
-  return (type2size[field_type] + type2size[T_VALUETYPE]) * AbstractInterpreter::stackElementSize;
-IRT_END
-
-IRT_ENTRY(void, InterpreterRuntime::vbox(JavaThread* thread, ConstantPool* pool, int index, oopDesc* value))
-  assert(EnableMVT, "vbox is supported only when the MVT programming model is enabled");
-  if (value == NULL) {
-    THROW(vmSymbols::java_lang_NullPointerException());
-  }
-
-  // Since the verifier is probably disabled, a few extra type check
-  Klass* target_klass = pool->klass_at(index, CHECK);
-  if (target_klass->is_value()) {
-    THROW_MSG(vmSymbols::java_lang_ClassCastException(), "vbox target is value type");
-  }
-  Klass* klass = value->klass();
-  if (!klass->is_value()) {
-    THROW_MSG(vmSymbols::java_lang_ClassCastException(), "vbox not from value type");
-  }
-  ValueKlass* vtklass = ValueKlass::cast(klass);
-  if (vtklass->get_vcc_klass() != target_klass) {
-    THROW_MSG(vmSymbols::java_lang_ClassCastException(), "vbox target is not derive value type box");
-  }
-  oop box = vtklass->box(Handle(THREAD, value),
-                         InstanceKlass::cast(target_klass),
-                         CHECK);
-  thread->set_vm_result(box);
-IRT_END
-
-IRT_ENTRY(void, InterpreterRuntime::vunbox(JavaThread* thread, ConstantPool* pool, int index, oopDesc* obj))
-assert(EnableMVT, "vunbox is supported only when the MVT programming model is enabled");
-  if (obj == NULL) {
-    THROW(vmSymbols::java_lang_NullPointerException());
-  }
-  Klass* target_klass = pool->klass_at(index, CHECK);
-  if (!target_klass->is_value()) {
-    THROW_MSG(vmSymbols::java_lang_ClassCastException(), "vunbox target is not value type");
-  }
-  Klass* klass = obj->klass();
-  if ((!klass->is_instance_klass()) || klass->is_value()) {
-    THROW_MSG(vmSymbols::java_lang_ClassCastException(), "vunbox source is not an instance");
-  }
-    if (klass != InstanceKlass::cast(target_klass)->get_vcc_klass()) {
-    THROW_MSG(vmSymbols::java_lang_ClassCastException(), "vunbox target is not derive value type");
-  }
-  oop value = ValueKlass::cast(target_klass)->unbox(Handle(THREAD, obj),
-                                                InstanceKlass::cast(target_klass),
-                                                CHECK);
-  thread->set_vm_result(value);
+  return (type2size[field_type] + type2size[T_OBJECT]) * AbstractInterpreter::stackElementSize;
 IRT_END
 
 IRT_ENTRY(void, InterpreterRuntime::qgetfield(JavaThread* thread, oopDesc* obj, int index, Klass* field_holder))
@@ -668,10 +621,9 @@
   if (obj != NULL) {
     Klass* k = obj->klass();
     if (k->is_value()) {
-      ResourceMark rm(thread);
-      tty->print_cr("areturn used on a value from %s", k->name()->as_C_string());
+      // ResourceMark rm(thread);
+      // tty->print_cr("areturn used on a value from %s", k->name()->as_C_string());
     }
-    assert(!k->is_value(), "areturn should never be used on values");
   }
   thread->set_vm_result(obj);
 IRT_END
@@ -1032,9 +984,9 @@
   constantPoolHandle pool(thread, last_frame.method()->constants());
   methodHandle m(thread, last_frame.method());
   bool is_put    = (bytecode == Bytecodes::_putfield  || bytecode == Bytecodes::_nofast_putfield ||
-                    bytecode == Bytecodes::_putstatic || bytecode == Bytecodes::_vwithfield);
+                    bytecode == Bytecodes::_putstatic || bytecode == Bytecodes::_withfield);
   bool is_static = (bytecode == Bytecodes::_getstatic || bytecode == Bytecodes::_putstatic);
-  bool is_value  = bytecode == Bytecodes::_vwithfield;
+  bool is_value  = bytecode == Bytecodes::_withfield;
 
   {
     JvmtiHideSingleStepping jhss(thread);
@@ -1084,7 +1036,7 @@
       get_code = Bytecodes::_getfield;
     }
     if (is_put && is_value) {
-        put_code = ((is_static) ? Bytecodes::_putstatic : Bytecodes::_vwithfield);
+        put_code = ((is_static) ? Bytecodes::_putstatic : Bytecodes::_withfield);
     } else if ((is_put && !has_initialized_final_update) || !info.access_flags().is_final()) {
         put_code = ((is_static) ? Bytecodes::_putstatic : Bytecodes::_putfield);
     }
@@ -1100,6 +1052,7 @@
     info.access_flags().is_final(),
     info.access_flags().is_volatile(),
     info.is_flatten(),
+    info.is_flattenable(),
     pool->pool_holder()
   );
 }
@@ -1357,7 +1310,7 @@
   case Bytecodes::_putstatic:
   case Bytecodes::_getfield:
   case Bytecodes::_putfield:
-  case Bytecodes::_vwithfield:
+  case Bytecodes::_withfield:
     resolve_get_put(thread, bytecode);
     break;
   case Bytecodes::_invokevirtual:
--- a/src/hotspot/share/interpreter/interpreterRuntime.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/interpreter/interpreterRuntime.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -112,8 +112,8 @@
   static void    anewarray     (JavaThread* thread, ConstantPool* pool, int index, jint size);
   static void    multianewarray(JavaThread* thread, jint* first_size_address);
   static void    register_finalizer(JavaThread* thread, oopDesc* obj);
-  static void    vdefault      (JavaThread* thread, ConstantPool* pool, int index);
-  static int     vwithfield    (JavaThread* thread, ConstantPoolCache* cp_cache);
+  static void    defaultvalue  (JavaThread* thread, ConstantPool* pool, int index);
+  static int     withfield     (JavaThread* thread, ConstantPoolCache* cp_cache);
   static void    qgetfield     (JavaThread* thread, oopDesc* value, int index, Klass* field_holder);
   static void    qputfield     (JavaThread* thread, oopDesc* obj, oopDesc* value, ConstantPoolCache* cp_cache);
   static void    qputstatic    (JavaThread* thread, oopDesc* value, int offset, oopDesc* mirror);
@@ -131,11 +131,6 @@
   static void value_array_load(JavaThread* thread, arrayOopDesc* array, int index);
   static void value_array_store(JavaThread* thread, arrayOopDesc* array, int index, void* val);
 
-  // Valhalla MVT VCC<->DVT
-  static void    vbox  (JavaThread* thread, ConstantPool* pool, int index, oopDesc* value);
-  static void    vunbox(JavaThread* thread, ConstantPool* pool, int index, oopDesc* obj);
-
-
   // Quicken instance-of and check-cast bytecodes
   static void    quicken_io_cc(JavaThread* thread);
 
--- a/src/hotspot/share/interpreter/linkResolver.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/interpreter/linkResolver.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -931,13 +931,13 @@
                                  TRAPS) {
   assert(byte == Bytecodes::_getstatic || byte == Bytecodes::_putstatic ||
          byte == Bytecodes::_getfield  || byte == Bytecodes::_putfield  ||
-         byte == Bytecodes::_vwithfield ||
+         byte == Bytecodes::_withfield ||
          byte == Bytecodes::_nofast_getfield  || byte == Bytecodes::_nofast_putfield  ||
          (byte == Bytecodes::_nop && !link_info.check_access()), "bad field access bytecode");
 
   bool is_static = (byte == Bytecodes::_getstatic || byte == Bytecodes::_putstatic);
   bool is_put    = (byte == Bytecodes::_putfield  || byte == Bytecodes::_putstatic || byte == Bytecodes::_nofast_putfield
-                    || byte == Bytecodes::_vwithfield);
+                    || byte == Bytecodes::_withfield);
   // Check if there's a resolved klass containing the field
   Klass* resolved_klass = link_info.resolved_klass();
   Symbol* field = link_info.name();
@@ -981,22 +981,6 @@
     stringStream ss;
 
     if (sel_klass != current_klass) {
-      // For Minimal Value Types check if the current class is an anonymous
-      // class whose host class is the Derived Value Type class (selected class)
-      // or the Value Capable Class (VCC)
-      if (byte == Bytecodes::_vwithfield) {
-        assert(sel_klass->is_value(), "Expected Value Type");
-        if (current_klass->is_instance_klass() && InstanceKlass::cast(current_klass)->is_anonymous()) {
-          Klass* host_klass = InstanceKlass::cast(current_klass)->host_klass(); // Is host VCC of DVT ?
-
-          if (sel_klass == host_klass  || // Is DVT
-              (host_klass->is_instance_klass() && // Is VCC
-               InstanceKlass::cast(sel_klass)->get_vcc_klass() == host_klass)) {
-            return;
-          }
-        }
-      }
-
       ss.print("Update to %s final field %s.%s attempted from a different class (%s) than the field's declaring class",
                 is_static ? "static" : "non-static", resolved_klass->external_name(), fd.name()->as_C_string(),
                 current_klass->external_name());
--- a/src/hotspot/share/interpreter/oopMapCache.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/interpreter/oopMapCache.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -275,7 +275,7 @@
   st.print("Locals (%d): ", max_locals);
   for(int i = 0; i < max_locals; i++) {
     bool v1 = is_oop(i)               ? true : false;
-    bool v2 = vars[i].is_reference() || vars[i].is_valuetype() ? true : false;
+    bool v2 = vars[i].is_reference();
     assert(v1 == v2, "locals oop mask generation error");
     st.print("%d", v1 ? 1 : 0);
   }
@@ -284,7 +284,7 @@
   st.print("Stack (%d): ", stack_top);
   for(int j = 0; j < stack_top; j++) {
     bool v1 = is_oop(max_locals + j)  ? true : false;
-    bool v2 = stack[j].is_reference() || stack[j].is_valuetype( )? true : false;
+    bool v2 = stack[j].is_reference();
     assert(v1 == v2, "stack oop mask generation error");
     st.print("%d", v1 ? 1 : 0);
   }
@@ -366,15 +366,14 @@
     }
 
     // set oop bit
-    // Note: the interpreter handles value types with oops too
-    if ( cell->is_reference() || cell->is_valuetype()) {
+    if (cell->is_reference()) {
       value |= (mask << oop_bit_number );
     }
 
     // set dead bit
     if (!cell->is_live()) {
       value |= (mask << dead_bit_number);
-      assert(!cell->is_reference() && !cell->is_valuetype(), "dead value marked as oop");
+      assert(!cell->is_reference(), "dead value marked as oop");
     }
   }
 
--- a/src/hotspot/share/interpreter/rewriter.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/interpreter/rewriter.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -464,7 +464,7 @@
       // fall through
       case Bytecodes::_getstatic      : // fall through
       case Bytecodes::_getfield       : // fall through
-        case Bytecodes::_vwithfield     : // fall through but may require more checks for correctness
+      case Bytecodes::_withfield     : // fall through but may require more checks for correctness
       case Bytecodes::_invokevirtual  : // fall through
       case Bytecodes::_invokestatic   :
       case Bytecodes::_invokeinterface:
--- a/src/hotspot/share/interpreter/templateInterpreter.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/interpreter/templateInterpreter.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -71,7 +71,7 @@
 // Implementation of EntryPoint
 
 EntryPoint::EntryPoint() {
-  assert(number_of_states == 11, "check the code below");
+  assert(number_of_states == 10 , "check the code below");
   _entry[btos] = NULL;
   _entry[ztos] = NULL;
   _entry[ctos] = NULL;
@@ -81,13 +81,12 @@
   _entry[ltos] = NULL;
   _entry[ftos] = NULL;
   _entry[dtos] = NULL;
-  _entry[qtos] = NULL;
   _entry[vtos] = NULL;
 }
 
 
-EntryPoint::EntryPoint(address bentry, address zentry, address centry, address sentry, address aentry, address ientry, address lentry, address fentry, address dentry, address qentry, address ventry) {
-  assert(number_of_states == 11, "check the code below");
+EntryPoint::EntryPoint(address bentry, address zentry, address centry, address sentry, address aentry, address ientry, address lentry, address fentry, address dentry, address ventry) {
+  assert(number_of_states == 10, "check the code below");
   _entry[btos] = bentry;
   _entry[ztos] = zentry;
   _entry[ctos] = centry;
@@ -97,7 +96,6 @@
   _entry[ltos] = lentry;
   _entry[ftos] = fentry;
   _entry[dtos] = dentry;
-  _entry[qtos] = qentry;
   _entry[vtos] = ventry;
 }
 
@@ -149,7 +147,6 @@
       _table[ltos][i],
       _table[ftos][i],
       _table[dtos][i],
-      _table[qtos][i],
       _table[vtos][i]
     );
 }
@@ -157,7 +154,7 @@
 
 void DispatchTable::set_entry(int i, EntryPoint& entry) {
   assert(0 <= i && i < length, "index out of bounds");
-  assert(number_of_states == 11, "check the code below");
+  assert(number_of_states == 10, "check the code below");
   _table[btos][i] = entry.entry(btos);
   _table[ztos][i] = entry.entry(ztos);
   _table[ctos][i] = entry.entry(ctos);
@@ -167,7 +164,6 @@
   _table[ltos][i] = entry.entry(ltos);
   _table[ftos][i] = entry.entry(ftos);
   _table[dtos][i] = entry.entry(dtos);
-  _table[qtos][i] = entry.entry(qtos);
   _table[vtos][i] = entry.entry(vtos);
 }
 
--- a/src/hotspot/share/interpreter/templateInterpreter.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/interpreter/templateInterpreter.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -47,7 +47,7 @@
  public:
   // Construction
   EntryPoint();
-  EntryPoint(address bentry, address zentry, address centry, address sentry, address aentry, address ientry, address lentry, address fentry, address dentry, address qentry, address ventry);
+  EntryPoint(address bentry, address zentry, address centry, address sentry, address aentry, address ientry, address lentry, address fentry, address dentry, address ventry);
 
   // Attributes
   address entry(TosState state) const;                // return target address for a given tosca state
@@ -158,7 +158,7 @@
 
   // Code generation
 #ifndef PRODUCT
-  static address    trace_code    (TosState state)              { return _trace_code.entry(state == ptos ? atos : state); }
+  static address    trace_code    (TosState state)              { return _trace_code.entry(state); }
 #endif // !PRODUCT
   static address*   dispatch_table(TosState state)              { return _active_table.table_for(state); }
   static address*   dispatch_table()                            { return _active_table.table_for(); }
--- a/src/hotspot/share/interpreter/templateInterpreterGenerator.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/interpreter/templateInterpreterGenerator.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -78,7 +78,6 @@
                  generate_trace_code(ltos),
                  generate_trace_code(ftos),
                  generate_trace_code(dtos),
-                 generate_trace_code(qtos),
                  generate_trace_code(vtos)
                  );
   }
@@ -100,7 +99,6 @@
                    generate_return_entry_for(ltos, i, index_size),
                    generate_return_entry_for(ftos, i, index_size),
                    generate_return_entry_for(dtos, i, index_size),
-                   generate_return_entry_for(qtos, i, index_size),
                    generate_return_entry_for(vtos, i, index_size)
                    );
     }
@@ -109,7 +107,7 @@
   { CodeletMark cm(_masm, "invoke return entry points");
     // These states are in order specified in TosState, except btos/ztos/ctos/stos are
     // really the same as itos since there is no top of stack optimization for these types
-    const TosState states[] = {itos, itos, itos, itos, itos, ltos, ftos, dtos, atos, qtos, vtos, ilgl};
+    const TosState states[] = {itos, itos, itos, itos, itos, ltos, ftos, dtos, atos, vtos, ilgl};
     const int invoke_length = Bytecodes::length_for(Bytecodes::_invokestatic);
     const int invokeinterface_length = Bytecodes::length_for(Bytecodes::_invokeinterface);
     const int invokedynamic_length = Bytecodes::length_for(Bytecodes::_invokedynamic);
@@ -135,7 +133,6 @@
                  generate_earlyret_entry_for(ltos),
                  generate_earlyret_entry_for(ftos),
                  generate_earlyret_entry_for(dtos),
-                 generate_earlyret_entry_for(qtos),
                  generate_earlyret_entry_for(vtos)
                  );
   }
@@ -166,7 +163,6 @@
                  generate_safept_entry_for(ltos, CAST_FROM_FN_PTR(address, InterpreterRuntime::at_safepoint)),
                  generate_safept_entry_for(ftos, CAST_FROM_FN_PTR(address, InterpreterRuntime::at_safepoint)),
                  generate_safept_entry_for(dtos, CAST_FROM_FN_PTR(address, InterpreterRuntime::at_safepoint)),
-                 generate_safept_entry_for(qtos, CAST_FROM_FN_PTR(address, InterpreterRuntime::at_safepoint)),
                  generate_safept_entry_for(vtos, CAST_FROM_FN_PTR(address, InterpreterRuntime::at_safepoint))
                  );
   }
@@ -256,7 +252,6 @@
                    generate_deopt_entry_for(ltos, i),
                    generate_deopt_entry_for(ftos, i),
                    generate_deopt_entry_for(dtos, i),
-                   generate_deopt_entry_for(qtos, i),
                    generate_deopt_entry_for(vtos, i)
                    );
     }
@@ -300,7 +295,7 @@
 
 void TemplateInterpreterGenerator::set_unimplemented(int i) {
   address e = _unimplemented_bytecode;
-  EntryPoint entry(e, e, e, e, e, e, e, e, e, e, e);
+  EntryPoint entry(e, e, e, e, e, e, e, e, e, e);
   Interpreter::_normal_table.set_entry(i, entry);
   Interpreter::_wentry_point[i] = _unimplemented_bytecode;
 }
@@ -320,14 +315,13 @@
   address lep = _illegal_bytecode_sequence;
   address fep = _illegal_bytecode_sequence;
   address dep = _illegal_bytecode_sequence;
-  address qep = _illegal_bytecode_sequence;
   address vep = _unimplemented_bytecode;
   address wep = _unimplemented_bytecode;
   // code for short & wide version of bytecode
   if (Bytecodes::is_defined(code)) {
     Template* t = TemplateTable::template_for(code);
     assert(t->is_valid(), "just checking");
-    set_short_entry_points(t, bep, cep, sep, aep, iep, lep, fep, dep, qep, vep);
+    set_short_entry_points(t, bep, cep, sep, aep, iep, lep, fep, dep, vep);
   }
   if (Bytecodes::wide_is_defined(code)) {
     Template* t = TemplateTable::template_for_wide(code);
@@ -335,7 +329,7 @@
     set_wide_entry_point(t, wep);
   }
   // set entry points
-  EntryPoint entry(bep, zep, cep, sep, aep, iep, lep, fep, dep, qep, vep);
+  EntryPoint entry(bep, zep, cep, sep, aep, iep, lep, fep, dep, vep);
   Interpreter::_normal_table.set_entry(code, entry);
   Interpreter::_wentry_point[code] = wep;
 }
@@ -348,7 +342,7 @@
 }
 
 
-void TemplateInterpreterGenerator::set_short_entry_points(Template* t, address& bep, address& cep, address& sep, address& aep, address& iep, address& lep, address& fep, address& dep, address& qep, address& vep) {
+void TemplateInterpreterGenerator::set_short_entry_points(Template* t, address& bep, address& cep, address& sep, address& aep, address& iep, address& lep, address& fep, address& dep, address& vep) {
   assert(t->is_valid(), "template must exist");
   switch (t->tos_in()) {
     case btos:
@@ -362,9 +356,7 @@
     case ltos: vep = __ pc(); __ pop(ltos); lep = __ pc(); generate_and_dispatch(t); break;
     case ftos: vep = __ pc(); __ pop(ftos); fep = __ pc(); generate_and_dispatch(t); break;
     case dtos: vep = __ pc(); __ pop(dtos); dep = __ pc(); generate_and_dispatch(t); break;
-    case qtos: vep = __ pc(); __ pop(qtos); qep = __ pc(); generate_and_dispatch(t); break;
-    case vtos: set_vtos_entry_points(t, bep, cep, sep, aep, iep, lep, fep, dep, qep, vep);     break;
-    case ptos: vep = __ pc(); __ pop(ptos); aep = __ pc(); qep = __ pc(); generate_and_dispatch(t); break;
+    case vtos: set_vtos_entry_points(t, bep, cep, sep, aep, iep, lep, fep, dep, vep);     break;
     default  : ShouldNotReachHere();                                                 break;
   }
 }
--- a/src/hotspot/share/interpreter/templateInterpreterGenerator.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/interpreter/templateInterpreterGenerator.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -64,8 +64,8 @@
 
   // Instruction generation
   void generate_and_dispatch (Template* t, TosState tos_out = ilgl);
-  void set_vtos_entry_points (Template* t, address& bep, address& cep, address& sep, address& aep, address& iep, address& lep, address& fep, address& dep, address& qep, address& vep);
-  void set_short_entry_points(Template* t, address& bep, address& cep, address& sep, address& aep, address& iep, address& lep, address& fep, address& dep, address& qep, address& vep);
+  void set_vtos_entry_points (Template* t, address& bep, address& cep, address& sep, address& aep, address& iep, address& lep, address& fep, address& dep, address& vep);
+  void set_short_entry_points(Template* t, address& bep, address& cep, address& sep, address& aep, address& iep, address& lep, address& fep, address& dep, address& vep);
   void set_wide_entry_point  (Template* t, address& wep);
 
   void set_entry_points(Bytecodes::Code code);
--- a/src/hotspot/share/interpreter/templateTable.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/interpreter/templateTable.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -160,8 +160,7 @@
 // Implementation of TemplateTable: Debugging
 
 void TemplateTable::transition(TosState tos_in, TosState tos_out) {
-  assert(_desc->tos_in()  == tos_in
-         || (_desc->tos_in() == ptos && (tos_in == atos || tos_in == qtos)),
+  assert(_desc->tos_in()  == tos_in,
          "inconsistent tos_in  information");
   assert(_desc->tos_out() == tos_out, "inconsistent tos_out information");
 }
@@ -463,15 +462,8 @@
   def(Bytecodes::_goto_w              , ubcp|____|clvm|____, vtos, vtos, goto_w              ,  _           );
   def(Bytecodes::_jsr_w               , ubcp|____|____|____, vtos, vtos, jsr_w               ,  _           );
   def(Bytecodes::_breakpoint          , ubcp|disp|clvm|____, vtos, vtos, _breakpoint         ,  _           );
-  def(Bytecodes::_vload               , ubcp|____|clvm|____, vtos, qtos, vload               ,  _           );
-  def(Bytecodes::_vstore              , ubcp|____|clvm|____, vtos, vtos, vstore              ,  _           );
-  def(Bytecodes::_vaload              , ____|____|clvm|____, itos, qtos, vaload              ,  _           );
-  def(Bytecodes::_vastore             , ____|____|clvm|____, vtos, vtos, vastore             ,  _           );
-  def(Bytecodes::_vreturn             , ____|disp|clvm|____, qtos, qtos, _return             , qtos         );
-  def(Bytecodes::_vdefault            , ubcp|____|clvm|____, vtos, qtos, vdefault            , _            );
-  def(Bytecodes::_vwithfield          , ubcp|____|clvm|____, vtos, qtos, vwithfield          , _            );
-  def(Bytecodes::_vbox                , ubcp|____|clvm|____, qtos, atos, _vbox               , _            );
-  def(Bytecodes::_vunbox              , ubcp|____|clvm|____, atos, qtos, _vunbox             , _            );
+  def(Bytecodes::_defaultvalue        , ubcp|____|clvm|____, vtos, atos, defaultvalue        , _            );
+  def(Bytecodes::_withfield           , ubcp|____|clvm|____, vtos, atos, withfield           , _            );
 
   // wide Java spec bytecodes
   def(Bytecodes::_iload               , ubcp|____|____|iswd, vtos, itos, wide_iload          ,  _           );
@@ -479,30 +471,28 @@
   def(Bytecodes::_fload               , ubcp|____|____|iswd, vtos, ftos, wide_fload          ,  _           );
   def(Bytecodes::_dload               , ubcp|____|____|iswd, vtos, dtos, wide_dload          ,  _           );
   def(Bytecodes::_aload               , ubcp|____|____|iswd, vtos, atos, wide_aload          ,  _           );
-  def(Bytecodes::_vload               , ubcp|____|____|iswd, vtos, qtos, wide_vload          ,  _           );
   def(Bytecodes::_istore              , ubcp|____|____|iswd, vtos, vtos, wide_istore         ,  _           );
   def(Bytecodes::_lstore              , ubcp|____|____|iswd, vtos, vtos, wide_lstore         ,  _           );
   def(Bytecodes::_fstore              , ubcp|____|____|iswd, vtos, vtos, wide_fstore         ,  _           );
   def(Bytecodes::_dstore              , ubcp|____|____|iswd, vtos, vtos, wide_dstore         ,  _           );
   def(Bytecodes::_astore              , ubcp|____|____|iswd, vtos, vtos, wide_astore         ,  _           );
-  def(Bytecodes::_vstore              , ubcp|____|____|iswd, vtos, vtos, wide_vstore         ,  _           );
   def(Bytecodes::_iinc                , ubcp|____|____|iswd, vtos, vtos, wide_iinc           ,  _           );
   def(Bytecodes::_ret                 , ubcp|disp|____|iswd, vtos, vtos, wide_ret            ,  _           );
   def(Bytecodes::_breakpoint          , ubcp|disp|clvm|____, vtos, vtos, _breakpoint         ,  _           );
 
   // JVM bytecodes
-  def(Bytecodes::_fast_agetfield      , ubcp|____|____|____, ptos, atos, fast_accessfield    ,  atos        );
-  def(Bytecodes::_fast_qgetfield      , ubcp|____|____|____, ptos, qtos, fast_accessfield    ,  qtos        );
-  def(Bytecodes::_fast_bgetfield      , ubcp|____|____|____, ptos, itos, fast_accessfield    ,  itos        );
-  def(Bytecodes::_fast_cgetfield      , ubcp|____|____|____, ptos, itos, fast_accessfield    ,  itos        );
-  def(Bytecodes::_fast_dgetfield      , ubcp|____|____|____, ptos, dtos, fast_accessfield    ,  dtos        );
-  def(Bytecodes::_fast_fgetfield      , ubcp|____|____|____, ptos, ftos, fast_accessfield    ,  ftos        );
-  def(Bytecodes::_fast_igetfield      , ubcp|____|____|____, ptos, itos, fast_accessfield    ,  itos        );
-  def(Bytecodes::_fast_lgetfield      , ubcp|____|____|____, ptos, ltos, fast_accessfield    ,  ltos        );
-  def(Bytecodes::_fast_sgetfield      , ubcp|____|____|____, ptos, itos, fast_accessfield    ,  itos        );
+  def(Bytecodes::_fast_agetfield      , ubcp|____|____|____, atos, atos, fast_accessfield    ,  atos        );
+  def(Bytecodes::_fast_qgetfield      , ubcp|____|____|____, atos, atos, fast_accessfield    ,  atos        );
+  def(Bytecodes::_fast_bgetfield      , ubcp|____|____|____, atos, itos, fast_accessfield    ,  itos        );
+  def(Bytecodes::_fast_cgetfield      , ubcp|____|____|____, atos, itos, fast_accessfield    ,  itos        );
+  def(Bytecodes::_fast_dgetfield      , ubcp|____|____|____, atos, dtos, fast_accessfield    ,  dtos        );
+  def(Bytecodes::_fast_fgetfield      , ubcp|____|____|____, atos, ftos, fast_accessfield    ,  ftos        );
+  def(Bytecodes::_fast_igetfield      , ubcp|____|____|____, atos, itos, fast_accessfield    ,  itos        );
+  def(Bytecodes::_fast_lgetfield      , ubcp|____|____|____, atos, ltos, fast_accessfield    ,  ltos        );
+  def(Bytecodes::_fast_sgetfield      , ubcp|____|____|____, atos, itos, fast_accessfield    ,  itos        );
 
   def(Bytecodes::_fast_aputfield      , ubcp|____|____|____, atos, vtos, fast_storefield ,   atos        );
-  def(Bytecodes::_fast_qputfield      , ubcp|____|____|____, qtos, vtos, fast_storefield ,   qtos        );
+  def(Bytecodes::_fast_qputfield      , ubcp|____|____|____, atos, vtos, fast_storefield ,   atos        );
   def(Bytecodes::_fast_bputfield      , ubcp|____|____|____, itos, vtos, fast_storefield ,   itos        );
   def(Bytecodes::_fast_zputfield      , ubcp|____|____|____, itos, vtos, fast_storefield ,   itos        );
   def(Bytecodes::_fast_cputfield      , ubcp|____|____|____, itos, vtos, fast_storefield  ,  itos        );
--- a/src/hotspot/share/interpreter/templateTable.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/interpreter/templateTable.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -144,7 +144,6 @@
   static void fload();
   static void dload();
   static void aload();
-  static void vload();
 
   static void locals_index_wide(Register reg);
   static void wide_iload();
@@ -152,14 +151,12 @@
   static void wide_fload();
   static void wide_dload();
   static void wide_aload();
-  static void wide_vload();
 
   static void iaload();
   static void laload();
   static void faload();
   static void daload();
   static void aaload();
-  static void vaload();
   static void baload();
   static void caload();
   static void saload();
@@ -180,21 +177,18 @@
   static void fstore();
   static void dstore();
   static void astore();
-  static void vstore();
 
   static void wide_istore();
   static void wide_lstore();
   static void wide_fstore();
   static void wide_dstore();
   static void wide_astore();
-  static void wide_vstore();
 
   static void iastore();
   static void lastore();
   static void fastore();
   static void dastore();
   static void aastore();
-  static void vastore();
   static void bastore();
   static void castore();
   static void sastore();
@@ -302,19 +296,16 @@
   static void putstatic(int byte_no);
   static void pop_and_check_object(Register obj);
   static void condy_helper(Label& Done);  // shared by ldc instances
-  static void vwithfield();
+  static void withfield();
 
   static void _new();
-  static void vdefault();
+  static void defaultvalue();
   static void newarray();
   static void anewarray();
   static void arraylength();
   static void checkcast();
   static void instanceof();
 
-  static void _vbox();
-  static void _vunbox();
-
   static void athrow();
 
   static void monitorenter();
@@ -342,7 +333,7 @@
   // initialization helpers
   static void def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(            ), char filler );
   static void def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(int arg     ), int arg     );
- static void def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(bool arg    ), bool arg    );
+  static void def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(bool arg    ), bool arg    );
   static void def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(TosState tos), TosState tos);
   static void def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(Operation op), Operation op);
   static void def(Bytecodes::Code code, int flags, TosState in, TosState out, void (*gen)(Condition cc), Condition cc);
--- a/src/hotspot/share/oops/arrayKlass.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/oops/arrayKlass.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -110,11 +110,7 @@
     if (element_klass->is_instance_klass()) { // it could be an array or simple type
       // Temporary hack, for arrays of value types, this code should be removed
       // once value types have their own array types
-      if (element_klass->is_value()) {
-        new_str[idx++] = 'Q';
-      } else {
-        new_str[idx++] = 'L';
-      }
+      new_str[idx++] = 'L';
     }
     memcpy(&new_str[idx], name_str, len * sizeof(char));
     idx += len;
--- a/src/hotspot/share/oops/cpCache.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/oops/cpCache.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -130,6 +130,7 @@
                                        bool is_final,
                                        bool is_volatile,
                                        bool is_flatten,
+                                       bool is_flattenable,
                                        Klass* root_klass) {
   set_f1(field_holder);
   set_f2(field_offset);
@@ -138,7 +139,8 @@
   set_field_flags(field_type,
                   ((is_volatile ? 1 : 0) << is_volatile_shift) |
                   ((is_final    ? 1 : 0) << is_final_shift) |
-                  ((is_flatten  ? 1 : 0) << is_flatten_field),
+                  ((is_flatten  ? 1 : 0) << is_flatten_field) |
+                  ((is_flattenable ? 1 : 0) << is_flattenable_field),
                   field_index);
   set_bytecode_1(get_code);
   set_bytecode_2(put_code);
--- a/src/hotspot/share/oops/cpCache.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/oops/cpCache.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -50,7 +50,7 @@
 // _indices   [ b2 | b1 |  index  ]  index = constant_pool_index
 // _f1        [  entry specific   ]  metadata ptr (method or klass)
 // _f2        [  entry specific   ]  vtable or res_ref index, or vfinal method ptr
-// _flags     [tos|0|F=1|0|0|i|f|v|0 |0000|field_index] (for field entries)
+// _flags     [tos|0|F=1|0|N|i|f|v|0 |0000|field_index] (for field entries)
 // bit length [ 4 |1| 1 |1|1|1|1|1|1 |1     |-3-|----16-----]
 // _flags     [tos|0|F=0|M|A|I|f|0|vf|indy_rf|000|00000|psize] (for method entries)
 // bit length [ 4 |1| 1 |1|1|1|1|1|1 |-4--|--8--|--8--]
@@ -76,6 +76,7 @@
 //
 // The flags after TosState have the following interpretation:
 // bit 27: 0 for fields, 1 for methods
+// N  flag true if field is marked flattenable (must never be null)
 // i  flag true if field is inlined (flatten)
 // f  flag true if field is marked final
 // v  flag true if field is volatile (only for fields)
@@ -94,8 +95,7 @@
 // ftos: 6
 // dtos: 7
 // atos: 8
-// qtos: 9
-// vtos: 10
+// vtos: 9
 //
 // Entry specific: field entries:
 // _indices = get (b1 section) and put (b2 section) bytecodes, original constant pool index
@@ -185,6 +185,7 @@
     is_field_entry_shift       = 26,  // (F) is it a field or a method?
     has_method_type_shift      = 25,  // (M) does the call site have a MethodType?
     has_appendix_shift         = 24,  // (A) does the call site have an appendix argument?
+    is_flattenable_field       = 24,  // (N) is the field flattenable (must never be null)
     is_forced_virtual_shift    = 23,  // (I) is the interface reference forced to virtual mode?
     is_flatten_field           = 23,  // (i) is the value field flatten?
     is_final_shift             = 22,  // (f) is the field or method final?
@@ -227,6 +228,7 @@
     bool            is_final,                    // the field is final
     bool            is_volatile,                 // the field is volatile
     bool            is_flatten,                  // the field is flatten (value field)
+    bool            is_flattenable,              // the field is flattenable (must never be null)
     Klass*          root_klass                   // needed by the GC to dirty the klass
   );
 
@@ -325,7 +327,7 @@
       case Bytecodes::_invokeinterface : return 1;
       case Bytecodes::_putstatic       :    // fall through
       case Bytecodes::_putfield        :    // fall through
-      case Bytecodes::_vwithfield      :    // fall through
+      case Bytecodes::_withfield       :    // fall through
       case Bytecodes::_invokevirtual   : return 2;
       default                          : break;
     }
@@ -375,7 +377,7 @@
   bool is_field_entry() const                    { return (_flags & (1 << is_field_entry_shift))    != 0; }
   bool is_long() const                           { return flag_state() == ltos; }
   bool is_double() const                         { return flag_state() == dtos; }
-  bool is_valuetype() const                      { return flag_state() == qtos; }
+  bool is_flattenable() const                    { return (_flags & (1 << is_flattenable_field))       != 0; }
   TosState flag_state() const                    { assert((uint)number_of_states <= (uint)tos_state_mask+1, "");
                                                    return (TosState)((_flags >> tos_state_shift) & tos_state_mask); }
   void set_indy_resolution_failed();
--- a/src/hotspot/share/oops/fieldInfo.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/oops/fieldInfo.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -51,8 +51,9 @@
 #define FIELDINFO_TAG_TYPE_PLAIN       2
 #define FIELDINFO_TAG_TYPE_CONTENDED   3
 #define FIELDINFO_TAG_TYPE_MASK        3
-#define FIELDINFO_TAG_MASK             7
+#define FIELDINFO_TAG_MASK            15
 #define FIELDINFO_FLATTENING_OFFSET    2
+#define FIELDINFO_FLATTENABLE_OFFSET   3
 
   // Packed field has the tag, and can be either of:
   //    hi bits <--------------------------- lo bits
@@ -236,6 +237,18 @@
     return ((_shorts[low_packed_offset] >> FIELDINFO_FLATTENING_OFFSET) & 1) != 0;
   }
 
+  void set_flattenable(bool b) {
+      if (b) {
+        _shorts[low_packed_offset] |= 1 << FIELDINFO_FLATTENABLE_OFFSET;
+      } else {
+        _shorts[low_packed_offset] &= ~(1 << FIELDINFO_FLATTENABLE_OFFSET);
+      }
+    }
+
+  bool is_flattenable() {
+    return ((_shorts[low_packed_offset] >> FIELDINFO_FLATTENABLE_OFFSET) & 1) != 0;
+  }
+
   void set_contended_group(u2 val) {
     u2 lo = _shorts[low_packed_offset];
     switch(lo & FIELDINFO_TAG_TYPE_MASK) {
--- a/src/hotspot/share/oops/generateOopMap.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/oops/generateOopMap.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -121,7 +121,6 @@
   virtual void do_int   ()              { set(CellTypeState::value); };
   virtual void do_void  ()              { set(CellTypeState::bottom);};
   virtual void do_object(int begin, int end)  { set(CellTypeState::ref); };
-  virtual void do_valuetype (int begin, int end)  { set(CellTypeState::valuetype); };
   virtual void do_array (int begin, int end)  { set(CellTypeState::ref); };
 
   void do_double()                      { set(CellTypeState::value);
@@ -138,7 +137,7 @@
     _effect = effect;
 
     if (!is_static) {
-      effect[_idx++] = CellTypeState::refOrValueType;
+      effect[_idx++] = CellTypeState::ref;
     }
 
     iterate_parameters();
@@ -178,7 +177,6 @@
   virtual void do_void  ()              { set(CellTypeState::bottom);};
   virtual void do_object(int begin, int end)  { set(CellTypeState::make_slot_ref(_idx)); }
   virtual void do_array (int begin, int end)  { set(CellTypeState::make_slot_ref(_idx)); }
-  virtual void do_valuetype(int begin, int end)  { set(CellTypeState::make_slot_valuetype(_idx)); }
 
   void do_double()                      { set(CellTypeState::value);
                                           set(CellTypeState::value); }
@@ -300,8 +298,6 @@
 CellTypeState CellTypeState::uninit      = CellTypeState::make_any(uninit_value);
 CellTypeState CellTypeState::ref         = CellTypeState::make_any(ref_conflict);
 CellTypeState CellTypeState::value       = CellTypeState::make_any(val_value);
-CellTypeState CellTypeState::valuetype   = CellTypeState::make_any(valuetype_conflict);
-CellTypeState CellTypeState::refOrValueType = CellTypeState::make_any(valuetype_conflict | ref_conflict);
 CellTypeState CellTypeState::refUninit   = CellTypeState::make_any(ref_conflict | uninit_value);
 CellTypeState CellTypeState::top         = CellTypeState::make_top();
 CellTypeState CellTypeState::addr        = CellTypeState::make_any(addr_conflict);
@@ -310,15 +306,12 @@
 static CellTypeState epsilonCTS[1] = { CellTypeState::bottom };
 static CellTypeState   refCTS   = CellTypeState::ref;
 static CellTypeState   valCTS   = CellTypeState::value;
-static CellTypeState valuetypeCTS = CellTypeState::valuetype;
 static CellTypeState    vCTS[2] = { CellTypeState::value, CellTypeState::bottom };
 static CellTypeState    rCTS[2] = { CellTypeState::ref,   CellTypeState::bottom };
-static CellTypeState    qCTS[2] = { CellTypeState::valuetype, CellTypeState::bottom };
 static CellTypeState   rrCTS[3] = { CellTypeState::ref,   CellTypeState::ref,   CellTypeState::bottom };
 static CellTypeState   vrCTS[3] = { CellTypeState::value, CellTypeState::ref,   CellTypeState::bottom };
 static CellTypeState   vvCTS[3] = { CellTypeState::value, CellTypeState::value, CellTypeState::bottom };
 static CellTypeState  rvrCTS[4] = { CellTypeState::ref,   CellTypeState::value, CellTypeState::ref,   CellTypeState::bottom };
-static CellTypeState  qvrCTS[4] = { CellTypeState::valuetype, CellTypeState::value, CellTypeState::ref, CellTypeState::bottom };
 static CellTypeState  vvrCTS[4] = { CellTypeState::value, CellTypeState::value, CellTypeState::ref,   CellTypeState::bottom };
 static CellTypeState  vvvCTS[4] = { CellTypeState::value, CellTypeState::value, CellTypeState::value, CellTypeState::bottom };
 static CellTypeState vvvrCTS[5] = { CellTypeState::value, CellTypeState::value, CellTypeState::value, CellTypeState::ref,   CellTypeState::bottom };
@@ -326,15 +319,10 @@
 
 char CellTypeState::to_char() const {
   if (can_be_reference()) {
-    if (can_be_value() || can_be_address() || can_be_valuetype())
+    if (can_be_value() || can_be_address())
       return '#';    // Conflict that needs to be rewritten
     else
       return 'r';
-  } else if (can_be_valuetype()) {
-    if (can_be_value() || can_be_address())
-      return '#';    // Conflict that needs to be rewritten
-    else
-      return 'q';
   } else if (can_be_value())
     return 'v';
   else if (can_be_address())
@@ -365,11 +353,6 @@
   } else {
     os->print(" ");
   }
-  if (can_be_valuetype()) {
-    os->print("q");
-  } else {
-    os->print(" ");
-  }
   if (can_be_uninit()) {
     os->print("u|");
   } else {
@@ -612,7 +595,6 @@
     case Bytecodes::_freturn:
     case Bytecodes::_dreturn:
     case Bytecodes::_areturn:
-    case Bytecodes::_vreturn:
     case Bytecodes::_return:
     case Bytecodes::_ret:
       break;
@@ -724,15 +706,13 @@
 
   // If the top bit is set, we don't need to do any more work.
   if (!result.is_info_top()) {
-    assert((result.can_be_address() || result.can_be_reference() || result.can_be_valuetype()),
+    assert((result.can_be_address() || result.can_be_reference()),
            "only addresses and references have non-top info");
 
     if (!equal(cts)) {
       // The two values being merged are different.  Raise to top.
       if (result.is_reference()) {
         result = CellTypeState::make_slot_ref(slot);
-      } else if (result.is_valuetype()) {
-        result = CellTypeState::make_slot_valuetype(slot);
       } else {
         result._state |= info_conflict;
       }
@@ -855,7 +835,7 @@
 }
 
 void GenerateOopMap::set_var(int localNo, CellTypeState cts) {
-  assert(cts.is_reference() || cts.is_value() || cts.is_address() || cts.is_valuetype(),
+  assert(cts.is_reference() || cts.is_value() || cts.is_address(),
          "wrong celltypestate");
   if (localNo < 0 || localNo > _max_locals) {
     verify_error("variable write error: r%d", localNo);
@@ -1396,8 +1376,8 @@
     case Bytecodes::_new:               ppush1(CellTypeState::make_line_ref(itr->bci()));
                                         break;
 
-    case Bytecodes::_vdefault:          ppush1(CellTypeState::make_line_valuetype(itr->bci())); break;
-    case Bytecodes::_vwithfield:        do_vwithfield(itr->get_index_u2_cpcache(), itr->bci()); break;
+    case Bytecodes::_defaultvalue:      ppush1(CellTypeState::make_line_ref(itr->bci())); break;
+    case Bytecodes::_withfield:         do_withfield(itr->get_index_u2_cpcache(), itr->bci()); break;
 
     case Bytecodes::_iconst_m1:
     case Bytecodes::_iconst_0:
@@ -1430,8 +1410,6 @@
 
     case Bytecodes::_aload:             ppload(rCTS, itr->get_index()); break;
 
-    case Bytecodes::_vload:             ppload(qCTS, itr->get_index()); break;
-
     case Bytecodes::_iload_0:
     case Bytecodes::_fload_0:           ppload(vCTS, 0);            break;
     case Bytecodes::_iload_1:
@@ -1465,7 +1443,6 @@
     case Bytecodes::_daload:            pp(vrCTS, vvCTS); break;
 
     case Bytecodes::_aaload:            pp_new_ref(vrCTS, itr->bci()); break;
-    case Bytecodes::_vaload:            pp_new_valuetype(vrCTS, itr->bci()); break;
 
     case Bytecodes::_istore:
     case Bytecodes::_fstore:            ppstore(vCTS, itr->get_index()); break;
@@ -1474,7 +1451,6 @@
     case Bytecodes::_dstore:            ppstore(vvCTS, itr->get_index()); break;
 
     case Bytecodes::_astore:            do_astore(itr->get_index());     break;
-    case Bytecodes::_vstore:            do_vstore(itr->get_index()); break;
 
     case Bytecodes::_istore_0:
     case Bytecodes::_fstore_0:          ppstore(vCTS, 0);           break;
@@ -1507,7 +1483,6 @@
     case Bytecodes::_lastore:
     case Bytecodes::_dastore:           ppop(vvvrCTS);              break;
     case Bytecodes::_aastore:           ppop(rvrCTS);               break;
-    case Bytecodes::_vastore:           ppop(qvrCTS);               break;
 
     case Bytecodes::_pop:               ppop_any(1);                break;
     case Bytecodes::_pop2:              ppop_any(2);                break;
@@ -1649,17 +1624,10 @@
                                         ppop1(refCTS);
                                         break;
 
-    case Bytecodes::_vreturn:           do_return_monitor_check();
-                                        ppop1(valuetypeCTS);
-                                        break;
-
     case Bytecodes::_ifnull:
     case Bytecodes::_ifnonnull:         ppop1(refCTS); break;
     case Bytecodes::_multianewarray:    do_multianewarray(*(itr->bcp()+3), itr->bci()); break;
 
-    case Bytecodes::_vbox:              pp_new_ref(qCTS, itr->bci());       break;
-    case Bytecodes::_vunbox:            pp_new_valuetype(rCTS, itr->bci()); break;
-
     case Bytecodes::_wide:              fatal("Iterator should skip this bytecode"); break;
     case Bytecodes::_ret:                                           break;
 
@@ -1675,9 +1643,6 @@
 
 void GenerateOopMap::check_type(CellTypeState expected, CellTypeState actual) {
   if (!expected.equal_kind(actual)) {
-    // dirty hack for invokevirtual
-    if (expected.equal_kind(CellTypeState::refOrValueType) &&
-        (actual.equal_kind(CellTypeState::ref) || actual.equal_kind(CellTypeState::valuetype))) return;
     verify_error("wrong type on stack (found: %c expected: %c)", actual.to_char(), expected.to_char());
   }
 }
@@ -1696,7 +1661,7 @@
   while(!(*out).is_bottom()) {
     CellTypeState out1 = *out++;
     CellTypeState vcts = get_var(loc_no);
-    assert(out1.can_be_reference() || out1.can_be_value() || out1.can_be_valuetype(),
+    assert(out1.can_be_reference() || out1.can_be_value(),
            "can only load refs. and values.");
     if (out1.is_reference()) {
       assert(loc_no>=0, "sanity check");
@@ -1765,7 +1730,7 @@
 }
 
 void GenerateOopMap::ppush1(CellTypeState in) {
-  assert(in.is_reference() || in.is_value() || in.is_valuetype(), "sanity check");
+  assert(in.is_reference() || in.is_value(), "sanity check");
   push(in);
 }
 
@@ -1785,11 +1750,6 @@
   ppush1(CellTypeState::make_line_ref(bci));
 }
 
-void GenerateOopMap::pp_new_valuetype(CellTypeState *in, int bci) {
-  ppop(in);
-  ppush1(CellTypeState::make_line_valuetype(bci));
-}
-
 void GenerateOopMap::ppop_any(int poplen) {
   if (_stack_top >= poplen) {
     _stack_top -= poplen;
@@ -1958,15 +1918,6 @@
   set_var(idx, r_or_p);
 }
 
-void GenerateOopMap::do_vstore(int idx) {
-  CellTypeState q = pop();
-  if (!q.is_valuetype()) {
-    verify_error("wrong type on stack (found: %c, expected: {q})", q.to_char());
-    return;
-  }
-  set_var(idx, q);
-}
-
 // Copies bottom/zero terminated CTS string from "src" into "dst".
 //   Does NOT terminate with a bottom. Returns the number of cells copied.
 int GenerateOopMap::copy_cts(CellTypeState *dst, CellTypeState *src) {
@@ -2003,7 +1954,7 @@
     i   = copy_cts(in, eff);
   }
   if (!is_static) {
-    in[i++] = CellTypeState::refOrValueType;
+    in[i++] = CellTypeState::ref;
   }
   in[i] = CellTypeState::bottom;
   assert(i<=3, "sanity check");
@@ -2047,7 +1998,7 @@
   ppush(out);
 }
 
-void GenerateOopMap::do_vwithfield(int idx, int bci) {
+void GenerateOopMap::do_withfield(int idx, int bci) {
   // Dig up signature for field in constant pool
   ConstantPool* cp = method()->constants();
   int nameAndTypeIdx = cp->name_and_type_ref_index_at(idx);
@@ -2064,12 +2015,12 @@
 
   CellTypeState in[4];
   int i = copy_cts(in, eff);
-  in[i++] = CellTypeState::valuetype;
+  in[i++] = CellTypeState::ref;
   in[i] = CellTypeState::bottom;
   assert(i <= 3, "sanity check");
 
   CellTypeState out[2];
-  out[0] = CellTypeState::valuetype;
+  out[0] = CellTypeState::ref;
   out[1] = CellTypeState::bottom;
 
   pp(in, out);
@@ -2083,11 +2034,6 @@
     out[1] = CellTypeState::bottom;
     return out;
   }
-  if (sigch == 'Q') {
-    out[0] = CellTypeState::make_line_valuetype(bci);
-    out[1] = CellTypeState::bottom;
-    return out;
-  }
   if (sigch == 'J' || sigch == 'D' ) return vvCTS;  // Long and Double
   if (sigch == 'V' ) return epsilonCTS;             // Void
   return vCTS;                                      // Otherwise
--- a/src/hotspot/share/oops/generateOopMap.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/oops/generateOopMap.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -101,7 +101,6 @@
          ref_bit              = nth_bit(30),
          val_bit              = nth_bit(29),
          addr_bit             = nth_bit(28),
-         valuetype_bit        = nth_bit(27),
          live_bits_mask       = (int)(bits_mask & ~uninit_bit) };
 
   // These constants are used for manipulating the INFO portion of a
@@ -131,7 +130,6 @@
          ref_value            = ref_bit,
          ref_conflict         = ref_bit | info_conflict,
          val_value            = val_bit | info_conflict,
-         valuetype_conflict   = valuetype_bit | info_conflict,
          addr_value           = addr_bit,
          addr_conflict        = addr_bit | info_conflict };
 
@@ -183,19 +181,6 @@
     return make_any(ref_bit | not_bottom_info_bit | (bci & ref_data_mask));
   }
 
-
-  static CellTypeState make_slot_valuetype(int slot_num) {
-    assert(slot_num >= 0 && slot_num < valuetype_data_mask, "slot out of range");
-    return make_any(valuetype_bit | not_bottom_info_bit | valuetype_slot_bit |
-        (slot_num & valuetype_data_mask));
-  }
-
-  static CellTypeState make_line_valuetype(int bci) {
-    assert(bci >= 0 && bci < valuetype_data_mask, "line out of range");
-    return make_any(valuetype_bit | not_bottom_info_bit |
-        (bci & valuetype_data_mask));
-  }
-
   // Query methods:
   bool is_bottom() const                { return _state == 0; }
   bool is_live() const                  { return ((_state & live_bits_mask) != 0); }
@@ -218,13 +203,11 @@
   bool is_address() const               { return ((_state & bits_mask) == addr_bit); }
   bool is_reference() const             { return ((_state & bits_mask) == ref_bit); }
   bool is_value() const                 { return ((_state & bits_mask) == val_bit); }
-  bool is_valuetype() const             { return ((_state & bits_mask) == valuetype_bit); }
   bool is_uninit() const                { return ((_state & bits_mask) == (uint)uninit_bit); }
 
   bool can_be_address() const           { return ((_state & addr_bit) != 0); }
   bool can_be_reference() const         { return ((_state & ref_bit) != 0); }
   bool can_be_value() const             { return ((_state & val_bit) != 0); }
-  bool can_be_valuetype() const         { return ((_state & valuetype_bit) != 0); }
   bool can_be_uninit() const            { return ((_state & uninit_bit) != 0); }
 
   bool is_info_bottom() const           { return ((_state & not_bottom_info_bit) == 0); }
@@ -261,8 +244,6 @@
   static CellTypeState uninit;
   static CellTypeState ref;
   static CellTypeState value;
-  static CellTypeState valuetype;
-  static CellTypeState refOrValueType;
   static CellTypeState refUninit;
   static CellTypeState varUninit;
   static CellTypeState top;
@@ -417,15 +398,13 @@
   void  ppop_any                            (int poplen);
   void  pp                                  (CellTypeState *in, CellTypeState *out);
   void  pp_new_ref                          (CellTypeState *in, int bci);
-  void  pp_new_valuetype                    (CellTypeState *in, int bci);
   void  ppdupswap                           (int poplen, const char *out);
   void  do_ldc                              (int bci);
   void  do_astore                           (int idx);
-  void  do_vstore                           (int idx);
   void  do_jsr                              (int delta);
   void  do_field                            (int is_get, int is_static, int idx, int bci);
   void  do_method                           (int is_static, int idx, int bci);
-  void  do_vwithfield                       (int idx, int bci);
+  void  do_withfield                       (int idx, int bci);
   void  do_multianewarray                   (int dims, int bci);
   void  do_monitorenter                     (int bci);
   void  do_monitorexit                      (int bci);
--- a/src/hotspot/share/oops/instanceKlass.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/oops/instanceKlass.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -153,7 +153,7 @@
                                        parser.is_interface(),
                                        parser.is_anonymous(),
                                        should_store_fingerprint(parser.is_anonymous()),
-                                       parser.has_value_fields() ? parser.java_fields_count() : 0,
+                                       parser.has_flattenable_fields() ? parser.java_fields_count() : 0,
                                        parser.is_value_type());
 
   const Symbol* const class_name = parser.class_name();
@@ -258,14 +258,15 @@
   _nonstatic_oop_map_size(nonstatic_oop_map_size(parser.total_oop_map_count())),
   _itable_len(parser.itable_size()),
   _reference_type(parser.reference_type()),
-  _extra_flags(0) {
+  _extra_flags(0),
+  _adr_valueklass_fixed_block(NULL) {
     set_vtable_length(parser.vtable_size());
     set_kind(kind);
     set_access_flags(parser.access_flags());
     set_is_anonymous(parser.is_anonymous());
     set_layout_helper(Klass::instance_layout_helper(parser.layout_size(),
                                                     false));
-    if (parser.has_value_fields()) {
+    if (parser.has_flattenable_fields()) {
       set_has_value_fields();
     }
     _java_fields_count = parser.java_fields_count();
@@ -627,7 +628,7 @@
   // First step: fields
   for (JavaFieldStream fs(this); !fs.done(); fs.next()) {
     ResourceMark rm(THREAD);
-    if (fs.field_descriptor().field_type() == T_VALUETYPE) {
+    if (fs.field_descriptor().access_flags().is_flattenable()) {
       Symbol* signature = fs.field_descriptor().signature();
       // Get current loader and protection domain first.
       oop loader = class_loader();
@@ -689,11 +690,6 @@
     //
 
     if (!is_linked()) {
-      // The VCC must be linked before the DVT
-      if (get_vcc_klass() != NULL) {
-          InstanceKlass::cast(get_vcc_klass())->link_class(CHECK_false);
-      }
-
       if (!is_rewritten()) {
         {
           bool verify_ok = verify_code(throw_verifyerror, THREAD);
@@ -802,11 +798,6 @@
 void InstanceKlass::initialize_impl(TRAPS) {
   HandleMark hm(THREAD);
 
-  // ensure outer VCC is initialized, possible some crafty code referred to VT 1st
-  if (get_vcc_klass() != NULL) {
-    get_vcc_klass()->initialize(CHECK);
-  }
-
   // Make sure klass is linked (verified) before initialization
   // A class could already be verified, since it has been reflected upon.
   link_class(CHECK);
@@ -2393,7 +2384,7 @@
 
   // Add L as type indicator
   int dest_index = 0;
-  dest[dest_index++] = is_value_type_klass() ? 'Q' : 'L';
+  dest[dest_index++] = 'L';
 
   // Add the actual class name
   for (int src_index = 0; src_index < src_length; ) {
@@ -3896,99 +3887,3 @@
   Exceptions::fthrow(THREAD_AND_LOCATION, vmSymbols::java_lang_IncompatibleClassChangeError(), \
       "ValueCapableClass class '%s' %s", external_name(),(s)); \
       return
-
-void InstanceKlass::create_value_capable_class(Handle class_loader, Handle protection_domain, TRAPS) {
-  ResourceMark rm(THREAD);
-  HandleMark hm(THREAD);
-
-  if (!EnableMVT) {
-    return; // Silent fail
-  }
-  // Validate VCC...
-  if (!has_nonstatic_fields()) {
-    THROW_DVT_ERROR("has no instance fields");
-  }
-  if (is_value()) {
-    THROW_DVT_ERROR("is already a value type");
-  }
-  if (!access_flags().is_final()) {
-    THROW_DVT_ERROR("is not a final class");
-  }
-  if (super() != SystemDictionary::Object_klass()) {
-    THROW_DVT_ERROR("does not derive from Object only");
-  }
-
-  // All non-static are final
-  GrowableArray<Handle>* fields = new GrowableArray<Handle>(THREAD, java_fields_count()*2);
-  GrowableArray<jint>* fields_access = new GrowableArray<jint>(THREAD, java_fields_count()*2);
-  for (JavaFieldStream fs(this); !fs.done(); fs.next()) {
-    AccessFlags access_flags = fs.access_flags();
-    if (access_flags.is_static()) {
-      continue;
-    }
-    if (!access_flags.is_final()) {
-      THROW_DVT_ERROR("contains non-final instance field");
-    }
-    jint flags = access_flags.get_flags();
-    // Remember the field name, signature, access modifiers
-    Handle h = java_lang_String::create_from_symbol(fs.name(), CHECK);
-    fields->append(h);
-    h = java_lang_String::create_from_symbol(fs.signature(), CHECK);
-    fields->append(h);
-    fields_access->append(access_flags.get_flags());
-  }
-
-  // Generate DVT...
-  log_debug(load)("Cooking DVT for VCC %s", external_name());
-  const char*  this_name     = name()->as_C_string();
-
-  // Assemble the Java args...field descriptor array
-  objArrayOop fdarr_oop = oopFactory::new_objectArray(fields->length(), CHECK);
-  objArrayHandle fdarr(THREAD, fdarr_oop);
-  for (int i = 0; i < fields->length(); i++) {
-    fdarr->obj_at_put(i, fields->at(i)());
-  }
-  //...field access modifiers array
-  typeArrayOop faarr_oop = oopFactory::new_intArray(fields_access->length(), CHECK);
-  typeArrayHandle faarr(THREAD, faarr_oop);
-  for (int i = 0; i < fields_access->length(); i++) {
-    faarr->int_at_put(i, fields_access->at(i));
-  }
-
-  Handle vcc_name_h = java_lang_String::create_from_symbol(name(), CHECK);
-  // Upcall to our Java helper...
-  JavaValue result(T_OBJECT);
-  JavaCallArguments args(5);
-  args.push_oop(vcc_name_h);
-  args.push_oop(class_loader);
-  args.push_oop(protection_domain);
-  args.push_oop(fdarr);
-  args.push_oop(faarr);
-  JavaCalls::call_static(&result,
-                         SystemDictionary::Valhalla_MVT1_0_klass(),
-                         vmSymbols::valhalla_shady_MVT1_0_createDerivedValueType(),
-                         vmSymbols::valhalla_shady_MVT1_0_createDerivedValueType_signature(),
-                         &args,
-                         CHECK);
-  Handle returned(THREAD, (oop) result.get_jobject());
-  if (returned.is_null()) {
-    THROW_DVT_ERROR("unknown error deriving value type");
-  }
-  TempNewSymbol dvt_name_sym = java_lang_String::as_symbol(returned(), CHECK);
-
-  Klass* dvt_klass = SystemDictionary::resolve_or_null(dvt_name_sym,
-                                                       class_loader,
-                                                       protection_domain,
-                                                       CHECK);
-  if (!dvt_klass->is_value()) {
-    THROW_DVT_ERROR("failed to resolve derived value type");
-  }
-  /**
-   * Found it, let's point to each other to denote "is_derive_vt()"...
-   */
-  ValueKlass* vt_klass = ValueKlass::cast(dvt_klass);
-  assert(vt_klass->class_loader() == class_loader(), "DVT Not the same class loader as VCC");
-  vt_klass->set_vcc_klass(this);
-  log_debug(load)("Cooked DVT %s for VCC %s", vt_klass->external_name(), external_name());
-}
-
--- a/src/hotspot/share/oops/instanceKlass.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/oops/instanceKlass.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -29,6 +29,7 @@
 #include "classfile/classLoaderData.hpp"
 #include "classfile/moduleEntry.hpp"
 #include "classfile/packageEntry.hpp"
+#include "code/vmreg.hpp"
 #include "gc/shared/specialized_oop_closures.hpp"
 #include "memory/referenceType.hpp"
 #include "oops/annotations.hpp"
@@ -54,6 +55,7 @@
 //    [EMBEDDED implementor of the interface] only exist for interface
 //    [EMBEDDED host klass        ] only exist for an anonymous class (JSR 292 enabled)
 //    [EMBEDDED fingerprint       ] only if should_store_fingerprint()==true
+//    [EMBEDDED ValueKlassFixedBlock] only if is a ValueKlass instance
 
 
 // forward declaration for class -- see below for definition
@@ -129,6 +131,18 @@
 
 struct JvmtiCachedClassFileData;
 
+class SigEntry;
+
+class ValueKlassFixedBlock VALUE_OBJ_CLASS_SPEC {
+  Array<SigEntry>** _extended_sig;
+  Array<VMRegPair>** _return_regs;
+  address* _pack_handler;
+  address* _unpack_handler;
+  int* _default_value_offset;
+
+  friend class ValueKlass;
+};
+
 class InstanceKlass: public Klass {
   friend class VMStructs;
   friend class JVMCIVMStructs;
@@ -215,9 +229,7 @@
     _extra_is_being_redefined   = 1 << 0, // used for locking redefinition
     _extra_has_resolved_methods = 1 << 1, // resolved methods table entries added for this class
     _extra_has_value_fields     = 1 << 2, // has value fields and related embedded section is not empty
-    _extra_is_bufferable        = 1 << 3, // value can be buffered out side of the Java heap
-    _extra_has_vcc_klass        = 1 << 4, // has a pointer to its Value Capable Class (MVT)
-    _extra_has_vcc_annotation   = 1 << 5
+    _extra_is_bufferable        = 1 << 3  // value can be buffered out side of the Java heap
   };
 
  protected:
@@ -339,6 +351,8 @@
   //   have this embedded field.
   //
 
+  ValueKlassFixedBlock* _adr_valueklass_fixed_block;
+
   friend class SystemDictionary;
 
  public:
@@ -391,21 +405,6 @@
     _extra_flags |= _extra_has_value_fields;
   }
 
-  bool has_vcc_klass() const {
-    return (_extra_flags & _extra_has_vcc_klass) != 0;
-  }
-  void set_has_vcc_klass() {
-    _extra_flags |= _extra_has_vcc_klass;
-  }
-
-  bool has_vcc_annotation() const {
-    return (_extra_flags &_extra_has_vcc_annotation) != 0;
-  }
-
-  void set_has_vcc_annotation() {
-    _extra_flags |= _extra_has_vcc_annotation;
-  }
-
   // field sizes
   int nonstatic_field_size() const         { return _nonstatic_field_size; }
   void set_nonstatic_field_size(int size)  { _nonstatic_field_size = size; }
@@ -1117,8 +1116,6 @@
                   bool is_interface, bool is_anonymous, bool has_stored_fingerprint,
                   int java_fields, bool is_value_type) {
     return align_metadata_size(header_size() +
-           (is_value_type ? (int)sizeof(address) : 0) +
-           (is_value_type ? (int)sizeof(address) : 0) +
            vtable_length +
            itable_length +
            nonstatic_oop_map_size +
@@ -1126,8 +1123,7 @@
            (is_anonymous ? (int)sizeof(Klass*)/wordSize : 0) +
            (has_stored_fingerprint ? (int)sizeof(uint64_t*)/wordSize : 0) +
            (java_fields * (int)sizeof(Klass*)/wordSize) +
-           (is_value_type ? (int)sizeof(Klass*) : 0) +
-           (is_value_type ? (int)sizeof(intptr_t)*3 : 0));
+           (is_value_type ? (int)sizeof(struct ValueKlassFixedBlock) : 0));
   }
   int size() const                    { return size(vtable_length(),
                                                itable_length(),
@@ -1142,7 +1138,7 @@
   virtual void collect_statistics(KlassSizeStats *sz) const;
 #endif
 
-  intptr_t* start_of_itable()   const { return (intptr_t*)start_of_vtable() + (is_value() ? 3 : 0 ) + vtable_length(); }
+  intptr_t* start_of_itable()   const { return (intptr_t*)start_of_vtable() + vtable_length(); }
   intptr_t* end_of_itable()     const { return start_of_itable() + itable_length(); }
 
   int  itable_offset_in_words() const { return start_of_itable() - (intptr_t*)this; }
@@ -1222,34 +1218,6 @@
     }
   }
 
-  address adr_vcc_klass() const {
-    if (has_vcc_klass()) {
-      address adr_jf = adr_value_fields_klasses();
-      if (adr_jf != NULL) {
-        return adr_jf + this->java_fields_count() * sizeof(Klass*);
-      }
-
-      address adr_fing = adr_fingerprint();
-      if (adr_fing != NULL) {
-        return adr_fingerprint() + sizeof(u8);
-      }
-
-      InstanceKlass** adr_host = adr_host_klass();
-      if (adr_host != NULL) {
-        return (address)(adr_host + 1);
-      }
-
-      Klass** adr_impl = adr_implementor();
-      if (adr_impl != NULL) {
-        return (address)(adr_impl + 1);
-      }
-
-      return (address)end_of_nonstatic_oop_maps();
-    } else {
-      return NULL;
-    }
-  }
-
   Klass* get_value_field_klass(int idx) const {
     assert(has_value_fields(), "Sanity checking");
     Klass* k = ((Klass**)adr_value_fields_klasses())[idx];
@@ -1272,21 +1240,6 @@
     ((Klass**)adr_value_fields_klasses())[idx] = k;
   }
 
-  Klass* get_vcc_klass() const {
-    if (has_vcc_klass()) {
-      Klass* k = *(Klass**)adr_vcc_klass();
-      assert(k == NULL || !k->is_value(), "Must not be a value type");
-      return k;
-    }
-    return NULL;
-  }
-
-  void set_vcc_klass(Klass* k) {
-    assert(has_vcc_klass(), "Sanity checking");
-    assert(k == NULL || !k->is_value(), "Must not be a value type");
-    *(Klass**)adr_vcc_klass()= k;
-  }
-
   // Use this to return the size of an instance in heap words:
   virtual int size_helper() const {
     return layout_helper_to_size_helper(layout_helper());
@@ -1515,9 +1468,6 @@
   // jvm support
   jint compute_modifier_flags(TRAPS) const;
 
-  //Valhalla prototype ValueCapableClass
-  void create_value_capable_class(Handle class_loader, Handle protection_domain, TRAPS);
-
 public:
   // JVMTI support
   jint jvmti_class_status() const;
--- a/src/hotspot/share/oops/instanceKlass.inline.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/oops/instanceKlass.inline.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -166,9 +166,6 @@
 ALWAYSINLINE int InstanceKlass::oop_oop_iterate(oop obj, OopClosureType* closure) {
   if (Devirtualizer<nv>::do_metadata(closure)) {
     Devirtualizer<nv>::do_klass(closure, this);
-    if (get_vcc_klass() != NULL) {
-      Devirtualizer<nv>::do_klass(closure, get_vcc_klass());
-    }
   }
 
   oop_oop_iterate_oop_maps<nv>(obj, closure);
@@ -193,9 +190,6 @@
   if (Devirtualizer<nv>::do_metadata(closure)) {
     if (mr.contains(obj)) {
       Devirtualizer<nv>::do_klass(closure, this);
-      if (get_vcc_klass() != NULL) {
-        Devirtualizer<nv>::do_klass(closure, get_vcc_klass());
-      }
     }
   }
 
--- a/src/hotspot/share/oops/klass.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/oops/klass.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -705,7 +705,7 @@
 }
 
 vtableEntry* Klass::start_of_vtable() const {
-  return (vtableEntry*) ((address)this + in_bytes(vtable_start_offset()));
+  return (vtableEntry*) ((address)this + in_bytes(vtable_start_offset()) + (is_value() ? 3 : 0 ) * sizeof(intptr_t) );
 }
 
 Method* Klass::method_at_vtable(int index)  {
--- a/src/hotspot/share/oops/klassVtable.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/oops/klassVtable.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -96,14 +96,13 @@
      vtable_length += *num_new_mirandas * vtableEntry::size();
   }
 
-  if (Universe::is_bootstrapping() && vtable_length == 0 && classname != vmSymbols::java_lang____Value()) {
+  if (Universe::is_bootstrapping() && vtable_length == 0) {
     // array classes don't have their superclass set correctly during
     // bootstrapping
     vtable_length = Universe::base_vtable_size();
   }
 
-  if (super == NULL && vtable_length != Universe::base_vtable_size()
-      && !class_flags.is_value_type()) {
+  if (super == NULL && vtable_length != Universe::base_vtable_size()) {
     if (Universe::is_bootstrapping()) {
       // Someone is attempting to override java.lang.Object incorrectly on the
       // bootclasspath.  The JVM cannot recover from this error including throwing
@@ -119,8 +118,7 @@
     }
   }
   assert(vtable_length % vtableEntry::size() == 0, "bad vtable length");
-  assert(vtable_length >= Universe::base_vtable_size()
-         || class_flags.is_value_type(), "vtable too small");
+  assert(vtable_length >= Universe::base_vtable_size(), "vtable too small");
 
   *vtable_length_ret = vtable_length;
 }
--- a/src/hotspot/share/oops/methodData.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/oops/methodData.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -238,12 +238,6 @@
     }
     SignatureInfo::do_object(begin, end);
   }
-  void do_valuetype(int begin, int end) {
-    if (_offsets.length() < _max) {
-      _offsets.push(_size);
-    }
-    SignatureInfo::do_valuetype(begin, end);
-  }
   void do_array (int begin, int end) {
     if (_offsets.length() < _max) {
       _offsets.push(_size);
--- a/src/hotspot/share/oops/objArrayKlass.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/oops/objArrayKlass.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -63,9 +63,6 @@
   Klass* super_klass = NULL;
   if (!Universe::is_bootstrapping() || SystemDictionary::Object_klass_loaded()) {
     Klass* element_super = element_klass->super();
-    if (element_super == SystemDictionary::___Value_klass()) {
-      element_super = NULL;
-    }
     if (element_super != NULL) {
       // The element type has a direct super.  E.g., String[] has direct super of Object[].
       super_klass = element_super->array_klass_or_null();
--- a/src/hotspot/share/oops/valueKlass.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/oops/valueKlass.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -53,7 +53,6 @@
 }
 
 int ValueKlass::raw_value_byte_size() const {
-  assert(!is__Value(), "This is not the value type klass you are looking for");
   int heapOopAlignedSize = nonstatic_field_size() << LogBytesPerHeapOop;
   // If bigger than 64 bits or needs oop alignment, then use jlong aligned
   // which for values should be jlong aligned, asserts in raw_field_copy otherwise
@@ -265,32 +264,6 @@
   }
 }
 
-oop ValueKlass::box(Handle src, InstanceKlass* target_klass, TRAPS) {
-  assert(src()->klass()->is_value(), "src must be a value type");
-  assert(!target_klass->is_value(), "target_klass must not be a value type");
-
-  target_klass->initialize(CHECK_0);
-  instanceOop box = target_klass->allocate_instance(CHECK_0);
-  value_store(data_for_oop(src()), data_for_oop(box), true, false);
-
-  assert(!box->klass()->is_value(), "Sanity check");
-  return box;
-}
-
-oop ValueKlass::unbox(Handle src, InstanceKlass* target_klass, TRAPS) {
-  assert(!src()->klass()->is_value(), "src must not be a value type");
-  assert(target_klass->is_value(), "target_klass must be a value type");
-  ValueKlass* vtklass = ValueKlass::cast(target_klass);
-
-  vtklass->initialize(CHECK_0);
-  bool in_heap;
-  instanceOop value = vtklass->allocate_buffered_or_heap_instance(&in_heap, CHECK_0);
-  value_store(data_for_oop(src()), data_for_oop(value), in_heap, false);
-
-  assert(value->klass()->is_value(), "Sanity check");
-  return value;
-}
-
 // Value type arguments are not passed by reference, instead each
 // field of the value type is passed as an argument. This helper
 // function collects the fields of the value types (including embedded
@@ -357,7 +330,7 @@
   // Because the pack and unpack handler addresses need to be loadable from generated code,
   // they are stored at a fixed offset in the klass metadata. Since value type klasses do
   // not have a vtable, the vtable offset is used to store these addresses.
-  guarantee(vtable_length() == 0, "vtables are not supported in value klasses");
+  //guarantee(vtable_length() == 0, "vtables are not supported in value klasses");
   if (ValueTypeReturnedAsFields || ValueTypePassFieldsAsArgs) {
     Thread* THREAD = Thread::current();
     assert(!HAS_PENDING_EXCEPTION, "should have no exception");
@@ -420,7 +393,7 @@
 
 // Can this value type be returned as multiple values?
 bool ValueKlass::can_be_returned_as_fields() const {
-  return !is__Value() && (return_regs() != NULL);
+  return return_regs() != NULL;
 }
 
 // Create handles for all oop fields returned in registers that are going to be live across a safepoint
--- a/src/hotspot/share/oops/valueKlass.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/oops/valueKlass.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -41,7 +41,7 @@
   // Constructor
   ValueKlass(const ClassFileParser& parser)
     : InstanceKlass(parser, InstanceKlass::_misc_kind_value_type) {
-    set_has_vcc_klass();
+    _adr_valueklass_fixed_block = valueklass_static_bloc();
     // Addresses used for value type calling convention
     *((Array<SigEntry>**)adr_extended_sig()) = NULL;
     *((Array<VMRegPair>**)adr_return_regs()) = NULL;
@@ -49,48 +49,52 @@
     *((address*)adr_unpack_handler()) = NULL;
     assert(pack_handler() == NULL, "pack handler not null");
     *((int*)adr_default_value_offset()) = 0;
+
+  }
+
+  ValueKlassFixedBlock* valueklass_static_bloc() const {
+    address adr_jf = adr_value_fields_klasses();
+    if (adr_jf != NULL) {
+      return (ValueKlassFixedBlock*)(adr_jf + this->java_fields_count() * sizeof(Klass*));
+    }
+
+    address adr_fing = adr_fingerprint();
+    if (adr_fing != NULL) {
+      return (ValueKlassFixedBlock*)(adr_fingerprint() + sizeof(u8));
+    }
+
+    InstanceKlass** adr_host = adr_host_klass();
+    if (adr_host != NULL) {
+      return (ValueKlassFixedBlock*)(adr_host + 1);
+    }
+
+    Klass** adr_impl = adr_implementor();
+    if (adr_impl != NULL) {
+      return (ValueKlassFixedBlock*)(adr_impl + 1);
+    }
+
+    return (ValueKlassFixedBlock*)end_of_nonstatic_oop_maps();
   }
 
   address adr_extended_sig() const {
-    address adr_vcc = adr_vcc_klass();
-    if (adr_vcc == NULL) {
-      address adr_jf = adr_value_fields_klasses();
-      if (adr_jf != NULL) {
-        return adr_jf + this->java_fields_count() * sizeof(Klass*);
-      }
-
-      address adr_fing = adr_fingerprint();
-      if (adr_fing != NULL) {
-        return adr_fingerprint() + sizeof(u8);
-      }
-
-      InstanceKlass** adr_host = adr_host_klass();
-      if (adr_host != NULL) {
-        return (address)(adr_host + 1);
-      }
-
-      Klass** adr_impl = adr_implementor();
-      if (adr_impl != NULL) {
-        return (address)(adr_impl + 1);
-      }
-
-      return (address)end_of_nonstatic_oop_maps();
-    } else {
-      return adr_vcc + sizeof(Klass*);
-    }
+    assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized");
+    return ((address)_adr_valueklass_fixed_block) + in_bytes(byte_offset_of(ValueKlassFixedBlock, _extended_sig));
   }
 
   address adr_return_regs() const {
-    return adr_extended_sig() + sizeof(intptr_t);
+    ValueKlassFixedBlock* vkst = valueklass_static_bloc();
+    return ((address)_adr_valueklass_fixed_block) + in_bytes(byte_offset_of(ValueKlassFixedBlock, _return_regs));
   }
 
   // pack and unpack handlers for value types return
   address adr_pack_handler() const {
-    return (address)this + in_bytes(pack_handler_offset());
+    assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized");
+    return ((address)_adr_valueklass_fixed_block) + in_bytes(byte_offset_of(ValueKlassFixedBlock, _pack_handler));
   }
 
   address adr_unpack_handler() const {
-    return (address)this + in_bytes(unpack_handler_offset());
+    assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized");
+    return ((address)_adr_valueklass_fixed_block) + in_bytes(byte_offset_of(ValueKlassFixedBlock, _unpack_handler));
   }
 
   address pack_handler() const {
@@ -102,7 +106,8 @@
   }
 
   address adr_default_value_offset() const {
-    return (address)this + in_bytes(default_value_offset_offset());
+    assert(_adr_valueklass_fixed_block != NULL, "Should have been initialized");
+    return ((address)_adr_valueklass_fixed_block) + in_bytes(byte_offset_of(ValueKlassFixedBlock, _default_value_offset));
   }
 
   // static Klass* array_klass_impl(InstanceKlass* this_k, bool or_null, int n, TRAPS);
@@ -121,7 +126,6 @@
  public:
   // Type testing
   bool is_value_slow() const        { return true; }
-  bool is__Value() const { return (this == SystemDictionary::___Value_klass()); }
 
   // Casting from Klass*
   static ValueKlass* cast(Klass* k) {
@@ -161,12 +165,14 @@
   void set_if_bufferable() {
     bool bufferable;
 
-    int size_in_heap_words = size_helper();
-    int base_offset = instanceOopDesc::base_offset_in_bytes();
-    size_t size_in_bytes = size_in_heap_words * HeapWordSize - base_offset;
-    bufferable = size_in_bytes <= BigValueTypeThreshold;
-    if (size_in_bytes > VTBufferChunk::max_alloc_size()) bufferable = false;
-    if (ValueTypesBufferMaxMemory == 0) bufferable = false;
+//    int size_in_heap_words = size_helper();
+//    int base_offset = instanceOopDesc::base_offset_in_bytes();
+//    size_t size_in_bytes = size_in_heap_words * HeapWordSize - base_offset;
+//    bufferable = size_in_bytes <= BigValueTypeThreshold;
+//    if (size_in_bytes > VTBufferChunk::max_alloc_size()) bufferable = false;
+//    if (ValueTypesBufferMaxMemory == 0) bufferable = false;
+
+    bufferable = false;
     if (bufferable) {
       _extra_flags |= _extra_is_bufferable;
     } else {
@@ -198,9 +204,6 @@
   // store the value of this klass contained with src into dst, raw data ptr
   void value_store(void* src, void* dst, size_t raw_byte_size, bool dst_is_heap, bool dst_uninitialized);
 
-  oop unbox(Handle src, InstanceKlass* target_klass, TRAPS);
-  oop box(Handle src, InstanceKlass* target_klass, TRAPS);
-
   // GC support...
 
   void iterate_over_inside_oops(OopClosure* f, oop value);
@@ -215,11 +218,9 @@
   // calling convention support
   void initialize_calling_convention();
   Array<SigEntry>* extended_sig() const {
-    assert(!is__Value(), "make no sense for __Value");
     return *((Array<SigEntry>**)adr_extended_sig());
   }
   Array<VMRegPair>* return_regs() const {
-    assert(!is__Value(), "make no sense for __Value");
     return *((Array<VMRegPair>**)adr_return_regs());
   }
   bool can_be_returned_as_fields() const;
@@ -231,14 +232,17 @@
   // pack and unpack handlers. Need to be loadable from generated code
   // so at a fixed offset from the base of the klass pointer.
   static ByteSize pack_handler_offset() {
+    fatal("Should be re-implemented using the ValueKlassStaticBlock indirection");
     return in_ByteSize(InstanceKlass::header_size() * wordSize);
   }
 
   static ByteSize unpack_handler_offset() {
+    fatal("Should be re-implemented using the ValueKlassStaticBlock indirection");
     return in_ByteSize((InstanceKlass::header_size()+1) * wordSize);
   }
 
   static ByteSize default_value_offset_offset() {
+    fatal("Should be re-implemented using the ValueKlassStaticBlock indirection");
     return in_ByteSize((InstanceKlass::header_size()+2) * wordSize);
   }
 
--- a/src/hotspot/share/opto/compile.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/opto/compile.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -1554,7 +1554,8 @@
       // First handle header references such as a LoadKlassNode, even if the
       // object's klass is unloaded at compile time (4965979).
       if (!is_known_inst) { // Do it only for non-instance types
-        tj = tv = TypeValueTypePtr::make(TypePtr::BotPTR, env()->___Value_klass()->as_value_klass(), NULL, Type::Offset(offset));
+        // tj = tv = TypeValueTypePtr::make(TypePtr::BotPTR, env()->___Value_klass()->as_value_klass(), NULL, Type::Offset(offset));
+        tj = tv = NULL;
       }
     } else if (offset < 0 || offset >= vk->size_helper() * wordSize) {
       // Static fields are in the space above the normal instance
--- a/src/hotspot/share/opto/graphKit.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/opto/graphKit.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -587,7 +587,7 @@
       ex_obj = env()->ArrayIndexOutOfBoundsException_instance();
       break;
     case Deoptimization::Reason_class_check:
-      if (java_bc() == Bytecodes::_aastore || java_bc() == Bytecodes::_vastore) {
+      if (java_bc() == Bytecodes::_aastore) {
         ex_obj = env()->ArrayStoreException_instance();
       } else {
         ex_obj = env()->ClassCastException_instance();
@@ -1086,7 +1086,7 @@
     }
     break;
 
-  case Bytecodes::_vwithfield: {
+  case Bytecodes::_withfield: {
     bool ignored_will_link;
     ciField* field = method()->get_field_at_bci(bci(), ignored_will_link);
     int      size  = field->type()->size();
@@ -1100,7 +1100,6 @@
   case Bytecodes::_freturn:
   case Bytecodes::_dreturn:
   case Bytecodes::_areturn:
-  case Bytecodes::_vreturn:
     assert(rsize == -depth, "");
     inputs = rsize;
     break;
--- a/src/hotspot/share/opto/parse.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/opto/parse.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -529,16 +529,13 @@
   // implementation of object creation bytecodes
   void emit_guard_for_new(ciInstanceKlass* klass);
   void do_new();
-  void do_vdefault();
-  void do_vwithfield();
+  void do_defaultvalue();
+  void do_withfield();
   void do_newarray(BasicType elemtype);
   void do_newarray();
   void do_multianewarray();
   Node* expand_multianewarray(ciArrayKlass* array_klass, Node* *lengths, int ndimensions, int nargs);
 
-  void do_vbox();
-  void do_vunbox();
-
   // implementation of jsr/ret
   void do_jsr();
   void do_ret();
--- a/src/hotspot/share/opto/parse2.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/opto/parse2.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -1528,7 +1528,6 @@
     push( local(3) );
     break;
   case Bytecodes::_aload:
-  case Bytecodes::_vload:
     push( local(iter().get_index()) );
     break;
 
@@ -1606,7 +1605,6 @@
   case Bytecodes::_fstore:
   case Bytecodes::_istore:
   case Bytecodes::_astore:
-  case Bytecodes::_vstore:
     set_local( iter().get_index(), pop() );
     break;
   // long stores
@@ -1725,7 +1723,6 @@
   case Bytecodes::_iaload: array_load(T_INT);    break;
   case Bytecodes::_saload: array_load(T_SHORT);  break;
   case Bytecodes::_faload: array_load(T_FLOAT);  break;
-  case Bytecodes::_vaload: array_load(T_VALUETYPE); break;
   case Bytecodes::_aaload: array_load(T_OBJECT); break;
   case Bytecodes::_laload: {
     a = array_addressing(T_LONG, 0);
@@ -1746,27 +1743,28 @@
   case Bytecodes::_iastore: array_store(T_INT);   break;
   case Bytecodes::_sastore: array_store(T_SHORT); break;
   case Bytecodes::_fastore: array_store(T_FLOAT); break;
-  case Bytecodes::_vastore: {
-    d = array_addressing(T_OBJECT, 1);
-    if (stopped())  return;     // guaranteed null or range check
-    array_store_check(true);
-    c = pop();                  // Oop to store
-    b = pop();                  // index (already used)
-    a = pop();                  // the array itself
-    const TypeAryPtr* arytype = _gvn.type(a)->is_aryptr();
-    const Type* elemtype = arytype->elem();
-
-    if (elemtype->isa_valuetype()) {
-      c->as_ValueType()->store_flattened(this, a, d);
-      break;
-    }
-
-    const TypeAryPtr* adr_type = TypeAryPtr::OOPS;
-    Node* oop = c->as_ValueType()->allocate(this)->get_oop();
-    Node* store = store_oop_to_array(control(), a, d, adr_type, oop, elemtype->make_oopptr(), T_OBJECT,
-                                     StoreNode::release_if_reference(T_OBJECT));
-    break;
-  }
+//  The vastore case has to merged into the aastore case
+//  case Bytecodes::_vastore: {
+//    d = array_addressing(T_OBJECT, 1);
+//    if (stopped())  return;     // guaranteed null or range check
+//    array_store_check(true);
+//    c = pop();                  // Oop to store
+//    b = pop();                  // index (already used)
+//    a = pop();                  // the array itself
+//    const TypeAryPtr* arytype = _gvn.type(a)->is_aryptr();
+//    const Type* elemtype = arytype->elem();
+//
+//    if (elemtype->isa_valuetype()) {
+//      c->as_ValueType()->store_flattened(this, a, d);
+//      break;
+//    }
+//
+//    const TypeAryPtr* adr_type = TypeAryPtr::OOPS;
+//    Node* oop = c->as_ValueType()->allocate(this)->get_oop();
+//    Node* store = store_oop_to_array(control(), a, d, adr_type, oop, elemtype->make_oopptr(), T_OBJECT,
+//                                     StoreNode::release_if_reference(T_OBJECT));
+//    break;
+//  }
   case Bytecodes::_aastore: {
     d = array_addressing(T_OBJECT, 1);
     if (stopped())  return;     // guaranteed null or range check
@@ -2251,7 +2249,6 @@
 
   case Bytecodes::_ireturn:
   case Bytecodes::_areturn:
-  case Bytecodes::_vreturn:
   case Bytecodes::_freturn:
     return_current(pop());
     break;
@@ -2406,11 +2403,11 @@
   case Bytecodes::_new:
     do_new();
     break;
-  case Bytecodes::_vdefault:
-    do_vdefault();
+  case Bytecodes::_defaultvalue:
+    do_defaultvalue();
     break;
-  case Bytecodes::_vwithfield:
-    do_vwithfield();
+  case Bytecodes::_withfield:
+    do_withfield();
     break;
 
   case Bytecodes::_jsr:
@@ -2431,14 +2428,6 @@
     do_monitor_exit();
     break;
 
-  case Bytecodes::_vunbox:
-    do_vunbox();
-    break;
-
-  case Bytecodes::_vbox:
-    do_vbox();
-    break;
-
   case Bytecodes::_breakpoint:
     // Breakpoint set concurrently to compile
     // %%% use an uncommon trap?
--- a/src/hotspot/share/opto/parse3.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/opto/parse3.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -547,84 +547,3 @@
   // - Make a fast path for small multi-arrays.  (W/ implicit init. loops.)
   // - Issue CastII against length[*] values, to TypeInt::POS.
 }
-
-void Parse::do_vbox() {
-  // Obtain target value-capable class
-  bool will_link;
-  ciInstanceKlass* dst_vcc = iter().get_klass(will_link)->as_instance_klass();
-  assert(will_link, "vbox: Target value-capable class must be loaded");
-
-  // Obtain source value type instance and type
-  const ValueTypeNode* vt = peek()->as_ValueType();
-  ciValueKlass* src_vk = vt->type()->is_valuetype()->value_klass();
-  assert(src_vk != NULL && src_vk->is_loaded() && src_vk->exact_klass(),
-         "vbox: Source class must be a value type and must be loaded and exact");
-
-  // Verify that the vcc derived from the source value klass is equal to the target vcc
-  const ciInstanceKlass* src_vcc = src_vk->vcc_klass();
-  assert(src_vcc, "vbox: Source value-capable class must not be null");
-  if (!src_vcc->equals(dst_vcc)) {
-    builtin_throw(Deoptimization::Reason_class_check);
-    assert(stopped(), "A ClassCastException must be always thrown on this path");
-    return;
-  }
-
-  // Create new object
-  pop();
-  kill_dead_locals();
-  Node* kls = makecon(TypeKlassPtr::make(dst_vcc));
-  Node* obj = new_instance(kls);
-
-  // Store all field values to the newly created object.
-  // The code below relies on the assumption that the VCC has the
-  // same memory layout as the derived value type.
-  vt->store(this, obj, obj, dst_vcc);
-
-  // Push the new object onto the stack
-  push(obj);
-}
-
-void Parse::do_vunbox() {
-  // Obtain target value klass
-  bool will_link;
-  ciValueKlass* dst_vk = iter().get_klass(will_link)->as_value_klass();
-  assert(will_link, "vunbox: Derived value type must be loaded");
-
-  // Obtain source value-capable class instance and type
-  Node* vcc = null_check(peek());
-  if (stopped()) {
-    return; // Always null
-  }
-  ciKlass* src_vcc = gvn().type(vcc)->isa_oopptr()->klass();
-  assert(src_vcc != NULL && src_vcc->is_instance_klass() && src_vcc->is_loaded(),
-         "vunbox: Source class must be an instance type and must be loaded");
-
-  // Verify that the source vcc is equal to the vcc derived from the target value klass
-  ciInstanceKlass* dst_vcc = dst_vk->vcc_klass();
-  assert(dst_vcc != NULL && dst_vcc->exact_klass(), "vunbox: Target value-capable class must not be null and exact");
-  if (!src_vcc->equals(dst_vcc)) {
-    if (src_vcc->exact_klass()) {
-      // Source vcc is exact and therefore always incompatible with dst_vcc
-      builtin_throw(Deoptimization::Reason_class_check);
-      assert(stopped(), "A ClassCastException must be always thrown on this path");
-      return;
-    } else {
-      // Emit a runtime check to verify that the dynamic type of vcc is equal to dst_vcc
-      Node* exact_vcc = vcc;
-      Node* slow_ctl  = type_check_receiver(vcc, dst_vcc, 1.0, &exact_vcc);
-      {
-        PreserveJVMState pjvms(this);
-        set_control(slow_ctl);
-        builtin_throw(Deoptimization::Reason_class_check);
-      }
-      replace_in_map(vcc, exact_vcc);
-      vcc = exact_vcc;
-    }
-  }
-
-  // Create a value type node with the corresponding type and push it onto the stack
-  pop();
-  kill_dead_locals();
-  ValueTypeNode* vt = ValueTypeNode::make_from_flattened(this, dst_vk, vcc, vcc, dst_vcc, dst_vk->first_field_offset());
-  push(vt);
-}
--- a/src/hotspot/share/opto/parseHelper.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/opto/parseHelper.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -333,8 +333,8 @@
   }
 }
 
-//------------------------------do_vdefault-------------------------------------
-void Parse::do_vdefault() {
+//------------------------------do_defaultvalue---------------------------------
+void Parse::do_defaultvalue() {
   bool will_link;
   ciValueKlass* vk = iter().get_klass(will_link)->as_value_klass();
   assert(will_link, "vdefault: typeflow responsibility");
@@ -342,8 +342,8 @@
   push(ValueTypeNode::make_default(_gvn, vk));
 }
 
-//------------------------------do_vwithfield-----------------------------------
-void Parse::do_vwithfield() {
+//------------------------------do_withfield------------------------------------
+void Parse::do_withfield() {
   bool will_link;
   ciField* field = iter().get_field(will_link);
   assert(will_link, "vdefault: typeflow responsibility");
--- a/src/hotspot/share/opto/type.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/opto/type.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -604,7 +604,8 @@
 
   TypeNarrowKlass::NULL_PTR = TypeNarrowKlass::make( TypePtr::NULL_PTR );
 
-  TypeValueTypePtr::NOTNULL = (EnableValhalla || EnableMVT) ? TypeValueTypePtr::make(TypePtr::NotNull, current->env()->___Value_klass()->as_value_klass()) : NULL;
+  // TypeValueTypePtr::NOTNULL = (EnableValhalla || EnableMVT) ? TypeValueTypePtr::make(TypePtr::NotNull, current->env()->___Value_klass()->as_value_klass()) : NULL;
+  TypeValueTypePtr::NOTNULL = NULL;
 
   mreg2type[Op_Node] = Type::BOTTOM;
   mreg2type[Op_Set ] = 0;
@@ -642,7 +643,6 @@
   TypeAryPtr::_array_body_type[T_NARROWOOP] = NULL;
   TypeAryPtr::_array_body_type[T_OBJECT]  = TypeAryPtr::OOPS;
   TypeAryPtr::_array_body_type[T_ARRAY]   = TypeAryPtr::OOPS; // arrays are stored in oop arrays
-  TypeAryPtr::_array_body_type[T_VALUETYPE] = TypeAryPtr::OOPS;
   TypeAryPtr::_array_body_type[T_VALUETYPEPTR] = NULL;
   TypeAryPtr::_array_body_type[T_BYTE]    = TypeAryPtr::BYTES;
   TypeAryPtr::_array_body_type[T_BOOLEAN] = TypeAryPtr::BYTES;  // boolean[] is a byte array
@@ -656,7 +656,8 @@
   TypeKlassPtr::OBJECT = TypeKlassPtr::make(TypePtr::NotNull, current->env()->Object_klass(), Offset(0) );
   TypeKlassPtr::OBJECT_OR_NULL = TypeKlassPtr::make(TypePtr::BotPTR, current->env()->Object_klass(), Offset(0) );
   TypeKlassPtr::BOTTOM = (EnableValhalla || EnableMVT) ? TypeKlassPtr::make(TypePtr::BotPTR, NULL, Offset(0)) : TypeKlassPtr::OBJECT_OR_NULL;
-  TypeKlassPtr::VALUE = TypeKlassPtr::make(TypePtr::NotNull, current->env()->___Value_klass(), Offset(0));
+  // TypeKlassPtr::VALUE = TypeKlassPtr::make(TypePtr::NotNull, current->env()->___Value_klass(), Offset(0));
+  TypeKlassPtr::VALUE = NULL;
 
   const Type **fi2c = TypeTuple::fields(2);
   fi2c[TypeFunc::Parms+0] = TypeInstPtr::BOTTOM; // Method*
@@ -696,7 +697,6 @@
   _const_basic_type[T_OBJECT]      = TypeInstPtr::BOTTOM;
   _const_basic_type[T_VALUETYPEPTR]= TypeInstPtr::BOTTOM;
   _const_basic_type[T_ARRAY]       = TypeInstPtr::BOTTOM; // there is no separate bottom for arrays
-  _const_basic_type[T_VALUETYPE]   = TypeInstPtr::BOTTOM;
   _const_basic_type[T_VOID]        = TypePtr::NULL_PTR;   // reflection represents void this way
   _const_basic_type[T_ADDRESS]     = TypeRawPtr::BOTTOM;  // both interpreter return addresses & random raw ptrs
   _const_basic_type[T_CONFLICT]    = Type::BOTTOM;        // why not?
@@ -714,7 +714,6 @@
   _zero_type[T_OBJECT]      = TypePtr::NULL_PTR;
   _zero_type[T_VALUETYPEPTR]= TypePtr::NULL_PTR;
   _zero_type[T_ARRAY]       = TypePtr::NULL_PTR; // null array is null oop
-  _zero_type[T_VALUETYPE]   = TypePtr::NULL_PTR;
   _zero_type[T_ADDRESS]     = TypePtr::NULL_PTR; // raw pointers use the same null
   _zero_type[T_VOID]        = Type::TOP;         // the only void value is no value at all
 
--- a/src/hotspot/share/prims/jni.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/prims/jni.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -984,9 +984,6 @@
           case obj_parm:
             get_object();
             break;
-          case valuetype_parm:
-            get_valuetype();
-            break;
           case long_parm:
             get_long();
             break;
@@ -1075,9 +1072,6 @@
           case obj_parm:
             get_object();
             break;
-          case valuetype_parm:
-            get_valuetype();
-            break;
           case long_parm:
             get_long();
             break;
--- a/src/hotspot/share/prims/methodHandles.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/prims/methodHandles.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -500,9 +500,6 @@
 static const char OBJ_SIG[] = "Ljava/lang/Object;";
 enum { OBJ_SIG_LEN = 18 };
 
-static const char VAL_SIG[] = "Qjava/lang/__Value;";
-enum { VAL_SIG_LEN = 19 };
-
 bool MethodHandles::is_basic_type_signature(Symbol* sig) {
   assert(vmSymbols::object_signature()->utf8_length() == (int)OBJ_SIG_LEN, "");
   assert(vmSymbols::object_signature()->equals(OBJ_SIG), "");
@@ -515,12 +512,6 @@
         return false;
       i += OBJ_SIG_LEN-1;  //-1 because of i++ in loop
       continue;
-    case 'Q' :
-      // only java/lang/__Value is valid here
-      if (sig->index_of_at(i, VAL_SIG, VAL_SIG_LEN) != i)
-        return false;
-      i += VAL_SIG_LEN-1;  //-1 because of i++ in loop
-      continue;
     case '(': case ')': case 'V':
     case 'I': case 'J': case 'F': case 'D':
       continue;
@@ -564,10 +555,8 @@
       if (arg_pos == keep_arg_pos) {
         buffer.write((char*) ss.raw_bytes(),
                      (int)   ss.raw_length());
-      } else if (bt == T_OBJECT || bt == T_ARRAY) {
+      } else if (bt == T_OBJECT || bt == T_ARRAY || bt == T_VALUETYPE) {
         buffer.write(OBJ_SIG, OBJ_SIG_LEN);
-      } else if (bt == T_VALUETYPE) {
-        buffer.write(VAL_SIG, VAL_SIG_LEN);
       } else {
         if (is_subword_type(bt))
           bt = T_INT;
--- a/src/hotspot/share/runtime/fieldDescriptor.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/runtime/fieldDescriptor.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -101,6 +101,7 @@
   bool is_volatile()              const    { return access_flags().is_volatile(); }
   bool is_transient()             const    { return access_flags().is_transient(); }
   bool is_flatten()               const    { return field()->is_flatten(); }
+  bool is_flattenable()           const    { return field()->is_flattenable(); }
 
   bool is_synthetic()             const    { return access_flags().is_synthetic(); }
 
--- a/src/hotspot/share/runtime/fieldType.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/runtime/fieldType.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -66,8 +66,7 @@
       // If it is an array, the type is the last character
       return (i + 1 == len);
     case 'L':
-    case 'Q':
-      // If it is an object or a value type, the last character must be a ';'
+      // If it is a class name, the last character must be a ';'
       return sig->byte_at(len - 1) == ';';
   }
 
--- a/src/hotspot/share/runtime/fieldType.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/runtime/fieldType.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -69,14 +69,6 @@
              (signature->byte_at(sig_length - 1) == ';'));
   }
 
-  static bool is_valuetype(Symbol* signature) {
-    int sig_length = signature->utf8_length();
-    // Must start with 'Q' and end with ';'
-    return (sig_length >= 2 &&
-        (signature->byte_at(0) == 'Q') &&
-        (signature->byte_at(sig_length - 1) == ';'));
-  }
-
   // MVT name mangling, VM derived value type naming Foo->Foo$Value
   static bool is_dvt_postfix(Symbol* signature);
   static char* dvt_unmangle_vcc(Symbol* signature);
--- a/src/hotspot/share/runtime/globals.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/runtime/globals.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -4129,7 +4129,7 @@
   product(size_t, BigValueTypeThreshold, 4 * BytesPerLong,                  \
           "Max value type size for buffering")                              \
                                                                             \
-  product(intx, ValueTypesBufferMaxMemory, 128,                             \
+  product(intx, ValueTypesBufferMaxMemory, 0,                               \
           "Max memory used for value types buffers (in pages)")             \
                                                                             \
   product(bool, ValueTypesThreadLocalRecycling, true,                       \
--- a/src/hotspot/share/runtime/reflection.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/runtime/reflection.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -680,14 +680,6 @@
     assert(!(host_class->is_instance_klass() &&
            InstanceKlass::cast(host_class)->is_anonymous()),
            "host_class should not be anonymous");
-
-    // For Minimal Value Types check if the field class is a value type
-    // if so check if it has a Value Capable Class that is the host class,
-    // if so use the field class the host class
-    if (field_class->is_value() &&
-        InstanceKlass::cast(field_class)->get_vcc_klass() == host_class) {
-      host_class = field_class;
-    }
   }
   if (host_class == field_class) {
     return true;
--- a/src/hotspot/share/runtime/sharedRuntime.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/runtime/sharedRuntime.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -2691,7 +2691,7 @@
       if (!method->is_static()) {  // Pass in receiver first
         if (holder->is_value()) {
           ValueKlass* vk = ValueKlass::cast(holder);
-          if (!ValueTypePassFieldsAsArgs || vk->is__Value()) {
+          if (!ValueTypePassFieldsAsArgs) {
             // If we don't pass value types as arguments or if the holder of
             // the method is __Value, we must pass a reference.
             sig_extended.push(SigEntry(T_VALUETYPEPTR));
@@ -2706,7 +2706,7 @@
       for (SignatureStream ss(method->signature()); !ss.at_return_type(); ss.next()) {
         if (ss.type() == T_VALUETYPE) {
           Symbol* name = ss.as_symbol(CHECK_NULL);
-          if (!ValueTypePassFieldsAsArgs || (name == vmSymbols::java_lang____Value())) {
+          if (!ValueTypePassFieldsAsArgs) {
             sig_extended.push(SigEntry(T_VALUETYPEPTR));
           } else {
             // Method handle intrinsics with a __Value argument may be created during
@@ -2951,7 +2951,6 @@
             Handle protection_domain(THREAD, method->method_holder()->protection_domain());
             Klass* k = ss.as_klass(class_loader, protection_domain, SignatureStream::ReturnNull, THREAD);
             assert(k != NULL && !HAS_PENDING_EXCEPTION, "can't resolve klass");
-            assert(ValueKlass::cast(k)->is__Value(), "other values not supported");
           }
 #endif
           bt = T_VALUETYPEPTR;
@@ -3051,7 +3050,6 @@
     case 'S': sig_bt[cnt++] = T_SHORT;   break;
     case 'Z': sig_bt[cnt++] = T_BOOLEAN; break;
     case 'V': sig_bt[cnt++] = T_VOID;    break;
-    case 'Q':
     case 'L':                   // Oop
       while (*s++ != ';');   // Skip signature
       sig_bt[cnt++] = T_OBJECT;
@@ -3061,7 +3059,7 @@
         while (*s >= '0' && *s <= '9') s++;
       } while (*s++ == '[');   // Nested arrays?
       // Skip element type
-      if (s[-1] == 'L' || s[-1] == 'Q')
+      if (s[-1] == 'L')
         while (*s++ != ';'); // Skip signature
       sig_bt[cnt++] = T_ARRAY;
       break;
@@ -3505,7 +3503,7 @@
     methodHandle callee = inv.static_target(thread);
     assert(!thread->has_pending_exception(), "call resolution should work");
     ValueKlass* verif_vk2 = callee->returned_value_type(thread);
-    assert(verif_vk == verif_vk2 || verif_vk2->is__Value(), "Bad value klass");
+    assert(verif_vk == verif_vk2, "Bad value klass");
 #endif
   }
   JRT_BLOCK_END;
--- a/src/hotspot/share/runtime/signature.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/runtime/signature.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -40,7 +40,7 @@
 // Signature  = "(" {Parameter} ")" ReturnType.
 // Parameter  = FieldType.
 // ReturnType = FieldType | "V".
-// FieldType  = "B" | "C" | "D" | "F" | "I" | "J" | "S" | "Z" | "L" ClassName ";" | "Q" ValueTypeName ";" | "[" FieldType.
+// FieldType  = "B" | "C" | "D" | "F" | "I" | "J" | "S" | "Z" | "L" ClassName ";" | "[" FieldType.
 // ClassName  = string.
 
 
@@ -97,15 +97,6 @@
       if (_parameter_index < 0 ) _return_type = T_OBJECT;
       size = T_OBJECT_size;
       break;
-    case 'Q':
-      { int begin = ++_index;
-        Symbol* sig = _signature;
-        while (sig->byte_at(_index++) != ';') ;
-        do_valuetype(begin, _index);
-      }
-      if (_parameter_index < 0 ) _return_type = T_VALUETYPE;
-      size = T_VALUETYPE_size;
-      break;
     case '[':
       { int begin = ++_index;
         skip_optional_size();
@@ -114,7 +105,7 @@
           _index++;
           skip_optional_size();
         }
-        if (sig->byte_at(_index) == 'L' || sig->byte_at(_index) == 'Q') {
+        if (sig->byte_at(_index) == 'L') {
           while (sig->byte_at(_index++) != ';') ;
         } else {
           _index++;
@@ -201,10 +192,6 @@
         do_object(0, 0);
         _parameter_index += T_OBJECT_size;
         break;
-      case valuetype_parm:
-        do_valuetype(0,0);
-        _parameter_index += T_VALUETYPE_size;
-        break;
       case long_parm:
         do_long();
         _parameter_index += T_LONG_size;
@@ -255,7 +242,6 @@
           _index++;
         }
         break;
-      case 'Q':
       case 'L':
         {
           while (sig->byte_at(_index++) != ';') ;
@@ -269,7 +255,7 @@
             _index++;
             skip_optional_size();
           }
-          if (sig->byte_at(_index) == 'L' || sig->byte_at(_index) == 'Q') {
+          if (sig->byte_at(_index) == 'L') {
             while (sig->byte_at(_index++) != ';') ;
           } else {
             _index++;
@@ -333,12 +319,6 @@
       while (sig->byte_at(_end++) != ';');
       break;
     }
-    case 'Q': {
-      _type = T_VALUETYPE;
-      Symbol* sig = _signature;
-      while (sig->byte_at(_end++) != ';');
-      break;
-    }
     case '[': {
       _type = T_ARRAY;
       Symbol* sig = _signature;
@@ -390,7 +370,7 @@
     begin++;
     end--;
     if (begin == end) {
-      return (_type == T_OBJECT) ? vmSymbols::java_lang_Object() : vmSymbols::java_lang____Value();
+      return vmSymbols::java_lang_Object();
     }
   }
 
@@ -433,7 +413,7 @@
     begin++;
     end--;
     if (begin == end) {
-      return (_type == T_OBJECT) ? vmSymbols::java_lang_Object() : vmSymbols::java_lang____Value();
+      return vmSymbols::java_lang_Object();
     }
   }
 
@@ -512,7 +492,6 @@
     case 'B': case 'C': case 'D': case 'F': case 'I':
     case 'J': case 'S': case 'Z': case 'V':
       return index + 1;
-    case 'Q':
     case 'L':
       for (index = index + 1; index < limit; ++index) {
         char c = type[index];
--- a/src/hotspot/share/runtime/signature.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/runtime/signature.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -78,8 +78,7 @@
       float_parm           = 7,
       double_parm          = 8,
       obj_parm             = 9,
-      valuetype_parm       = 10,
-      done_parm            = 11,  // marker for end of parameters
+      done_parm            = 10,  // marker for end of parameters
 
     // max parameters is wordsize minus
     //    The sign bit, termination field, the result and static bit fields
@@ -116,7 +115,6 @@
   // Object types (begin indexes the first character of the entry, end indexes the first character after the entry)
   virtual void do_object(int begin, int end) = 0;
   virtual void do_array (int begin, int end) = 0;
-  virtual void do_valuetype(int begin, int end) = 0;
 
   static bool is_static(uint64_t fingerprint) {
     assert(fingerprint != (uint64_t)CONST64(-1), "invalid fingerprint");
@@ -146,7 +144,6 @@
   void do_void()                       { type_name("void"    ); }
   void do_object(int begin, int end)   { type_name("jobject" ); }
   void do_array (int begin, int end)   { type_name("jobject" ); }
-  void do_valuetype(int begin, int end){ type_name("jvaluetype"); }
 
  public:
   SignatureTypeNames(Symbol* signature) : SignatureIterator(signature) {}
@@ -175,7 +172,6 @@
   void do_void  ()                     { set(T_VOID_size   , T_VOID   ); }
   void do_object(int begin, int end)   { set(T_OBJECT_size , T_OBJECT ); }
   void do_array (int begin, int end)   { set(T_ARRAY_size  , T_ARRAY  ); }
-  void do_valuetype(int begin, int end){ set(T_VALUETYPE_size, T_VALUETYPE); }
 
  public:
   SignatureInfo(Symbol* signature) : SignatureIterator(signature) {
@@ -242,7 +238,6 @@
 
   void do_object(int begin, int end)  { _fingerprint |= (((uint64_t)obj_parm) << _shift_count); _shift_count += parameter_feature_size; }
   void do_array (int begin, int end)  { _fingerprint |= (((uint64_t)obj_parm) << _shift_count); _shift_count += parameter_feature_size; }
-  void do_valuetype(int begin, int end) { _fingerprint |= (((uint64_t)valuetype_parm) << _shift_count); _shift_count += parameter_feature_size; }
 
   void do_void()    { ShouldNotReachHere(); }
 
--- a/src/hotspot/share/utilities/accessFlags.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/utilities/accessFlags.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -121,6 +121,7 @@
   bool is_abstract    () const         { return (_flags & JVM_ACC_ABSTRACT    ) != 0; }
   bool is_strict      () const         { return (_flags & JVM_ACC_STRICT      ) != 0; }
   bool is_value_type  () const         { return (_flags & JVM_ACC_VALUE       ) != 0; }
+  bool is_flattenable () const         { return (_flags & JVM_ACC_FLATTENABLE ) != 0; }
 
   // Attribute flags
   bool is_synthetic   () const         { return (_flags & JVM_ACC_SYNTHETIC   ) != 0; }
--- a/src/hotspot/share/utilities/globalDefinitions.cpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/utilities/globalDefinitions.cpp	Thu Feb 15 15:51:07 2018 -0500
@@ -94,7 +94,7 @@
       num_type_chars++;
     }
   }
-  assert(num_type_chars == 12, "must have tested the right number of mappings");
+  assert(num_type_chars == 11, "must have tested the right number of mappings");
   assert(char2type(0) == T_ILLEGAL, "correct illegality");
 
   {
@@ -179,12 +179,11 @@
   }
   _type2aelembytes[T_OBJECT] = heapOopSize;
   _type2aelembytes[T_ARRAY]  = heapOopSize;
-  _type2aelembytes[T_VALUETYPE] = heapOopSize;
 }
 
 
 // Map BasicType to signature character
-char type2char_tab[T_CONFLICT+1]={ 0, 0, 0, 0, 'Z', 'C', 'F', 'D', 'B', 'S', 'I', 'J', 'L', '[', 'Q', 'V', 0, 0, 0, 0, 0, 0};
+char type2char_tab[T_CONFLICT+1]={ 0, 0, 0, 0, 'Z', 'C', 'F', 'D', 'B', 'S', 'I', 'J', 'L', '[', 'V', 0, 0, 0, 0, 0, 0};
 
 // Map BasicType to Java type name
 const char* type2name_tab[T_CONFLICT+1] = {
@@ -199,7 +198,6 @@
   "long",
   "object",
   "array",
-  "valuetype",
   "void",
   "*address*",
   "*narrowoop*",
@@ -220,7 +218,7 @@
 }
 
 // Map BasicType to size in words
-int type2size[T_CONFLICT+1]={ -1, 0, 0, 0, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 0, 1, 1, 1, 1, 1, -1};
+int type2size[T_CONFLICT+1]={ -1, 0, 0, 0, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 0, 1, 1, 1, 1, 1, -1};
 
 BasicType type2field[T_CONFLICT+1] = {
   (BasicType)0,            // 0,
@@ -237,7 +235,6 @@
   T_LONG,                  // T_LONG     = 11,
   T_OBJECT,                // T_OBJECT   = 12,
   T_OBJECT,                // T_ARRAY    = 13,
-  T_VALUETYPE,             // T_VALUETYPE = 14
   T_VOID,                  // T_VOID     = 15,
   T_ADDRESS,               // T_ADDRESS  = 16,
   T_NARROWOOP,             // T_NARROWOOP= 17,
@@ -263,7 +260,6 @@
   T_LONG,    // T_LONG     = 11,
   T_OBJECT,  // T_OBJECT   = 12,
   T_OBJECT,  // T_ARRAY    = 13,
-  T_VALUETYPE, // T_VALUETYPE = 14
   T_VOID,    // T_VOID     = 15,
   T_ADDRESS, // T_ADDRESS  = 16,
   T_NARROWOOP, // T_NARROWOOP  = 17,
@@ -289,7 +285,6 @@
   T_LONG_aelem_bytes,        // T_LONG     = 11,
   T_OBJECT_aelem_bytes,      // T_OBJECT   = 12,
   T_ARRAY_aelem_bytes,       // T_ARRAY    = 13,
-  T_VALUETYPE_aelem_bytes,   // T_VALUETYPE = 14
   0,                         // T_VOID     = 15,
   T_OBJECT_aelem_bytes,      // T_ADDRESS  = 16,
   T_NARROWOOP_aelem_bytes,   // T_NARROWOOP= 17,
--- a/src/hotspot/share/utilities/globalDefinitions.hpp	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/hotspot/share/utilities/globalDefinitions.hpp	Thu Feb 15 15:51:07 2018 -0500
@@ -583,15 +583,15 @@
   T_LONG        = 11,
   T_OBJECT      = 12,
   T_ARRAY       = 13,
-  T_VALUETYPE   = 14,
-  T_VOID        = 15,
-  T_ADDRESS     = 16,
-  T_NARROWOOP   = 17,
-  T_METADATA    = 18,
-  T_NARROWKLASS = 19,
-  T_VALUETYPEPTR= 20, // the compiler needs a way to identify buffered values
-  T_CONFLICT    = 21, // for stack value type with conflicting contents
-  T_ILLEGAL     = 99
+  T_VOID        = 14,
+  T_ADDRESS     = 15,
+  T_NARROWOOP   = 16,
+  T_METADATA    = 17,
+  T_NARROWKLASS = 18,
+  T_VALUETYPEPTR= 19, // the compiler needs a way to identify buffered values
+  T_CONFLICT    = 20, // for stack value type with conflicting contents
+  T_ILLEGAL     = 99,
+  T_VALUETYPE   = 100  // temporary hack for the transition for VVT to LWVT
 };
 
 inline bool is_java_primitive(BasicType t) {
@@ -625,7 +625,6 @@
   case 'V': return T_VOID;
   case 'L': return T_OBJECT;
   case '[': return T_ARRAY;
-  case 'Q': return T_VALUETYPE;
   }
   return T_ILLEGAL;
 }
@@ -680,11 +679,9 @@
 #ifdef _LP64
   T_OBJECT_aelem_bytes      = 8,
   T_ARRAY_aelem_bytes       = 8,
-  T_VALUETYPE_aelem_bytes   = 8,
 #else
   T_OBJECT_aelem_bytes      = 4,
   T_ARRAY_aelem_bytes       = 4,
-  T_VALUETYPE_aelem_bytes   = 4,
 #endif
   T_NARROWOOP_aelem_bytes   = 4,
   T_NARROWKLASS_aelem_bytes = 4,
@@ -786,10 +783,8 @@
   ftos = 6,             // float tos cached
   dtos = 7,             // double tos cached
   atos = 8,             // object cached
-  qtos = 9,             // value type cached
-  vtos = 10,            // tos not cached,
+  vtos = 9,             // tos not cached,
   number_of_states,
-  ptos = 12,            // polymorphic tos cache (atos or qtos)
   ilgl                  // illegal state: should not occur
 };
 
@@ -804,9 +799,9 @@
     case T_LONG   : return ltos;
     case T_FLOAT  : return ftos;
     case T_DOUBLE : return dtos;
-    case T_VALUETYPE : return qtos;
     case T_VOID   : return vtos;
-    case T_ARRAY  : // fall through
+    case T_VALUETYPE: // fall through
+    case T_ARRAY  :   // fall through
     case T_OBJECT : return atos;
     default       : return ilgl;
   }
@@ -823,7 +818,6 @@
     case ftos : return T_FLOAT;
     case dtos : return T_DOUBLE;
     case atos : return T_OBJECT;
-    case qtos : return T_VALUETYPE;
     case vtos : return T_VOID;
     default   : return T_ILLEGAL;
   }
--- a/src/java.base/share/native/include/classfile_constants.h.template	Wed Feb 14 11:08:42 2018 +0530
+++ b/src/java.base/share/native/include/classfile_constants.h.template	Thu Feb 15 15:51:07 2018 -0500
@@ -49,6 +49,7 @@
     JVM_ACC_TRANSIENT     = 0x0080,
     JVM_ACC_VARARGS       = 0x0080,
     JVM_ACC_VALUE         = 0x0100,
+    JVM_ACC_FLATTENABLE   = 0x0100,
     JVM_ACC_NATIVE        = 0x0100,
     JVM_ACC_INTERFACE     = 0x0200,
     JVM_ACC_ABSTRACT      = 0x0400,
--- a/test/hotspot/jtreg/TEST.groups	Wed Feb 14 11:08:42 2018 +0530
+++ b/test/hotspot/jtreg/TEST.groups	Thu Feb 15 15:51:07 2018 -0500
@@ -47,6 +47,12 @@
   runtime/valhalla \
   compiler/valhalla
 
+hotspot_valhalla_runtime = \
+  runtime/valhalla
+
+hotspot_valhalla_1 = \
+  runtime/valhalla/valuetypes/ValueTypeCreation.java
+
 hotspot_misc = \
   / \
  -applications \
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/DeriveValueTypeCreation.java	Wed Feb 14 11:08:42 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,316 +0,0 @@
-/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package runtime.valhalla.valuetypes;
-
-import jdk.incubator.mvt.ValueType;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import static java.lang.reflect.Modifier.*;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import jdk.experimental.bytecode.*;
-
-import jdk.internal.org.objectweb.asm.*;
-import static jdk.internal.org.objectweb.asm.Opcodes.*;
-
-import static jdk.test.lib.Asserts.*;
-
-/*
- * @test DeriveValueTypeCreation
- * @summary Derive Value Type creation test
- * @library /test/lib
- * @compile DeriveValueTypeCreation.java
- * @modules java.base/jdk.experimental.bytecode
- *          java.base/jdk.internal.org.objectweb.asm
- *          jdk.incubator.mvt
- * @build runtime.valhalla.valuetypes.ValueCapableClass
- * @run main/othervm -Xint -XX:+EnableMVT runtime.valhalla.valuetypes.DeriveValueTypeCreation
- * @run main/othervm -Xcomp -XX:+EnableMVT runtime.valhalla.valuetypes.DeriveValueTypeCreation
- */
-public class DeriveValueTypeCreation {
-
-    public static final String VCC_CLASSNAME = "runtime.valhalla.valuetypes.ValueCapableClass";
-    public static final String DVT_SUFFIX = "$Value";
-
-    public static final int TEST_DEF_CLASS_ACCESS = ACC_SUPER | ACC_PUBLIC | ACC_FINAL;
-    public static final int TEST_DEF_FIELD_ACCESS = ACC_PUBLIC | ACC_FINAL;
-    public static final String OBJECT_CLASS_DESC  = "java/lang/Object";
-
-    public static void main(String[] args) {
-        DeriveValueTypeCreation test = new DeriveValueTypeCreation();
-        test.run();
-    }
-
-    public void run() {
-        loadAndRunTest();
-        notValueCapableClasses();
-        loadDvtFirst();
-    }
-
-    void loadAndRunTest() {
-        Class<?> clazz = null;
-        try {
-            clazz = Class.forName(VCC_CLASSNAME, true, getClass().getClassLoader());
-            clazz.getDeclaredMethod("test").invoke(null);
-        }
-        catch (ClassNotFoundException cnfe) { fail("VCC class missing", cnfe); }
-        catch (NoSuchMethodException nsme) { fail("VCC test method missing", nsme); }
-        catch (Throwable t) { fail("Failed to invoke VCC.test()", t); }
-
-        checkValueCapableClass(clazz);
-    }
-
-    void checkValueCapableClass(Class<?> clazz) {
-        if (!ValueType.classHasValueType(clazz)) {
-            fail("!classHasValueType: " + clazz);
-        }
-
-        ValueType<?> vt = ValueType.forClass(clazz);
-        if (vt == null) {
-            fail("ValueType.forClass failed");
-        }
-
-        System.out.println("ValueType: " + vt);
-
-        if (vt.boxClass() != clazz) {
-            fail("ValueType.boxClass() failed");
-        }
-
-        // DVT class matches our expectations for the current implementation...
-        Class<?> vtClass = vt.valueClass();
-        if (!vtClass.getName().equals(clazz.getName() + DVT_SUFFIX)) {
-            fail("ValueType.valueClass() failed");
-        }
-        if (!vtClass.getSuperclass().getName().equals("java.lang.__Value")) {
-            fail("ValueType.valueClass() isn't a Value Type class");
-        }
-
-        // Exercise "Class.getSimpleName()", we've cause problems with it before
-        String sn = vtClass.getSimpleName();
-        System.out.println("SimpleName: " + sn);
-
-        if (clazz.getClassLoader() != vtClass.getClassLoader()) {
-            fail("ClassLoader mismatch");
-        }
-        if (clazz.getProtectionDomain() != vtClass.getProtectionDomain()) {
-            fail("ProtectionDomain mismatch");
-        }
-    }
-
-    void notValueCapableClasses() {
-        // First a control test to check createTestVccClass is working
-        try {
-            Class<?> cls = createTestVccClass("Control_Case_is_a_VCC", TEST_DEF_CLASS_ACCESS, OBJECT_CLASS_DESC, "I", TEST_DEF_FIELD_ACCESS);
-            checkValueCapableClass(cls);
-        }
-        catch (Exception e) {
-            fail("Control test failed", e);
-        }
-
-        testFailCase("Not_a_final_class", ACC_SUPER | ACC_PUBLIC, OBJECT_CLASS_DESC, "I", TEST_DEF_FIELD_ACCESS, "not a final class");
-        testFailCase("No_fields", TEST_DEF_CLASS_ACCESS, OBJECT_CLASS_DESC, null, TEST_DEF_FIELD_ACCESS, "has no instance fields");
-        testFailCase("Not_final_field", TEST_DEF_CLASS_ACCESS, OBJECT_CLASS_DESC, "I", ACC_PUBLIC, "contains non-final instance field");
-        testFailCase("Super_not_Object", TEST_DEF_CLASS_ACCESS, "java/lang/Throwable", "I", TEST_DEF_FIELD_ACCESS, "does not derive from Object");
-    }
-
-    void testFailCase(String clsName,
-                      int klassAccess,
-                      String superKlass,
-                      String fieldType,
-                      int fieldAccess,
-                      String errMsgRequired) {
-        try {
-            createTestVccClass(clsName, klassAccess, superKlass, fieldType, fieldAccess);
-            fail(clsName + " : failed to fail with Error");
-        }
-        catch (ClassNotFoundException cnfe) {
-            fail(clsName + " : Unexpected ClassNotFoundException", cnfe);
-        }
-        catch (Error err) {
-            if (!err.getMessage().contains(errMsgRequired)) {
-                fail(clsName + " : Not the error we were looking for", err);
-            }
-        }
-    }
-
-    byte[] createTestVccClassBytes(String name,
-                                boolean vccAnnotation) {
-        return createTestVccClassBytes(name, TEST_DEF_CLASS_ACCESS, vccAnnotation, OBJECT_CLASS_DESC, "I", TEST_DEF_FIELD_ACCESS);
-    }
-
-    byte[] createTestVccClassBytes(String name,
-                                int klassAccess,
-                                String superKlass,
-                                String fieldType,
-                                int fieldAccess)  {
-        return createTestVccClassBytes(name, klassAccess, true, superKlass, fieldType, fieldAccess);
-    }
-
-    byte[] createTestVccClassBytes(String name,
-                                int klassAccess,
-                                boolean vccAnnotation,
-                                String superKlass,
-                                String fieldType,
-                                int fieldAccess)  {
-        ClassWriter cw = new ClassWriter(0);
-        cw.visit(52, klassAccess, name, null, superKlass, null);
-        if (vccAnnotation ) {
-            cw.visitAnnotation("Ljdk/incubator/mvt/ValueCapableClass;", true);
-        }
-        if (fieldType != null) {
-            cw.visitField(fieldAccess, "x", fieldType, null, null);
-        }
-        cw.visitEnd();
-        return cw.toByteArray();
-    }
-
-    Class<?> createTestVccClass(String name,
-                             int klassAccess,
-                             String superKlass,
-                             String fieldType,
-                             int fieldAccess) throws ClassNotFoundException {
-        return new TestClassLoader(name,
-                                   createTestVccClassBytes(name, klassAccess, superKlass, fieldType, fieldAccess)).loadClass(name);
-    }
-
-    class TestClassLoader extends ClassLoader {
-
-        HashMap<String, byte[]> namedBytes = new HashMap<>();
-        ArrayList<String> findNames = new ArrayList<String>();
-
-        TestClassLoader() {}
-        TestClassLoader(String name, byte[] classBytes) {
-            addNamedBytes(name, classBytes);
-        }
-
-        void addNamedBytes(String name, byte[] classBytes) {
-            namedBytes.put(name, classBytes);
-        }
-
-        @Override
-        public Class findClass(String name) throws ClassNotFoundException {
-            byte[] classBytes = null;
-            synchronized (findNames) {
-                findNames.add(name);
-                classBytes = namedBytes.get(name);
-            }
-            if (classBytes != null) {
-                return defineClass(name, classBytes, 0, classBytes.length);
-            }
-            throw new ClassNotFoundException(name);
-        }
-
-        public ArrayList<String> getFindNames() {
-            return findNames;
-        }
-    }
-
-    void loadDvtFirst() {
-        try {
-            loadDvtFirstNoVcc();
-            loadDvtFirstNotVcc();
-            loadDvtFirstBadVcc();
-            loadDvtFirstVcc();
-        } catch (Throwable t) {
-            fail("loadDvtFirst failed", t);
-        }
-    }
-
-    void loadDvtFirstNoVcc() throws Throwable {
-        String vccName = "TestNoVcc";
-        try {
-            newDvtUserInstance(vccName, null, false);
-        } catch (NoClassDefFoundError ncdfe) {}
-        try {
-            newDvtUserInstance(vccName, null, true);
-        } catch (NoClassDefFoundError ncdfe) {}
-    }
-
-    void loadDvtFirstNotVcc() throws Throwable {
-        String vccName = "TestNotVcc";
-        byte[] vccBytes = createTestVccClassBytes(vccName, false);
-        try {
-            newDvtUserInstance(vccName, vccBytes, false);
-        } catch (NoClassDefFoundError ncdfe) {}
-        try {
-            newDvtUserInstance(vccName, vccBytes, true);
-        } catch (NoClassDefFoundError ncdfe) {}
-    }
-
-    void loadDvtFirstBadVcc() throws Throwable {
-        String vccName = "TestBadVcc";
-        byte[] vccBytes = createTestVccClassBytes(vccName, TEST_DEF_CLASS_ACCESS,
-                                                  true, OBJECT_CLASS_DESC, "I",
-                                                  ACC_PUBLIC);
-        try {
-            newDvtUserInstance(vccName, vccBytes, false);
-        } catch (IncompatibleClassChangeError icce) {}
-        try {
-            newDvtUserInstance(vccName, vccBytes, true);
-        } catch (IncompatibleClassChangeError icce) {}
-    }
-
-    void loadDvtFirstVcc() throws Throwable {
-        String vccName = "TestValidVcc";
-        byte[] vccBytes = createTestVccClassBytes(vccName, TEST_DEF_CLASS_ACCESS,
-                                                  true, OBJECT_CLASS_DESC, "I",
-                                                  TEST_DEF_FIELD_ACCESS);
-        newDvtUserInstance(vccName, vccBytes, false);
-        newDvtUserInstance(vccName, vccBytes, true);
-    }
-
-    void newDvtUserInstance(String vccName, byte[] vccBytes, boolean withField) throws Throwable {
-        TestClassLoader cl = new TestClassLoader();
-        if (vccBytes != null) {
-            cl.addNamedBytes(vccName, vccBytes);
-        }
-        String dvtUserName = "UseValidDvt";
-        String dvtName = vccName + DVT_SUFFIX;
-        String dvtFieldDesc = "Q" + dvtName + ";";
-        String dvtClassDesc = ";" + dvtFieldDesc;
-        byte[] classBytes = createTestDvtUserClassBytes(dvtUserName, dvtClassDesc, (withField) ? dvtFieldDesc : null);
-        cl.addNamedBytes(dvtUserName, classBytes);
-        try {
-            Class.forName(dvtUserName, true, cl).getDeclaredConstructor().newInstance();
-        } catch (InvocationTargetException ite) { throw ite.getTargetException(); }
-    }
-
-    byte[] createTestDvtUserClassBytes(String className, String dvtDesc, String dvtFieldDesc) {
-        BasicClassBuilder builder = new BasicClassBuilder(className, 53, 1)
-            .withFlags(Flag.ACC_PUBLIC)
-            .withSuperclass("java/lang/Object")
-            .withMethod("<init>", "()V", M ->
-                M.withFlags(Flag.ACC_PUBLIC).withCode(TypedCodeBuilder::new, C ->
-                    C
-                    .load(0).invokespecial("java/lang/Object", "<init>", "()V", false)
-                    .iconst_1().anewarray(dvtDesc).pop()
-                    .return_()));
-        if (dvtFieldDesc != null) {
-            builder.withField("dvtField", dvtFieldDesc);
-        }
-        return builder.build();
-    }
-}
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/Empty.java	Wed Feb 14 11:08:42 2018 +0530
+++ b/test/hotspot/jtreg/runtime/valhalla/valuetypes/Empty.java	Thu Feb 15 15:51:07 2018 -0500
@@ -39,6 +39,9 @@
  * @summary Test empty value type
  * @compile -XDenableValueTypes Empty.java
  * @run main/othervm -Xint -XX:+EnableValhalla runtime.valhalla.valuetypes.Empty
+ */
+
+/*
  * @run main/othervm -Xcomp -XX:+EnableValhalla runtime.valhalla.valuetypes.Empty
  */
 public class Empty {
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/MVTCombo.java	Wed Feb 14 11:08:42 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,412 +0,0 @@
-/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package runtime.valhalla.valuetypes;
-
-import javax.tools.JavaFileObject;
-
-import jdk.test.lib.combo.ComboInstance;
-import jdk.test.lib.combo.ComboParameter;
-import jdk.test.lib.combo.ComboTask.Result;
-import jdk.test.lib.combo.ComboTestHelper;
-import jdk.test.lib.combo.ComboTestHelper.ArrayDimensionKind;
-import jdk.incubator.mvt.ValueType;
-
-import java.lang.invoke.MethodHandle;
-import java.lang.invoke.MethodHandles;
-import static java.lang.invoke.MethodType.methodType;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.stream.Stream;
-
-/**
- * Test combinations of value type field layouts.
- *
- * Testing all permutations of all 8 primitive types and a reference type is
- * prohibitive both in terms of resource usage on testing infrastructure, and
- * development time. Sanity or "check-in" level testing should be in the order
- * of seconds in terms of wall-clock execution time.
- *
- * ### Combinations vs Permutations
- *
- * For a given number of fields, or "set of cardinality 'K'" ("arity" in code
- * here), of a set of "N" types ("BasicType"), the number of test cases can be
- * expressed as:
- *
- * Combinations: "(N + K - 1) ! / K ! (N - 1)!", for K=4, N=9: test cases =  496
- * Permutations: "N ^ K",                        for K=4, N=9: test cases = 6561
- *
- * Given the knowledge that the VM always reorders field declarations to suit
- * the given hardware, order of fields doesn't actually matter. I.e. for
- * N={int, long}, useful test cases are:
- *
- *  Test-0: {int , int}
- *  Test-1: {int , long}
- *  Test-2: {long, long}
- *
- * Where as {long, int} is unnecessary given "Test-1".
- *
- * # TLDR; Combinations give considerable savings.
- *
- * ### Maintain the ability to repoduce single test case
- *
- * Given the large number of test cases, ensure this class is always capable of
- * reporting the specific test case when something goes wrong, and allow running
- * of that single test case to enable efficent debugging.
- *
- * Note: upon crash the generated test class should be present in $CWD/Test.class
- */
-public class MVTCombo extends ComboInstance<MVTCombo> {
-
-    // Set of fields types to test
-    enum BasicType implements ComboParameter {
-        BOOLEAN(Boolean.TYPE),
-        BYTE(Byte.TYPE),
-        CHAR(Character.TYPE),
-        SHORT(Short.TYPE),
-        FLOAT(Float.TYPE),
-        DOUBLE(Double.TYPE),
-        INT(Integer.TYPE),
-        LONG(Long.TYPE),
-        STRING(String.class);
-
-        // Reduced set of 'N' types for large number of fields ('K')
-        public static final BasicType[] REDUCED_SET = new BasicType[] {
-            INT,    // Single slot
-            DOUBLE, // Double slot FP
-            STRING  // Reference
-        };
-
-        Class<?> clazz;
-
-        BasicType(Class<?> clazz) {
-            this.clazz = clazz;
-        }
-
-        @Override
-        public String expand(String optParameter) {
-            if (optParameter == null) {
-                return clazz.getName();
-            } else if (optParameter.startsWith("FROM_INT_")) {
-                String varName = optParameter.substring(9);
-                switch (this) {
-                case BOOLEAN:
-                    return varName + " == 0 ? false : true";
-                case STRING:
-                    return "String.valueOf(" + varName + ")";
-                default:
-                    return "(" + clazz.getName() + ")" + varName;
-                }
-            } else if (optParameter.startsWith("EQUALS_")) {
-                String varName = "f_" + optParameter.substring(7);
-                switch (this) {
-                case STRING:
-                    return "this." + varName + ".equals(that." + varName + ")";
-                default:
-                    return "this." + varName + " == that." + varName;
-                }
-            } else throw new IllegalStateException("optParameter=" + optParameter);
-        }
-    }
-
-    // Nof fields to test
-    static class Arity implements ComboParameter {
-
-        int arity;
-        int maxArity;
-
-        Arity(int arity, int maxArity) {
-            this.arity = arity;
-            this.maxArity = maxArity;
-        }
-
-        @Override
-        public String expand(String optParameter) {
-            for (Snippet s : Snippet.values()) {
-                if (s.name().equals(optParameter)) {
-                    return s.expand(arity);
-                }
-            }
-            throw new IllegalStateException("Cannot get here!");
-        }
-
-        public String toString() { return "Arity " + arity + "/" + maxArity; }
-
-        // Produce 1..K arity
-        public static Arity[] values(int maxArity) {
-            Arity[] vals = new Arity[maxArity];
-            for (int i = 0; i < maxArity; i++) {
-                vals[i] = new Arity(i + 1, maxArity);
-            }
-            return vals;
-        }
-    }
-
-    enum Snippet {
-        FIELD_DECL("public final #{TYPE[#IDX]} f_#IDX;", "\n    "),
-        FIELD_ASSIGN("this.f_#IDX = f_#IDX;", "\n        "),
-        FIELD_EQUALS("if (!(#{TYPE[#IDX].EQUALS_#IDX})) return false;", "\n        "),
-        CONSTR_FORMALS("#{TYPE[#IDX]} f_#IDX", ","),
-        CONSTR_ACTUALS("f_#IDX", ","),
-        CONSTR_ACTUALS_INDEXED("#{TYPE[#IDX].FROM_INT_INDEX}", ",");
-
-        String snippetStr;
-        String sep;
-
-        Snippet(String snippetStr, String sep) {
-            this.snippetStr = snippetStr;
-            this.sep = sep;
-        }
-
-        String expand(int arity) {
-            StringBuilder buf = new StringBuilder();
-            String tempSep = "";
-            for (int i = 0 ; i < arity ; i++) {
-                buf.append(tempSep);
-                buf.append(snippetStr.replaceAll("#IDX", String.valueOf(i)));
-                tempSep = sep;
-            }
-            return buf.toString();
-        }
-    }
-
-    public static final String VCC_TEMPLATE =
-        "@jdk.incubator.mvt.ValueCapableClass\n" +
-        "public final class Test {\n\n" +
-        "    // Declare fields...\n" +
-        "    #{ARITY.FIELD_DECL}\n" +
-        "    // Private Constructor...\n" +
-        "    private Test(#{ARITY.CONSTR_FORMALS}) {\n" +
-        "        #{ARITY.FIELD_ASSIGN}\n" +
-        "    }\n" +
-        "    public boolean equals(Object o) {\n" +
-        "        Test that = (Test) o;\n" +
-        "        #{ARITY.FIELD_EQUALS}\n" +
-        "        return true;\n" +
-        "    }\n" +
-        "    // Public factory method\n" +
-        "    public static Test create(#{ARITY.CONSTR_FORMALS}) {\n" +
-        "        return new Test(#{ARITY.CONSTR_ACTUALS});\n" +
-        "    }\n" +
-        "    // Public indexed test case factory method\n" +
-        "    public static Test createIndexed(int INDEX) {\n" +
-        "        return new Test(#{ARITY.CONSTR_ACTUALS_INDEXED});\n" +
-        "    }\n" +
-        "}\n";
-
-    public static void runTests(boolean reduceTypes, int nofFields, int specificTestCase) throws Exception {
-        ComboTestHelper<MVTCombo> test = new ComboTestHelper<MVTCombo>()
-            .withDimension("ARITY", (x, expr) -> x.setArity(expr), Arity.values(nofFields))
-            .withArrayDimension("TYPE",
-                                (x, t, idx) -> x.basicTypes[idx] = t,
-                                nofFields,
-                                ArrayDimensionKind.COMBINATIONS,
-                                reduceTypes ? BasicType.REDUCED_SET : BasicType.values());
-        if (specificTestCase == -1) {
-            test.withFilter(MVTCombo::redundantFilter);
-        } else {
-            test.withFilter((x)->test.info().getComboCount() == specificTestCase);
-        }
-        test.run(MVTCombo::new);
-    }
-
-    public static final String ARG_REDUCE_TYPES = "-reducetypes";
-
-    // main "-reducetypes <nofFields> <specific-test-number>"
-    public static void main(String... args) throws Exception {
-        // Default args
-        boolean reduceTypes  = false;
-        int nofFields        = 4;
-        int specificTestCase = -1;
-
-        // Parse
-        int argIndex = 0;
-        if (args.length > argIndex && (args[argIndex].equals(ARG_REDUCE_TYPES)))  {
-            reduceTypes = true;
-            argIndex++;
-        }
-        if (args.length > argIndex) {
-            nofFields = Integer.parseInt(args[argIndex]);
-            argIndex++;
-        }
-        if (args.length > argIndex) {
-            specificTestCase = Integer.parseInt(args[argIndex]);
-            argIndex++;
-        }
-
-        runTests(reduceTypes, nofFields, specificTestCase);
-    }
-
-    Arity arity;
-    BasicType[] basicTypes;
-
-    public String toString() {
-        String s = "MVTCombo " + arity + " types: ";
-        for (int i = 0 ; i < basicTypes.length; i++) {
-            s += " " + basicTypes[i];
-        }
-        return s;
-    }
-
-    void setArity(Arity arity) {
-        this.arity = arity;
-        // Even if we are testing 1..K fields, combo needs K fields
-        this.basicTypes = new BasicType[arity.maxArity];
-    }
-
-    /*
-       The way the 'combo' package works, it produces combinations or permutations
-       for each dimension, so for arity we don't care for basicTypes[arity...maxArity]
-     */
-    boolean redundantFilter() {
-        BasicType lastArityType = basicTypes[arity.arity - 1];
-        for (int i = arity.arity ; i < arity.maxArity ; i++) {
-            if (basicTypes[i] != lastArityType) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    @Override
-    public void doWork() throws Throwable {
-        Result<Iterable<? extends JavaFileObject>> result = newCompilationTask()
-                .withSourceFromTemplate(VCC_TEMPLATE)
-                .withOption("--add-modules=jdk.incubator.mvt")
-                .generate();
-        //System.out.println("COMP: " + result.compilationInfo()); // Print the generated source
-        if (result.hasErrors()) {
-            fail("ERROR " + result.compilationInfo());
-        }
-        JavaFileObject jfo = result.get().iterator().next(); // Blindly assume one
-        String url = jfo.toUri().toURL().toString();
-        url = url.substring(0, url.length() - jfo.getName().length());
-        Class<?> clazz = new URLClassLoader(new URL[] { new URL(url) }).loadClass("Test");
-        try {
-            doTestMvtClasses(clazz);
-            doTestSingleInstance(clazz);
-            doTestArray(clazz);
-        } catch (Throwable ex) {
-            throw new AssertionError("ERROR: " + result.compilationInfo(), ex);
-        }
-    }
-
-    protected void doTestMvtClasses(Class<?> testSubject) throws Throwable {
-        if (!ValueType.classHasValueType(testSubject)) {
-            throw new IllegalArgumentException("Not a VCC: " + testSubject);
-        }
-        ValueType<?> vt = ValueType.forClass(testSubject);
-        Class<?> boxClass    = vt.boxClass();
-        Class<?> vtClass     = vt.valueClass();
-        Class<?> arrayClass  = vt.arrayValueClass();
-        Class<?> mArrayClass = vt.arrayValueClass(4);
-        if (boxClass != testSubject) {
-            throw new RuntimeException("Box class != VCC");
-        }
-        if (vt.toString() == null) {
-            throw new RuntimeException("No toString() return");
-        }
-    }
-
-    protected void doTestSingleInstance(Class<?> testSubject) throws Throwable {
-        ValueType<?> vt = ValueType.forClass(testSubject);
-        Object obj = MethodHandles.filterReturnValue(vt.defaultValueConstant(), vt.box()).invoke();
-        obj = MethodHandles.filterReturnValue(vt.unbox(), vt.box()).invoke(obj);
-        int hashCode = (int) MethodHandles.filterReturnValue(vt.defaultValueConstant(), vt.substitutabilityHashCode()).invoke();
-
-        //test(default(), default())
-        MethodHandle test0 = MethodHandles.collectArguments(vt.substitutabilityTest(), 0, vt.defaultValueConstant());
-        boolean isEqual = (boolean) MethodHandles.collectArguments(test0, 0, vt.defaultValueConstant()).invoke();
-        if (!isEqual) {
-            throw new RuntimeException("test(default(), default()) failed");
-        }
-    }
-
-    protected void doTestArray(Class<?> testSubject) throws Throwable {
-        ValueType<?> vt = ValueType.forClass(testSubject);
-        MethodHandle arrayGetter = vt.arrayGetter();
-        MethodHandle arraySetter = vt.arraySetter();
-        MethodHandle unbox = vt.unbox();
-        MethodHandle box = vt.box();
-        int testArrayLen = 7;
-        Object array = vt.newArray().invoke(testArrayLen);
-        for (int i = 0; i < testArrayLen; i++) {
-            MethodHandle equalsDefault0 = MethodHandles.collectArguments(vt.substitutabilityTest(), 0, vt.defaultValueConstant());
-            boolean isEqual = (boolean) MethodHandles.collectArguments(equalsDefault0, 0, arrayGetter).invoke(array, i);
-            if (!isEqual) {
-                System.out.println("PROBLEM:");
-                printFieldValues(MethodHandles.filterReturnValue(vt.defaultValueConstant(), box));
-                System.out.println("VERSUS value from array:");
-                printFieldValues(MethodHandles.filterReturnValue(arrayGetter, box).invoke(array, i));
-                throw new IllegalStateException("Failed equality test for class: " + vt.boxClass().getName()  + " at index: " + i);
-            }
-        }
-
-        // populate the last element with some values...
-        int testIndex = testArrayLen - 1;
-        /*
-           Do the following in MHs...
-
-          Object testObj = Test.createIndexed(testIndex);
-          array[testIndex] = unbox(testObj);
-          if (!testObj.equals(array[testIndex])) throw...
-        */
-        MethodHandle createIndexed = MethodHandles.privateLookupIn(testSubject, mhLookup)
-            .findStatic(testSubject, "createIndexed", methodType(testSubject, Integer.TYPE));
-        Object testObj = createIndexed.invoke(testIndex);
-        arraySetter.invoke(array, testIndex, testObj);
-        Object testElem = MethodHandles.filterReturnValue(arrayGetter, box).invoke(array, testIndex);
-        if (!testObj.equals(testElem)) {
-            System.out.println("PROBLEM:");
-            printFieldValues(testObj);
-            System.out.println("VERSUS:");
-            printFieldValues(testElem);
-            throw new RuntimeException("Inequality after value array store and load");
-        }
-    }
-
-    // Some general helper methods...
-    public static void printFieldValues(Object obj) throws IllegalAccessException {
-        Class<?> clazz = obj.getClass();
-        System.out.println("Object: " +  obj + " class: " + clazz.getName());
-        Field[] fields = reflectPublicFinalInstanceFields(clazz);
-        for (Field f : fields) {
-            System.out.printf("\t%s %s = %s\n", f.getType().getName(), f.getName(), f.get(obj));
-        }
-    }
-
-    public static Field[] reflectPublicFinalInstanceFields(Class<?> clazz) {
-        return reflectInstanceFields(clazz, Modifier.PUBLIC | Modifier.FINAL);
-    }
-
-    public static Field[] reflectInstanceFields(Class<?> clazz, int mask) {
-        return Stream.of(clazz.getDeclaredFields())
-            .filter(f -> (f.getModifiers() & (mask)) == mask)
-            .toArray(Field[]::new);
-    }
-
-    static final MethodHandles.Lookup mhLookup = MethodHandles.lookup();
-}
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/MVTComboDebugTier1.java	Wed Feb 14 11:08:42 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package runtime.valhalla.valuetypes;
-/*
- * @test MVTComboDebugTier1
- * @summary Debug variant of value type layout testing (Xcomp taking too long with debug)
- * @requires (vm.debug == true)
- * @library /test/lib
- * @modules jdk.compiler/com.sun.tools.javac.api
- *          jdk.compiler/com.sun.tools.javac.code
- *          jdk.compiler/com.sun.tools.javac.comp
- *          jdk.compiler/com.sun.tools.javac.main
- *          jdk.compiler/com.sun.tools.javac.tree
- *          jdk.compiler/com.sun.tools.javac.util
- *          jdk.incubator.mvt
- * @compile MVTCombo.java
- * @build jdk.test.lib.combo.ComboTestHelper
- * @run main/othervm -Xint -XX:+EnableMVT runtime.valhalla.valuetypes.MVTComboTier1 3
- * @run main/othervm -Xint -XX:+EnableMVT runtime.valhalla.valuetypes.MVTComboTier1 -reducetypes 6
- */
-public class MVTComboDebugTier1 {
-
-    public static void main(String[] args) throws Throwable {
-        MVTCombo.main(args);
-    }
-
-}
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/MVTComboTier1.java	Wed Feb 14 11:08:42 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package runtime.valhalla.valuetypes;
-/*
- * @test MVTComboTier1
- * @summary Release variant of value type layout testing
- * @requires (vm.debug != true)
- * @library /test/lib
- * @modules jdk.compiler/com.sun.tools.javac.api
- *          jdk.compiler/com.sun.tools.javac.code
- *          jdk.compiler/com.sun.tools.javac.comp
- *          jdk.compiler/com.sun.tools.javac.main
- *          jdk.compiler/com.sun.tools.javac.tree
- *          jdk.compiler/com.sun.tools.javac.util
- *          jdk.incubator.mvt
- * @compile MVTCombo.java
- * @build jdk.test.lib.combo.ComboTestHelper
- * @run main/othervm -Xint -XX:+EnableMVT runtime.valhalla.valuetypes.MVTComboTier1 3
- * @run main/othervm -Xint -XX:+EnableMVT runtime.valhalla.valuetypes.MVTComboTier1 -reducetypes 6
- * @run main/othervm -Xcomp -XX:+EnableMVT runtime.valhalla.valuetypes.MVTComboTier1 -reducetypes 5
- */
-public class MVTComboTier1 {
-
-    public static void main(String[] args) throws Throwable {
-        MVTCombo.main(args);
-    }
-
-}
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/Test8186715.java	Wed Feb 14 11:08:42 2018 +0530
+++ b/test/hotspot/jtreg/runtime/valhalla/valuetypes/Test8186715.java	Thu Feb 15 15:51:07 2018 -0500
@@ -30,6 +30,10 @@
  * @library /test/lib
  * @compile -XDenableValueTypes Test8186715.java
  * @run main/othervm -Xint -XX:+EnableValhalla runtime.valhalla.valuetypes.Test8186715
+ */
+
+
+/*
  * @run main/othervm -XX:+EnableValhalla runtime.valhalla.valuetypes.Test8186715
  */
 
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/TestInheritedValueTypeFields.java	Wed Feb 14 11:08:42 2018 +0530
+++ b/test/hotspot/jtreg/runtime/valhalla/valuetypes/TestInheritedValueTypeFields.java	Thu Feb 15 15:51:07 2018 -0500
@@ -30,6 +30,11 @@
  * @summary Test if value field klasses are correctly retrieved for inherited fields
  * @library /test/lib
  * @compile -XDenableValueTypes Point.java TestInheritedValueTypeFields.java
+ * @run main/othervm -Xint -XX:+EnableValhalla runtime.valhalla.valuetypes.TestInheritedValueTypeFields
+ */
+
+
+/*
  * @run main/othervm -XX:+EnableValhalla runtime.valhalla.valuetypes.TestInheritedValueTypeFields
  */
 
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/UninitializedValueFieldsTest.java	Wed Feb 14 11:08:42 2018 +0530
+++ b/test/hotspot/jtreg/runtime/valhalla/valuetypes/UninitializedValueFieldsTest.java	Thu Feb 15 15:51:07 2018 -0500
@@ -31,6 +31,10 @@
  * @library /test/lib
  * @compile -XDenableValueTypes Point.java
  * @run main/othervm -Xint -XX:+EnableValhalla runtime.valhalla.valuetypes.UninitializedValueFieldsTest
+ */
+
+
+/*
  * @run main/othervm -Xcomp -XX:+EnableValhalla runtime.valhalla.valuetypes.UninitializedValueFieldsTest
  */
 public class UninitializedValueFieldsTest {
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/VDefaultTest.java	Wed Feb 14 11:08:42 2018 +0530
+++ b/test/hotspot/jtreg/runtime/valhalla/valuetypes/VDefaultTest.java	Thu Feb 15 15:51:07 2018 -0500
@@ -32,6 +32,10 @@
  * @compile -XDenableValueTypes --add-modules jdk.incubator.mvt Point.java
  * @compile -XDenableValueTypes VDefaultTest.java
  * @run main/othervm -Xint -XX:+EnableValhalla runtime.valhalla.valuetypes.VDefaultTest
+ */
+
+
+/*
  * @run main/othervm -Xcomp -XX:+EnableValhalla runtime.valhalla.valuetypes.VDefaultTest
  */
 
@@ -93,8 +97,10 @@
 	Asserts.assertEquals(v.l, 0L, "invalid long default value");
 	Asserts.assertEquals(v.f, 0.0F, "invalid float default value");
 	Asserts.assertEquals(v.d, 0.0D, "invalid double default value");
-	Asserts.assertEquals(v.p.x, 0, "invalid embedded value type value");
-	Asserts.assertEquals(v.p.y, 0, "invalid embedded value type value");
+	// Asserts below are temporarely disabled because flattening is
+	// not supported yet
+	//	Asserts.assertEquals(v.p.x, 0, "invalid embedded value type value");
+	//	Asserts.assertEquals(v.p.y, 0, "invalid embedded value type value");
     }
 }
 
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/VTBufferTest.java	Wed Feb 14 11:08:42 2018 +0530
+++ b/test/hotspot/jtreg/runtime/valhalla/valuetypes/VTBufferTest.java	Thu Feb 15 15:51:07 2018 -0500
@@ -28,6 +28,10 @@
  * @build ValueTypeGenerator
  * @run main/othervm -Xint -XX:+EnableValhalla VTBufferTest generate-and-run
  * @run main/othervm -Xint -XX:+EnableValhalla -XX:ValueTypesBufferMaxMemory=0 VTBufferTest generate-and-run
+ */
+
+
+/*
  * @run main/othervm -Xint -XX:+EnableValhalla -XX:BigValueTypeThreshold=196 VTBufferTest generate-and-run
  * @run main/othervm -Xint -XX:+EnableValhalla -XX:-ValueTypesThreadLocalRecycling VTBufferTest generate-and-run
  */
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/VWithFieldTest.java	Wed Feb 14 11:08:42 2018 +0530
+++ b/test/hotspot/jtreg/runtime/valhalla/valuetypes/VWithFieldTest.java	Thu Feb 15 15:51:07 2018 -0500
@@ -32,6 +32,11 @@
  * @compile -XDenableValueTypes --add-modules jdk.incubator.mvt Point.java
  * @compile -XDenableValueTypes VWithFieldTest.java
  * @run main/othervm -Xint -XX:+EnableValhalla runtime.valhalla.valuetypes.VWithFieldTest
+ */
+
+
+
+/*
  * @run main/othervm -Xcomp -XX:+EnableValhalla runtime.valhalla.valuetypes.VWithFieldTest
  */
 
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueOops.java	Wed Feb 14 11:08:42 2018 +0530
+++ b/test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueOops.java	Thu Feb 15 15:51:07 2018 -0500
@@ -53,6 +53,11 @@
  * @run main/othervm -Xint -XX:+UseParallelGC -Xmx128m -XX:+EnableValhalla
  *                   -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
  *                   runtime.valhalla.valuetypes.ValueOops
+ */
+
+
+
+/*
  * @run main/othervm -Xcomp -XX:+UseSerialGC -Xmx128m -XX:+EnableValhalla
  *                   -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
  *                   runtime.valhalla.valuetypes.ValueOops
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueOopsMvt.java	Wed Feb 14 11:08:42 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,734 +0,0 @@
-/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package runtime.valhalla.valuetypes;
-
-import java.lang.invoke.*;
-import java.lang.ref.*;
-import java.util.concurrent.*;
-import jdk.experimental.value.MethodHandleBuilder;
-import jdk.incubator.mvt.ValueType;
-
-import static jdk.test.lib.Asserts.*;
-import jdk.test.lib.Utils;
-
-/**
- * @test ValueOopsMvt
- * @summary Test embedding oops into Minimal Value Types
- * @modules java.base/jdk.experimental.bytecode
- *          java.base/jdk.experimental.value
- *          jdk.incubator.mvt
- * @library /test/lib
- * @compile PersonVcc.java
- * @compile ValueOopsMvt.java
- * @run main/othervm -Xint -XX:+UseSerialGC -Xmx128m -XX:+EnableMVT
- *                   runtime.valhalla.valuetypes.ValueOopsMvt
- * @run main/othervm -Xint -XX:+UseG1GC -Xmx128m -XX:+EnableMVT
- *                   -XX:-ValueArrayFlatten
- *                   runtime.valhalla.valuetypes.ValueOopsMvt
- * @run main/othervm -Xint -XX:+UseG1GC -Xmx128m -XX:+EnableMVT
- *                   runtime.valhalla.valuetypes.ValueOopsMvt 100
- * @run main/othervm -Xint -XX:+UseParallelGC -Xmx128m -XX:+EnableMVT
- *                   runtime.valhalla.valuetypes.ValueOopsMvt
- * @run main/othervm -Xcomp -XX:+UseSerialGC -Xmx128m -XX:+EnableMVT
- *                   runtime.valhalla.valuetypes.ValueOopsMvt
- * @run main/othervm -Xcomp -XX:+UseG1GC -Xmx128m -XX:+EnableMVT
- *                   runtime.valhalla.valuetypes.ValueOopsMvt 100
- * @run main/othervm -Xcomp -XX:+UseParallelGC -Xmx128m -XX:+EnableMVT
- *                   runtime.valhalla.valuetypes.ValueOopsMvt
- */
-public class ValueOopsMvt {
-
-    // Extra debug: -XX:+VerifyOops -XX:+VerifyStack -XX:+VerifyLastFrame -XX:+VerifyBeforeGC -XX:+VerifyAfterGC -XX:+VerifyDuringGC -XX:VerifySubSet=threads,heap
-    // Even more debugging: -XX:+TraceNewOopMapGeneration -Xlog:gc*=info
-
-
-    /*
-     * TODO: Crashes with -Xcomp -XX:+UseG1GC -Xmx128m -XX:+EnableMVT -XX:-ValueArrayFlatten runtime.valhalla.valuetypes.ValueOopsMvt
-     */
-
-    static final int NOF_PEOPLE = 1000; // Exercise arrays of this size
-
-    static int MIN_ACTIVE_GC_COUNT = 10; // Run active workload for this number of GC passes
-
-    static int MED_ACTIVE_GC_COUNT = 4;  // Medium life span in terms of GC passes
-
-    static final String TEST_STRING1 = "Test String 1";
-    static final String TEST_STRING2 = "Test String 2";
-
-    static MethodHandles.Lookup LOOKUP = MethodHandles.lookup();
-
-    public static void main(String[] args) {
-        if (args.length > 0) {
-            MIN_ACTIVE_GC_COUNT = Integer.parseInt(args[0]);
-        }
-        testClassLoad();
-        testBytecodes();
-        testMvt();
-
-        // Check we survive GC...
-        testOverGc();   // Exercise root scan / oopMap
-        testActiveGc(); // Brute force
-    }
-
-    /**
-     * Test ClassFileParser can load values with reference fields
-     */
-    public static void testClassLoad() {
-        // MVT
-        Class<?> vccClass = PersonVcc.class;
-        ValueType<?> vt = ValueType.forClass(vccClass);
-        Class<?> boxClass = vt.boxClass();
-        Class<?> dvtClass = vt.valueClass();
-        Class<?> arrayClass = vt.arrayValueClass();
-        dvtClass.toString();
-    }
-
-
-    /*
-      Following tests are broken down into different use cases, and used in
-      multi-threaded stress tests.
-
-      Keeping the use cases separated helps isolate problems when debugging.
-
-      Since we are testing the VM here, no the ValueType API is mostly ignored
-      and the test exercises specific bytecode
-     */
-
-    /*
-      Method Handle generation is mixed into the invokation code as an attempt
-      to increase readability.
-     */
-
-    /**
-     * Test Values with Oops with specific bytecodes for various use cases
-     *
-     * Value type specific bytecodes...
-     *
-     * vload
-     * vstore
-     * vaload
-     * vastore
-     * vreturn
-     * vdefault
-     * vwithfield
-     * vbox
-     * vunbox
-     *
-     * Bytecode accepting value types (QTypes)
-     *
-     * anewarray
-     * multianewarray
-     * getfield
-     */
-    public static void testBytecodes() {
-        try {
-            testBytecodesStackVDefault();
-            testBytecodesStackVUnbox();
-            testBytecodesStackAndSlots();
-            testBytecodesStackAndSlotsDeep();
-            testBytecodesVBox();
-            testBytecodesVReturn();
-            testBytecodesGetField();
-            testBytecodesVwithfield();
-            testBytecodesValueArray();
-            testBytecodesField();
-        } catch (Throwable t) {
-            throw new RuntimeException(t);
-        }
-    }
-
-    static MethodHandle stacksVDefaultTest;
-
-    // vdefault on stack and pop
-    public static void testBytecodesStackVDefault() throws Throwable {
-        if (stacksVDefaultTest == null) { // Gen MH once
-            stacksVDefaultTest = MethodHandleBuilder.loadCode(LOOKUP,
-                "stacksVDefaultTest", MethodType.methodType(Void.TYPE),
-                CODE->{
-                CODE
-                .vdefault(ValueType.forClass(PersonVcc.class).valueClass())
-                .pop()
-                .return_();
-                });
-        }
-        stacksVDefaultTest.invokeExact();
-    }
-
-    static MethodHandle stackVUnboxTest;
-
-    // vunbox on stack and pop
-    public static void testBytecodesStackVUnbox() throws Throwable {
-        if (stackVUnboxTest == null) {
-            stackVUnboxTest = MethodHandleBuilder.loadCode(LOOKUP,
-               "stackVUnboxTest", MethodType.methodType(Void.TYPE, PersonVcc.class),
-                CODE->{
-                CODE
-                .aload(0)
-                .vunbox(ValueType.forClass(PersonVcc.class).valueClass())
-                .pop()
-                .return_();
-                });
-        }
-        stackVUnboxTest.invokeExact(createIndexedPersonVcc(7341));
-    }
-
-    static MethodHandle stackAndSlotsTest;
-
-    // load/store with stack and slots
-    public static void testBytecodesStackAndSlots() throws Throwable {
-        if (stackAndSlotsTest == null) {
-            stackAndSlotsTest = MethodHandleBuilder.loadCode(LOOKUP,
-               "stackAndSlotsTest", MethodType.methodType(Void.TYPE, PersonVcc.class),
-                CODE->{
-                CODE
-                .aload(0)
-                .vunbox(ValueType.forClass(PersonVcc.class).valueClass())
-                .vstore(1)
-                .vload(1)
-                .vstore(2)
-                .return_();
-                });
-        }
-        stackAndSlotsTest.invokeExact(createIndexedPersonVcc(7342));
-    }
-
-    static MethodHandle stackAndSlotsDeepTest;
-
-    // load/store with stack and slots, and call deeper
-    public static void testBytecodesStackAndSlotsDeep() throws Throwable {
-        if (stackAndSlotsDeepTest == null) {
-            stackAndSlotsDeepTest = MethodHandleBuilder.loadCode(LOOKUP,
-               "stackAndSlotsDeepTest", MethodType.methodType(Void.TYPE, PersonVcc.class),
-                CODE->{
-                CODE
-                .aload(0)
-                .vunbox(ValueType.forClass(PersonVcc.class).valueClass())
-                .vstore(1)
-                .vload(1)
-                .vstore(2)
-                .vload(2)
-                .invokestatic(ValueOopsMvt.class, "testBytecodesStackAndSlots", "()V", false)
-                .pop()
-                .return_();
-                });
-        }
-        stackAndSlotsDeepTest.invokeExact(createIndexedPersonVcc(7343));
-    }
-
-    static MethodHandle vboxTest;
-
-    // vbox/vunbox, value on stack
-    public static void testBytecodesVBox() throws Throwable {
-        if (vboxTest == null) {
-            vboxTest = MethodHandleBuilder.loadCode(LOOKUP,
-                "unboxBox", MethodType.methodType(PersonVcc.class, PersonVcc.class),
-                CODE->{
-                CODE
-                .aload(0)
-                .vunbox(ValueType.forClass(PersonVcc.class).valueClass())
-                .vbox(PersonVcc.class)
-                .areturn();
-                });
-        }
-        int index = 7344;
-        PersonVcc person = (PersonVcc) vboxTest.invokeExact(createIndexedPersonVcc(index));
-        validateIndexedPersonVcc(person, index);
-    }
-
-    static MethodHandle vreturnTest;
-
-    // vreturn and pass value as arg
-    public static void testBytecodesVReturn() throws Throwable {
-        if (vreturnTest == null) {
-            MethodHandle vunboxVReturn = MethodHandleBuilder.loadCode(LOOKUP,
-                "vunboxVReturn", MethodType.methodType(ValueType.forClass(PersonVcc.class).valueClass(), PersonVcc.class),
-                CODE->{
-                CODE
-                .aload(0)
-                .vunbox(ValueType.forClass(PersonVcc.class).valueClass())
-                .vreturn();
-                });
-            MethodHandle vboxAReturn = MethodHandleBuilder.loadCode(LOOKUP,
-                "vboxAReturn", MethodType.methodType(PersonVcc.class, ValueType.forClass(PersonVcc.class).valueClass()),
-                CODE->{
-                CODE
-                .vload(0)
-                .vbox(PersonVcc.class)
-                .areturn();
-                });
-            vreturnTest = MethodHandles.filterReturnValue(vunboxVReturn, vboxAReturn);
-        }
-        int index = 7345;
-        PersonVcc person = (PersonVcc) vreturnTest.invokeExact(createIndexedPersonVcc(index));
-        validateIndexedPersonVcc(person, index);
-    }
-
-    static MethodHandle getFieldTest;
-
-    public static void testBytecodesGetField() throws Throwable {
-        if (getFieldTest == null) {
-            getFieldTest = MethodHandleBuilder.loadCode(LOOKUP,
-                "getFieldTest", MethodType.methodType(String.class, PersonVcc.class),
-                CODE->{
-                CODE
-                .aload(0)
-                .vunbox(ValueType.forClass(PersonVcc.class).valueClass())
-                .getfield(ValueType.forClass(PersonVcc.class).valueClass(), "lastName", "Ljava/lang/String;")
-                .areturn();
-                });
-        }
-        int index = 7346;
-        String lastName = (String) getFieldTest.invokeExact(createIndexedPersonVcc(index));
-        assertEquals(lastName, lastName(index));
-    }
-
-    static MethodHandle vwtihfieldTest;
-
-    public static void testBytecodesVwithfield() throws Throwable {
-        if (vwtihfieldTest == null) {
-            Class<?> dvtClass = ValueType.forClass(PersonVcc.class).valueClass();
-            vwtihfieldTest = MethodHandleBuilder.loadCode(MethodHandles.privateLookupIn(dvtClass, LOOKUP),
-                "vwtihfieldTest", MethodType.methodType(PersonVcc.class, PersonVcc.class, Integer.TYPE, String.class, String.class),
-                CODE->{
-                CODE
-                .aload(0)
-                .vunbox(dvtClass)
-                .iload(1)
-                .vwithfield(dvtClass, "id", "I")
-                .aload(2)
-                .vwithfield(dvtClass, "firstName", "Ljava/lang/String;")
-                .aload(3)
-                .vwithfield(dvtClass, "lastName", "Ljava/lang/String;")
-                .vbox(PersonVcc.class)
-                .areturn();
-                });
-        }
-        int index = 7347;
-        int diffIndex = 4711;
-        PersonVcc person = (PersonVcc) vwtihfieldTest.invokeExact(createIndexedPersonVcc(index), diffIndex, firstName(diffIndex), lastName(diffIndex));
-        validateIndexedPersonVcc(person, diffIndex);
-    }
-
-    // load/store with arrays
-    public static void testBytecodesValueArray() throws Throwable {
-        testBytecodesArrayNew();
-        testBytecodesArrayLoad();
-        testBytecodesArrayStore();
-        testBytecodesArrayStoreLoad();
-
-        // multidim...
-    }
-
-    static MethodHandle anewarrayTest;
-
-    public static void testBytecodesArrayNew() throws Throwable {
-        if (anewarrayTest == null) {
-            anewarrayTest = MethodHandleBuilder.loadCode(LOOKUP,
-                "anewarrayTest", MethodType.methodType(Integer.TYPE, Integer.TYPE),
-                CODE->{
-                CODE
-                .iload(0)
-                .anewarray(ValueType.forClass(PersonVcc.class).valueClass())
-                .arraylength()
-                .ireturn();
-                });
-        }
-        int asize = (int) anewarrayTest.invokeExact(NOF_PEOPLE);
-        assertTrue(asize == NOF_PEOPLE, "Invariant");
-    }
-
-    static MethodHandle valoadTest;
-
-    public static void testBytecodesArrayLoad() throws Throwable {
-        if (valoadTest == null) {
-            valoadTest = MethodHandleBuilder.loadCode(LOOKUP,
-                "valoadTest", MethodType.methodType(PersonVcc.class, Integer.TYPE, Integer.TYPE),
-                CODE->{
-                CODE
-                .iload(0)
-                .anewarray(ValueType.forClass(PersonVcc.class).valueClass())
-                .iload(1)
-                .vaload()
-                .vbox(PersonVcc.class)
-                .areturn();
-                });
-        }
-        PersonVcc person = (PersonVcc) valoadTest.invokeExact(NOF_PEOPLE, 7);
-        validateDefaultPersonVcc(person);
-    }
-
-    static MethodHandle varrayStoreTest;
-
-    public static void testBytecodesArrayStore() throws Throwable {
-        if (varrayStoreTest == null) {
-            varrayStoreTest = MethodHandleBuilder.loadCode(LOOKUP,
-                "varrayStoreTest", MethodType.methodType(Void.TYPE, Integer.TYPE, Integer.TYPE, PersonVcc.class),
-                CODE->{
-                CODE
-                .iload(0)
-                .anewarray(ValueType.forClass(PersonVcc.class).valueClass())
-                .iload(1)
-                .aload(2)
-                .vunbox(ValueType.forClass(PersonVcc.class).valueClass())
-                .vastore()
-                .return_();
-                });
-        }
-        int index = 11;
-        varrayStoreTest.invokeExact(NOF_PEOPLE, index, createIndexedPersonVcc(index));
-    }
-
-    static MethodHandle varrayStoreLoadTest;
-
-    public static void testBytecodesArrayStoreLoad() throws Throwable {
-        if (varrayStoreLoadTest == null) {
-            varrayStoreLoadTest = MethodHandleBuilder.loadCode(LOOKUP,
-                "varrayStoreLoadTest", MethodType.methodType(PersonVcc.class, Integer.TYPE, Integer.TYPE, PersonVcc.class),
-                CODE->{
-                CODE
-                .iload(0)
-                .anewarray(ValueType.forClass(PersonVcc.class).valueClass())
-                .dup()
-                .iload(1)
-                .aload(2)
-                .vunbox(ValueType.forClass(PersonVcc.class).valueClass())
-                .vastore()
-                .iload(1)
-                .vaload()
-                .vbox(PersonVcc.class)
-                .areturn();
-                });
-        }
-        int index = NOF_PEOPLE - 1;
-        PersonVcc person = (PersonVcc) varrayStoreLoadTest.invokeExact(NOF_PEOPLE, index, createIndexedPersonVcc(index));
-        validateIndexedPersonVcc(person, index);
-    }
-
-    // load/store with Object fields
-    public static void testBytecodesField() throws Throwable {
-        // CMH: no MVT support yet
-    }
-
-    /**
-     * Check value type operations with "Minimal Value Types" (MVT) API
-     */
-    public static void testMvt() {
-        try {
-            // MVT...
-            ValueType<?> vt = ValueType.forClass(PersonVcc.class);
-            Class<?> vtClass = vt.valueClass();
-            Class<?> arrayClass = vt.arrayValueClass();
-
-            Object obj = vt.defaultValueConstant().invoke();
-            validateDefaultPersonVcc(obj);
-
-            obj = MethodHandles.filterReturnValue(vt.unbox(), vt.box())
-                .invoke(createDefaultPersonVcc());
-            validateDefaultPersonVcc(obj);
-
-            int index = 11;
-            obj = MethodHandles.filterReturnValue(vt.unbox(), vt.box())
-                .invoke(createIndexedPersonVcc(index));
-            validateIndexedPersonVcc(obj, index);
-
-            testMvtArray("testMvt.array.1", 1);
-        }
-        catch (Throwable t) {
-            fail("testMvtfailed", t);
-        }
-    }
-
-    /**
-     * MVT array operations...
-     */
-    public static void testMvtPeopleArray() {
-        testMvtArray("testMvtPeopleArray", NOF_PEOPLE);
-    }
-
-    public static void testMvtArray(String testName, int arrayLength) {
-        try {
-            Class<?> vcc = PersonVcc.class;
-            ValueType<?> vt = ValueType.forClass(vcc);
-            Class<?> dvtClass = vt.valueClass();
-            Class<?> arrayClass = vt.arrayValueClass();
-
-            MethodHandle arrayElemGet = MethodHandles.arrayElementGetter(arrayClass);
-            MethodHandle arrayElemSet = MethodHandles.arrayElementSetter(arrayClass);
-
-            MethodHandle getId = LOOKUP.findGetter(dvtClass, "id", Integer.TYPE);
-            MethodHandle getFirstName = LOOKUP.findGetter(dvtClass, "firstName", String.class);
-            MethodHandle getLastName = LOOKUP.findGetter(dvtClass, "lastName", String.class);
-
-            MethodHandle getIdFromArray = MethodHandles.filterReturnValue(arrayElemGet, getId);
-            MethodHandle getFnFromArray = MethodHandles.filterReturnValue(arrayElemGet, getFirstName);
-            MethodHandle getLnFromArray = MethodHandles.filterReturnValue(arrayElemGet, getLastName);
-
-            Object people = vt.newArray().invoke(arrayLength);
-            for (int i = 0; i < arrayLength; i++) {
-                arrayElemSet.invoke(people, i, createIndexedPersonVcc(i));
-            }
-
-            for (int i = 0; i < arrayLength; i++) {
-                validateIndexedPersonVcc(arrayElemGet.invoke(people, i), i);
-
-                int id = (int) getIdFromArray.invoke(people, i);
-                assertTrue(id == i, "Invalid field: Id, should be: " + i + " got " + id);
-                String fn = (String) getFnFromArray.invoke(people, i);
-                assertTrue(fn.equals(firstName(i)), "Invalid field: firstName");
-                String ln = (String) getLnFromArray.invoke(people, i);
-                assertTrue(ln.equals(lastName(i)), "Invalid field: lastName");
-            }
-        }
-        catch (Throwable t) {
-            fail(testName + " failed", t);
-        }
-    }
-
-    /**
-     * Check forcing GC for combination of VT on stack/LVT etc works
-     */
-    public static void testOverGc() {
-        try {
-            Class<?> vccClass = PersonVcc.class;
-            ValueType<?> vt = ValueType.forClass(vccClass);
-            Class<?> vtClass = vt.valueClass();
-            Class<?> arrayClass = vt.arrayValueClass();
-
-            doGc();
-
-            // VT on stack and lvt, null refs, see if GC flies
-            MethodHandle moveValueThroughStackAndLvt = MethodHandleBuilder.loadCode(
-                LOOKUP,
-                "gcOverPerson",
-                MethodType.methodType(vccClass, vccClass),
-                CODE->{
-                CODE
-                .aload(0)
-                .vunbox(vtClass)
-                .invokestatic(ValueOopsMvt.class, "doGc", "()V", false) // Stack
-                .vstore(0)
-                .invokestatic(ValueOopsMvt.class, "doGc", "()V", false) // LVT
-                .vload(0)
-                .iconst_1()  // push a litte further down
-                .invokestatic(ValueOopsMvt.class, "doGc", "()V", false) // Stack,LVT
-                .pop()
-                .vbox(vccClass)
-                .areturn();
-            });
-            Object obj = moveValueThroughStackAndLvt.invoke(createDefaultPersonVcc());
-            validateDefaultPersonVcc(obj);
-            doGc();
-            obj = null;
-            doGc();
-
-            int index = 4711;
-            obj = moveValueThroughStackAndLvt.invoke(createIndexedPersonVcc(index));
-            validateIndexedPersonVcc(obj, index);
-            doGc();
-            obj = null;
-            doGc();
-        }
-        catch (Throwable t) { fail("testOverGc", t); }
-    }
-
-    static void submitNewWork(ForkJoinPool fjPool, int size) {
-        for (int i = 0; i < size; i++) {
-            fjPool.execute(ValueOopsMvt::testMvtPeopleArray);
-            for (int j = 0; j < 100; j++) {
-                // JDK-8186718 random crashes in interpreter vbox and vunbox (with G1)
-                // test needs refactoring to more specific use cases for debugging.
-                fjPool.execute(ValueOopsMvt::testBytecodes);
-                fjPool.execute(ValueOopsMvt::testMvt);
-            }
-        }
-    }
-
-    static void sleepNoThrow(long ms) {
-        try {
-            Thread.sleep(ms);
-        }
-        catch (Throwable t) {}
-    }
-
-    /**
-     * Run some workloads with different object/value life times...
-     */
-    public static void testActiveGc() {
-        try {
-            int nofThreads = 7;
-            int workSize = nofThreads * 10;
-
-            Object longLivedObjects = createLongLived();
-            Object longLivedPeopleVcc = createPeopleVcc();
-
-            Object medLivedObjects = createLongLived();
-            Object medLivedPeopleVcc = createPeopleVcc();
-
-            doGc();
-
-            ForkJoinPool fjPool = new ForkJoinPool(nofThreads, ForkJoinPool.defaultForkJoinWorkerThreadFactory, null, true);
-
-            // submit work until we see some GC
-            Reference ref = createRef();
-            submitNewWork(fjPool, workSize);
-            while (ref.get() != null) {
-                if (fjPool.hasQueuedSubmissions()) {
-                    sleepNoThrow(1L);
-                }
-                else {
-                    workSize *= 2; // Grow the submission size
-                    submitNewWork(fjPool, workSize);
-                }
-            }
-
-            // Keep working and actively GC, until MIN_ACTIVE_GC_COUNT
-            int nofActiveGc = 1;
-            ref = createRef();
-            while (nofActiveGc < MIN_ACTIVE_GC_COUNT) {
-                if (ref.get() == null) {
-                    nofActiveGc++;
-                    ref = createRef();
-                    if (nofActiveGc % MED_ACTIVE_GC_COUNT == 0) {
-                        validateLongLived(medLivedObjects);
-                        validatePeopleVcc(medLivedPeopleVcc);
-
-                        medLivedObjects = createLongLived();
-                        medLivedPeopleVcc = createPeopleVcc();
-                    }
-                }
-                else if (fjPool.hasQueuedSubmissions()) {
-                    sleepNoThrow((long) Utils.getRandomInstance().nextInt(1000));
-                    doGc();
-                }
-                else {
-                    submitNewWork(fjPool, workSize);
-                }
-            }
-            fjPool.shutdown();
-
-            validateLongLived(medLivedObjects);
-            validatePeopleVcc(medLivedPeopleVcc);
-            medLivedObjects = null;
-            medLivedPeopleVcc = null;
-
-            validateLongLived(longLivedObjects);
-            validatePeopleVcc(longLivedPeopleVcc);
-
-            longLivedObjects = null;
-            longLivedPeopleVcc = null;
-
-            doGc();
-        }
-        catch (Throwable t) { fail("testMvtActiveGc", t); }
-    }
-
-    static final ReferenceQueue<Object> REFQ = new ReferenceQueue<>();
-
-    public static void doGc() {
-        // Create Reference, wait until it clears...
-        Reference ref = createRef();
-        while (ref.get() != null) {
-            System.gc();
-        }
-    }
-
-    static Reference createRef() {
-        return new WeakReference<Object>(new Object(), REFQ);
-    }
-
-    static void validatePersonVcc(Object obj, int id, String fn, String ln, boolean equals) {
-        assertTrue(obj.getClass() == PersonVcc.class, "Expected VCC class");
-        PersonVcc person = (PersonVcc) obj;
-        assertTrue(person.id == id);
-        if (equals) {
-            assertTrue(fn.equals(person.getFirstName()), "Invalid field firstName");
-            assertTrue(ln.equals(person.getLastName()), "Invalid  field lastName");
-        }
-        else {
-            assertTrue(person.getFirstName() == fn, "Invalid field firstName");
-            assertTrue(person.getLastName() == ln, "Invalid  field lastName");
-        }
-    }
-
-    static PersonVcc createIndexedPersonVcc(int i) {
-        return PersonVcc.create(i, firstName(i), lastName(i));
-    }
-
-    static void validateIndexedPersonVcc(Object obj, int i) {
-        validatePersonVcc(obj, i, firstName(i), lastName(i), true);
-    }
-
-    static PersonVcc createDefaultPersonVcc() {
-        return PersonVcc.create(0, null, null);
-    }
-
-    static void validateDefaultPersonVcc(Object obj) {
-        validatePersonVcc(obj, 0, null, null, false);
-    }
-
-    static String firstName(int i) {
-        return "FirstName-" + i;
-    }
-
-    static String lastName(int i) {
-        return "LastName-" + i;
-    }
-
-    static Object createLongLived()  throws Throwable {
-        Object[] population = new Object[1];
-        population[0] = createPeopleVcc();
-        return population;
-    }
-
-    static void validateLongLived(Object pop) throws Throwable {
-        Object[] population = (Object[]) pop;
-        validatePeopleVcc(population[0]);
-    }
-
-    static Object createPeopleVcc() throws Throwable {
-        int arrayLength = NOF_PEOPLE;
-        Class<?> vccClass = PersonVcc.class;
-        ValueType<?> vt = ValueType.forClass(vccClass);
-        MethodHandle arrayElemSet = MethodHandles.arrayElementSetter(vt.arrayValueClass());
-
-        Object people = vt.newArray().invoke(arrayLength);
-        for (int i = 0; i < arrayLength; i++) {
-            arrayElemSet.invoke(people, i, createIndexedPersonVcc(i));
-        }
-        return people;
-    }
-
-    static void validatePeopleVcc(Object people) throws Throwable {
-        MethodHandle arrayElemGet = MethodHandles.arrayElementGetter(
-            ValueType.forClass((Class<?>)PersonVcc.class).arrayValueClass());
-
-        int arrayLength = java.lang.reflect.Array.getLength(people);
-        assertTrue(arrayLength == NOF_PEOPLE);
-        for (int i = 0; i < arrayLength; i++) {
-            validateIndexedPersonVcc(arrayElemGet.invoke(people, i), i);
-        }
-    }
-
-}
-
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueTypeArray.java	Wed Feb 14 11:08:42 2018 +0530
+++ b/test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueTypeArray.java	Thu Feb 15 15:51:07 2018 -0500
@@ -33,6 +33,9 @@
  * @library /test/lib
  * @compile -XDenableValueTypes ValueTypeArray.java Point.java Long8Value.java Person.java
  * @run main/othervm -Xint -XX:+ValueArrayFlatten -XX:+EnableValhalla runtime.valhalla.valuetypes.ValueTypeArray
+ */
+
+/*
  * @run main/othervm -Xint -XX:-ValueArrayFlatten -XX:+EnableValhalla runtime.valhalla.valuetypes.ValueTypeArray
  * @run main/othervm -Xcomp -XX:+ValueArrayFlatten -XX:+EnableValhalla runtime.valhalla.valuetypes.ValueTypeArray
  * @run main/othervm -Xcomp -XX:-ValueArrayFlatten -XX:+EnableValhalla runtime.valhalla.valuetypes.ValueTypeArray
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueTypeCreation.java	Wed Feb 14 11:08:42 2018 +0530
+++ b/test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueTypeCreation.java	Thu Feb 15 15:51:07 2018 -0500
@@ -29,7 +29,15 @@
  * @summary Value Type creation test
  * @library /test/lib
  * @compile  -XDenableValueTypes ValueTypeCreation.java Point.java Long8Value.java Person.java
- * @run main/othervm -Xint -XX:+EnableValhalla runtime.valhalla.valuetypes.ValueTypeCreation
+ * @run main/othervm -Xint -XX:+EnableValhalla -XX:+PrintValueLayout runtime.valhalla.valuetypes.ValueTypeCreation
+ */
+
+
+
+
+
+
+/*
  * @run main/othervm -Xcomp -XX:+EnableValhalla runtime.valhalla.valuetypes.ValueTypeCreation
  */
 public class ValueTypeCreation {
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueTypeDensity.java	Wed Feb 14 11:08:42 2018 +0530
+++ b/test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueTypeDensity.java	Thu Feb 15 15:51:07 2018 -0500
@@ -36,6 +36,10 @@
  * @run main/othervm -Xint -XX:+EnableValhalla -XX:+ValueArrayFlatten
  *                   -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
  *                    -XX:+WhiteBoxAPI ValueTypeDensity
+ */
+
+
+/*
  * @run main/othervm -Xcomp -XX:+EnableValhalla -XX:+ValueArrayFlatten
  *                   -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
  *                   -XX:+WhiteBoxAPI ValueTypeDensity
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueTypeGetField.java	Wed Feb 14 11:08:42 2018 +0530
+++ b/test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueTypeGetField.java	Thu Feb 15 15:51:07 2018 -0500
@@ -30,6 +30,9 @@
  * @library /test/lib
  * @compile -XDenableValueTypes Point.java ValueTypeGetField.java
  * @run main/othervm -Xint -XX:+EnableValhalla runtime.valhalla.valuetypes.ValueTypeGetField
+ */
+
+/*
  * @run main/othervm -Xcomp -XX:+EnableValhalla runtime.valhalla.valuetypes.ValueTypeGetField
  */
 public class ValueTypeGetField {
--- a/test/hotspot/jtreg/runtime/valhalla/valuetypes/VboxUnbox.java	Wed Feb 14 11:08:42 2018 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package runtime.valhalla.valuetypes;
-
-import java.lang.invoke.*;
-
-import jdk.experimental.value.MethodHandleBuilder;
-import jdk.incubator.mvt.ValueType;
-
-import static jdk.test.lib.Asserts.*;
-
-/*
- * @test VboxUnbox
- * @summary Exercise vbox & vunbox bytecodes
- * @modules java.base/jdk.experimental.value
- *          jdk.incubator.mvt
- * @library /test/lib
- * @compile PersonVcc.java
- * @build runtime.valhalla.valuetypes.ValueCapableClass
- * @run main/othervm -Xint -XX:+EnableMVT runtime.valhalla.valuetypes.VboxUnbox
- * @run main/othervm -Xcomp -XX:+EnableMVT runtime.valhalla.valuetypes.VboxUnbox
- */
-public class VboxUnbox {
-
-    public static void main(String[] args) {
-        testCorrectBoxing();
-        testIncorrectBoxing();
-    }
-
-    public static void testCorrectBoxing() {
-        Class<?> vcc = ValueCapableClass.class;
-        Class<?> dvt = ValueType.forClass(vcc).valueClass();
-
-        MethodHandle newDvt = newDvtMh(dvt);
-        MethodHandle box = boxMh(dvt, vcc);
-        MethodHandle unbox = unboxMh(vcc, dvt);
-
-        ValueCapableClass newObject = ValueCapableClass.create(3, (short)7, (short)11);
-        ValueCapableClass newBoxed = null;
-
-        try {
-            ValueCapableClass boxed = (ValueCapableClass) MethodHandles.filterReturnValue(newDvt, box).invokeExact();
-            // Assuming MVT1.0, where source has no way of holding an actual value at the language level, so: box(unbox(Object))
-            newBoxed = (ValueCapableClass) MethodHandles.filterReturnValue(unbox, box).invokeExact(newObject);
-        }
-        catch (Throwable t) { fail("Invokation Exception", t); }
-
-        assertTrue(newObject.getX() == newBoxed.getX());
-        assertTrue(newObject.getY() == newBoxed.getY());
-        assertTrue(newObject.getZ() == newBoxed.getZ());
-    }
-
-    public static void testIncorrectBoxing() {
-        Class<?> vcc = ValueCapableClass.class;
-        Class<?> dvt = ValueType.forClass(vcc).valueClass();
-
-        MethodHandle newDvt = newDvtMh(dvt);
-        MethodHandle box = boxMh(dvt, String.class); // Illegal box type
-        try {
-            MethodHandles.filterReturnValue(newDvt, box).invoke();
-            fail("Expected ClassCastException");
-        }
-        catch (ClassCastException cce) {}
-        catch (Throwable t) { fail("Invokation Exception", t); }
-
-        MethodHandle unbox = unboxMh(vcc, ValueType.forClass(PersonVcc.class).valueClass()); // Illegal unbox type
-        try {
-            unbox.invoke(ValueCapableClass.create());
-            fail("Expected ClassCastException");
-        }
-        catch (ClassCastException cce) {}
-        catch (Throwable t) { fail("Invokation Exception", t); }
-    }
-
-    /*
-       Create new DVT via loading a value array element. Why this workaround:
-       1) to avoid "ValueType.defaultValueConstant()" which may or may not be implemented with vunbox
-    */
-    public static MethodHandle newDvtMh(Class<?> dvt) {
-        return MethodHandleBuilder.loadCode(MethodHandles.lookup(), "newDvt", MethodType.methodType(dvt), CODE->{
-                CODE.iconst_1().anewarray(dvt).iconst_0().vaload().vreturn();
-            });
-    }
-
-    public static MethodHandle boxMh(Class<?> inClass, Class<?> outClass) {
-        return MethodHandleBuilder.loadCode(MethodHandles.lookup(), "box", MethodType.methodType(outClass, inClass), CODE->{
-                CODE.vload(0).vbox(outClass).areturn();
-            });
-    }
-
-    public static MethodHandle unboxMh(Class<?> inClass, Class<?> outClass)  {
-        return MethodHandleBuilder.loadCode(MethodHandles.lookup(), "box", MethodType.methodType(outClass, inClass), CODE->{
-                CODE.aload(0).vunbox(outClass).vreturn();
-            });
-    }
-
-}