diff src/share/vm/runtime/vmStructs.cpp @ 3939:f6f3bb0ee072

7088955: add C2 IR support to the SA Reviewed-by: kvn
author never
date Sun, 11 Sep 2011 14:48:24 -0700
parents e6b1331a51d2
children ab577c97a5f3
line wrap: on
line diff
--- a/src/share/vm/runtime/vmStructs.cpp	Sat Sep 10 17:29:02 2011 -0700
+++ b/src/share/vm/runtime/vmStructs.cpp	Sun Sep 11 14:48:24 2011 -0700
@@ -29,6 +29,11 @@
 #include "classfile/placeholders.hpp"
 #include "classfile/symbolTable.hpp"
 #include "classfile/systemDictionary.hpp"
+#include "ci/ciField.hpp"
+#include "ci/ciInstance.hpp"
+#include "ci/ciObjArrayKlass.hpp"
+#include "ci/ciMethodData.hpp"
+#include "ci/ciSymbol.hpp"
 #include "code/codeBlob.hpp"
 #include "code/codeCache.hpp"
 #include "code/compressedStream.hpp"
@@ -38,6 +43,7 @@
 #include "code/stubs.hpp"
 #include "code/vmreg.hpp"
 #include "compiler/oopMap.hpp"
+#include "compiler/compileBroker.hpp"
 #include "gc_implementation/concurrentMarkSweep/freeBlockDictionary.hpp"
 #include "gc_implementation/shared/immutableSpace.hpp"
 #include "gc_implementation/shared/markSweep.hpp"
@@ -90,6 +96,8 @@
 #include "oops/typeArrayOop.hpp"
 #include "prims/jvmtiAgentThread.hpp"
 #include "runtime/arguments.hpp"
+#include "runtime/deoptimization.hpp"
+#include "runtime/vframeArray.hpp"
 #include "runtime/globals.hpp"
 #include "runtime/java.hpp"
 #include "runtime/javaCalls.hpp"
@@ -167,7 +175,23 @@
 #include "gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp"
 #endif
 #ifdef COMPILER2
+#include "opto/addnode.hpp"
+#include "opto/block.hpp"
+#include "opto/callnode.hpp"
+#include "opto/cfgnode.hpp"
+#include "opto/chaitin.hpp"
+#include "opto/divnode.hpp"
+#include "opto/locknode.hpp"
+#include "opto/loopnode.hpp"
+#include "opto/machnode.hpp"
 #include "opto/matcher.hpp"
+#include "opto/mulnode.hpp"
+#include "opto/phaseX.hpp"
+#include "opto/parse.hpp"
+#include "opto/regalloc.hpp"
+#include "opto/rootnode.hpp"
+#include "opto/subnode.hpp"
+#include "opto/vectornode.hpp"
 #ifdef TARGET_ARCH_MODEL_x86_32
 # include "adfiles/adGlobals_x86_32.hpp"
 #endif
@@ -294,6 +318,10 @@
   nonstatic_field(instanceKlass,               _methods_annotations,                          objArrayOop)                           \
   nonstatic_field(instanceKlass,               _methods_parameter_annotations,                objArrayOop)                           \
   nonstatic_field(instanceKlass,               _methods_default_annotations,                  objArrayOop)                           \
+  nonstatic_field(instanceKlass,               _dependencies,                                 nmethodBucket*)                        \
+  nonstatic_field(nmethodBucket,               _nmethod,                                      nmethod*)                              \
+  nonstatic_field(nmethodBucket,               _count,                                        int)                                   \
+  nonstatic_field(nmethodBucket,               _next,                                         nmethodBucket*)                        \
   nonstatic_field(Klass,                       _super_check_offset,                           juint)                                 \
   nonstatic_field(Klass,                       _secondary_super_cache,                        klassOop)                              \
   nonstatic_field(Klass,                       _secondary_supers,                             objArrayOop)                           \
@@ -312,17 +340,26 @@
   nonstatic_field(methodKlass,                 _alloc_size,                                   juint)                                 \
   nonstatic_field(methodDataOopDesc,           _size,                                         int)                                   \
   nonstatic_field(methodDataOopDesc,           _method,                                       methodOop)                             \
+  nonstatic_field(methodDataOopDesc,           _data_size,                                    int)                                   \
+  nonstatic_field(methodDataOopDesc,           _data[0],                                      intptr_t)                              \
+  nonstatic_field(methodDataOopDesc,           _nof_decompiles,                               uint)                                  \
+  nonstatic_field(methodDataOopDesc,           _nof_overflow_recompiles,                      uint)                                  \
+  nonstatic_field(methodDataOopDesc,           _nof_overflow_traps,                           uint)                                  \
+  nonstatic_field(methodDataOopDesc,           _eflags,                                       intx)                                  \
+  nonstatic_field(methodDataOopDesc,           _arg_local,                                    intx)                                  \
+  nonstatic_field(methodDataOopDesc,           _arg_stack,                                    intx)                                  \
+  nonstatic_field(methodDataOopDesc,           _arg_returned,                                 intx)                                  \
   nonstatic_field(methodOopDesc,               _constMethod,                                  constMethodOop)                        \
   nonstatic_field(methodOopDesc,               _constants,                                    constantPoolOop)                       \
-  c2_nonstatic_field(methodOopDesc,            _method_data,                                  methodDataOop)                         \
-  c2_nonstatic_field(methodOopDesc,            _interpreter_invocation_count,                 int)                                   \
+  nonstatic_field(methodOopDesc,               _method_data,                                  methodDataOop)                         \
+  nonstatic_field(methodOopDesc,               _interpreter_invocation_count,                 int)                                   \
   nonstatic_field(methodOopDesc,               _access_flags,                                 AccessFlags)                           \
   nonstatic_field(methodOopDesc,               _vtable_index,                                 int)                                   \
   nonstatic_field(methodOopDesc,               _method_size,                                  u2)                                    \
   nonstatic_field(methodOopDesc,               _max_stack,                                    u2)                                    \
   nonstatic_field(methodOopDesc,               _max_locals,                                   u2)                                    \
   nonstatic_field(methodOopDesc,               _size_of_parameters,                           u2)                                    \
-  c2_nonstatic_field(methodOopDesc,            _interpreter_throwout_count,                   u2)                                    \
+  nonstatic_field(methodOopDesc,               _interpreter_throwout_count,                   u2)                                    \
   nonstatic_field(methodOopDesc,               _number_of_breakpoints,                        u2)                                    \
   nonstatic_field(methodOopDesc,               _invocation_counter,                           InvocationCounter)                     \
   nonstatic_field(methodOopDesc,               _backedge_counter,                             InvocationCounter)                     \
@@ -408,7 +445,7 @@
      static_field(Universe,                    _constantPoolCacheKlassObj,                    klassOop)                              \
      static_field(Universe,                    _compiledICHolderKlassObj,                     klassOop)                              \
      static_field(Universe,                    _systemObjArrayKlassObj,                       klassOop)                              \
-     static_field(Universe,                    _mirrors[0],                                   oop)                                  \
+     static_field(Universe,                    _mirrors[0],                                   oop)                                   \
      static_field(Universe,                    _main_thread_group,                            oop)                                   \
      static_field(Universe,                    _system_thread_group,                          oop)                                   \
      static_field(Universe,                    _the_empty_byte_array,                         typeArrayOop)                          \
@@ -709,6 +746,15 @@
   nonstatic_field(LoaderConstraintEntry,       _max_loaders,                                  int)                                   \
   nonstatic_field(LoaderConstraintEntry,       _loaders,                                      oop*)                                  \
                                                                                                                                      \
+  /*******************/                                                                                                              \
+  /* GrowableArrays  */                                                                                                              \
+  /*******************/                                                                                                              \
+                                                                                                                                     \
+  nonstatic_field(GenericGrowableArray,        _len,                                          int)                                   \
+  nonstatic_field(GenericGrowableArray,        _max,                                          int)                                   \
+  nonstatic_field(GenericGrowableArray,        _arena,                                        Arena*)                                \
+  nonstatic_field(GrowableArray<int>,               _data,                                         int*) \
+                                                                                                                                     \
   /********************************/                                                                                                 \
   /* CodeCache (NOTE: incomplete) */                                                                                                 \
   /********************************/                                                                                                 \
@@ -814,11 +860,14 @@
   nonstatic_field(nmethod,             _lock_count,                                   jint)                                  \
   nonstatic_field(nmethod,             _stack_traversal_mark,                         long)                                  \
   nonstatic_field(nmethod,             _compile_id,                                   int)                                   \
+  nonstatic_field(nmethod,             _exception_cache,                              ExceptionCache*)                       \
   nonstatic_field(nmethod,             _marked_for_deoptimization,                    bool)                                  \
                                                                                                                                      \
   nonstatic_field(RicochetBlob,        _bounce_offset,                                int)                                           \
   nonstatic_field(RicochetBlob,        _exception_offset,                             int)                                           \
                                                                                                                                      \
+  unchecked_c2_static_field(Deoptimization,         _trap_reason_name,                   void*)                                         \
+                                                                                                                                     \
   /********************************/                                                                                                 \
   /* JavaCalls (NOTE: incomplete) */                                                                                                 \
   /********************************/                                                                                                 \
@@ -839,6 +888,9 @@
      static_field(Threads,                     _number_of_non_daemon_threads,                 int)                                   \
      static_field(Threads,                     _return_code,                                  int)                                   \
                                                                                                                                      \
+  nonstatic_field(ThreadShadow,                _pending_exception,                            oop)                                   \
+  nonstatic_field(ThreadShadow,                _exception_file,                               const char*)                           \
+  nonstatic_field(ThreadShadow,                _exception_line,                               int)                                   \
    volatile_nonstatic_field(Thread,            _suspend_flags,                                uint32_t)                              \
   nonstatic_field(Thread,                      _active_handles,                               JNIHandleBlock*)                       \
   nonstatic_field(Thread,                      _tlab,                                         ThreadLocalAllocBuffer)                \
@@ -850,10 +902,22 @@
   nonstatic_field(JavaThread,                  _next,                                         JavaThread*)                           \
   nonstatic_field(JavaThread,                  _threadObj,                                    oop)                                   \
   nonstatic_field(JavaThread,                  _anchor,                                       JavaFrameAnchor)                       \
+  nonstatic_field(JavaThread,                  _vm_result,                                    oop)                                   \
+  nonstatic_field(JavaThread,                  _vm_result_2,                                  oop)                                   \
+  nonstatic_field(JavaThread,                  _pending_async_exception,                      oop)                                   \
+  volatile_nonstatic_field(JavaThread,         _exception_oop,                                oop)                                   \
+  volatile_nonstatic_field(JavaThread,         _exception_pc,                                 address)                               \
+  nonstatic_field(JavaThread,                  _is_compiling,                                 bool)                                  \
+  nonstatic_field(JavaThread,                  _special_runtime_exit_condition,               JavaThread::AsyncRequests)             \
+  nonstatic_field(JavaThread,                  _saved_exception_pc,                           address)                               \
    volatile_nonstatic_field(JavaThread,        _thread_state,                                 JavaThreadState)                       \
   nonstatic_field(JavaThread,                  _osthread,                                     OSThread*)                             \
   nonstatic_field(JavaThread,                  _stack_base,                                   address)                               \
   nonstatic_field(JavaThread,                  _stack_size,                                   size_t)                                \
+  nonstatic_field(JavaThread,                  _vframe_array_head,                            vframeArray*)                          \
+  nonstatic_field(JavaThread,                  _vframe_array_last,                            vframeArray*)                          \
+  nonstatic_field(Thread,                      _resource_area,                                ResourceArea*)                         \
+  nonstatic_field(CompilerThread,              _env,                                          ciEnv*)                                \
                                                                                                                                      \
   /************/                                                                                                                     \
   /* OSThread */                                                                                                                     \
@@ -903,7 +967,83 @@
   /* Runtime1 (NOTE: incomplete) */                                                                                                  \
   /*******************************/                                                                                                  \
                                                                                                                                      \
-  unchecked_c1_static_field(Runtime1,          _blobs,                                        sizeof(Runtime1::_blobs)) /* NOTE: no type */ \
+  unchecked_c1_static_field(Runtime1,          _blobs,                                 sizeof(Runtime1::_blobs)) /* NOTE: no type */ \
+                                                                                                                                     \
+  /**************/                                                                                                                   \
+  /* allocation */                                                                                                                   \
+  /**************/                                                                                                                   \
+                                                                                                                                     \
+  nonstatic_field(Chunk, _next, Chunk*)                                                                                              \
+  nonstatic_field(Chunk, _len, const size_t)                                                                                         \
+                                                                                                                                     \
+  nonstatic_field(Arena, _first, Chunk*)                                                                                             \
+  nonstatic_field(Arena, _chunk, Chunk*)                                                                                             \
+  nonstatic_field(Arena, _hwm, char*)                                                                                                \
+  nonstatic_field(Arena, _max, char*)                                                                                                \
+                                                                                                                                     \
+  /************/                                                                                                                     \
+  /* CI */                                                                                                                           \
+  /************/                                                                                                                     \
+                                                                                                                                     \
+ nonstatic_field(ciEnv,               _system_dictionary_modification_counter, int)                                                  \
+ nonstatic_field(ciEnv,               _compiler_data, void*)                                                                         \
+ nonstatic_field(ciEnv,               _failure_reason, const char*)                                                                  \
+ nonstatic_field(ciEnv,               _factory, ciObjectFactory*)                                                                    \
+ nonstatic_field(ciEnv,               _dependencies, Dependencies*)                                                                  \
+ nonstatic_field(ciEnv,               _task, CompileTask*)                                                                           \
+ nonstatic_field(ciEnv,               _arena, Arena*)                                                                                \
+                                                                                                                                     \
+ nonstatic_field(ciObject,    _handle, jobject)                                                                                      \
+ nonstatic_field(ciObject,    _klass, ciKlass*)                                                                                      \
+ nonstatic_field(ciObject,    _ident, uint)                                                                                          \
+                                                                                                                                     \
+ nonstatic_field(ciSymbol,    _ident, uint)                                                                                          \
+ nonstatic_field(ciSymbol,    _symbol, Symbol*)                                                                                      \
+                                                                                                                                     \
+ nonstatic_field(ciType,    _basic_type, BasicType)                                                                                  \
+                                                                                                                                     \
+ nonstatic_field(ciKlass,   _name, ciSymbol*)                                                                                        \
+                                                                                                                                     \
+ nonstatic_field(ciArrayKlass,   _dimension, jint)                                                                                   \
+                                                                                                                                     \
+ nonstatic_field(ciObjArrayKlass, _element_klass, ciKlass*)                                                                          \
+ nonstatic_field(ciObjArrayKlass, _base_element_klass, ciKlass*)                                                                     \
+                                                                                                                                     \
+ nonstatic_field(ciInstanceKlass,   _init_state, instanceKlass::ClassState)                                                          \
+ nonstatic_field(ciInstanceKlass,   _is_shared,  bool)                                                                               \
+                                                                                                                                     \
+ nonstatic_field(ciMethod,     _interpreter_invocation_count, int)                                                                   \
+ nonstatic_field(ciMethod,     _interpreter_throwout_count, int)                                                                     \
+                                                                                                                                     \
+ nonstatic_field(ciMethodData, _data_size, int)                                                                                      \
+ nonstatic_field(ciMethodData, _state, u_char)                                                                                       \
+ nonstatic_field(ciMethodData, _extra_data_size, int)                                                                                \
+ nonstatic_field(ciMethodData, _data, intptr_t*)                                                                                     \
+ nonstatic_field(ciMethodData, _hint_di, int)                                                                                        \
+ nonstatic_field(ciMethodData, _eflags, intx)                                                                                        \
+ nonstatic_field(ciMethodData, _arg_local, intx)                                                                                     \
+ nonstatic_field(ciMethodData, _arg_stack, intx)                                                                                     \
+ nonstatic_field(ciMethodData, _arg_returned, intx)                                                                                  \
+ nonstatic_field(ciMethodData, _current_mileage, int)                                                                                \
+ nonstatic_field(ciMethodData, _orig, methodDataOopDesc)                                                                             \
+                                                                                                                                     \
+ nonstatic_field(ciField,     _holder, ciInstanceKlass*)                                                                             \
+ nonstatic_field(ciField,     _name, ciSymbol*)                                                                                      \
+ nonstatic_field(ciField,     _signature, ciSymbol*)                                                                                 \
+ nonstatic_field(ciField,     _offset, int)                                                                                          \
+ nonstatic_field(ciField,     _is_constant, bool)                                                                                    \
+ nonstatic_field(ciField,     _constant_value, ciConstant)                                                                           \
+                                                                                                                                     \
+ nonstatic_field(ciObjectFactory,     _ci_objects, GrowableArray<ciObject*>*)                                                        \
+ nonstatic_field(ciObjectFactory,     _symbols, GrowableArray<ciSymbol*>*)                                                           \
+ nonstatic_field(ciObjectFactory,     _unloaded_methods, GrowableArray<ciMethod*>*)                                                  \
+                                                                                                                                     \
+ nonstatic_field(ciConstant,     _type, BasicType)                                                                                   \
+ nonstatic_field(ciConstant,     _value._int, jint)                                                                                  \
+ nonstatic_field(ciConstant,     _value._long, jlong)                                                                                \
+ nonstatic_field(ciConstant,     _value._float, jfloat)                                                                              \
+ nonstatic_field(ciConstant,     _value._double, jdouble)                                                                            \
+ nonstatic_field(ciConstant,     _value._object, ciObject*)                                                                          \
                                                                                                                                      \
   /************/                                                                                                                     \
   /* Monitors */                                                                                                                     \
@@ -925,7 +1065,114 @@
   /* Matcher (C2 only) */                                                                                                            \
   /*********************/                                                                                                            \
                                                                                                                                      \
-  unchecked_c2_static_field(Matcher,           _regEncode,                                    sizeof(Matcher::_regEncode)) /* NOTE: no type */ \
+  unchecked_c2_static_field(Matcher,           _regEncode,                          sizeof(Matcher::_regEncode)) /* NOTE: no type */ \
+                                                                                                                                     \
+  c2_nonstatic_field(Node,               _in,                      Node**)                                                           \
+  c2_nonstatic_field(Node,               _out,                     Node**)                                                           \
+  c2_nonstatic_field(Node,               _cnt,                     node_idx_t)                                                       \
+  c2_nonstatic_field(Node,               _max,                     node_idx_t)                                                       \
+  c2_nonstatic_field(Node,               _outcnt,                  node_idx_t)                                                       \
+  c2_nonstatic_field(Node,               _outmax,                  node_idx_t)                                                       \
+  c2_nonstatic_field(Node,               _idx,                     const node_idx_t)                                                 \
+  c2_nonstatic_field(Node,               _class_id,                jushort)                                                          \
+  c2_nonstatic_field(Node,               _flags,                   jushort)                                                          \
+                                                                                                                                     \
+  c2_nonstatic_field(Compile,            _root,                    RootNode*)                                                        \
+  c2_nonstatic_field(Compile,            _unique,                  uint)                                                             \
+  c2_nonstatic_field(Compile,            _entry_bci,               int)                                                              \
+  c2_nonstatic_field(Compile,            _top,                     Node*)                                                            \
+  c2_nonstatic_field(Compile,            _cfg,                     PhaseCFG*)                                                        \
+  c2_nonstatic_field(Compile,            _regalloc,                PhaseRegAlloc*)                                                   \
+  c2_nonstatic_field(Compile,            _method,                  ciMethod*)                                                        \
+  c2_nonstatic_field(Compile,            _compile_id,              const int)                                                        \
+  c2_nonstatic_field(Compile,            _save_argument_registers, const bool)                                                       \
+  c2_nonstatic_field(Compile,            _subsume_loads,           const bool)                                                       \
+  c2_nonstatic_field(Compile,            _do_escape_analysis,      const bool)                                                       \
+  c2_nonstatic_field(Compile,            _ilt,                     InlineTree*)                                                      \
+                                                                                                                                     \
+  c2_nonstatic_field(InlineTree,         _caller_jvms,             JVMState*)                                                        \
+  c2_nonstatic_field(InlineTree,         _method,                  ciMethod*)                                                        \
+  c2_nonstatic_field(InlineTree,         _caller_tree,             InlineTree*)                                                      \
+  c2_nonstatic_field(InlineTree,         _subtrees,                GrowableArray<InlineTree*>)                                       \
+                                                                                                                                     \
+  c2_nonstatic_field(OptoRegPair,        _first,                   short)                                                            \
+  c2_nonstatic_field(OptoRegPair,        _second,                  short)                                                            \
+                                                                                                                                     \
+  c2_nonstatic_field(JVMState,           _caller,                  JVMState*)                                                        \
+  c2_nonstatic_field(JVMState,           _depth,                   uint)                                                             \
+  c2_nonstatic_field(JVMState,           _locoff,                  uint)                                                             \
+  c2_nonstatic_field(JVMState,           _stkoff,                  uint)                                                             \
+  c2_nonstatic_field(JVMState,           _monoff,                  uint)                                                             \
+  c2_nonstatic_field(JVMState,           _scloff,                  uint)                                                             \
+  c2_nonstatic_field(JVMState,           _endoff,                  uint)                                                             \
+  c2_nonstatic_field(JVMState,           _sp,                      uint)                                                             \
+  c2_nonstatic_field(JVMState,           _bci,                     int)                                                              \
+  c2_nonstatic_field(JVMState,           _method,                  ciMethod*)                                                        \
+  c2_nonstatic_field(JVMState,           _map,                     SafePointNode*)                                                   \
+                                                                                                                                     \
+  c2_nonstatic_field(SafePointNode,      _jvms,                    JVMState* const)                                                  \
+                                                                                                                                     \
+  c2_nonstatic_field(MachSafePointNode,  _jvms,                    JVMState*)                                                        \
+  c2_nonstatic_field(MachSafePointNode,  _jvmadj,                  uint)                                                             \
+                                                                                                                                     \
+  c2_nonstatic_field(MachIfNode,         _prob,                    jfloat)                                                           \
+  c2_nonstatic_field(MachIfNode,         _fcnt,                    jfloat)                                                           \
+                                                                                                                                     \
+  c2_nonstatic_field(CallNode,           _entry_point,             address)                                                          \
+                                                                                                                                     \
+  c2_nonstatic_field(CallJavaNode,       _method,                  ciMethod*)                                                        \
+                                                                                                                                     \
+  c2_nonstatic_field(CallRuntimeNode,    _name,                    const char*)                                                      \
+                                                                                                                                     \
+  c2_nonstatic_field(CallStaticJavaNode, _name,                    const char*)                                                      \
+                                                                                                                                     \
+  c2_nonstatic_field(MachCallJavaNode,   _method,                  ciMethod*)                                                        \
+  c2_nonstatic_field(MachCallJavaNode,   _bci,                     int)                                                              \
+                                                                                                                                     \
+  c2_nonstatic_field(MachCallStaticJavaNode, _name,                const char*)                                                      \
+                                                                                                                                     \
+  c2_nonstatic_field(MachCallRuntimeNode,  _name,                  const char*)                                                      \
+                                                                                                                                     \
+  c2_nonstatic_field(PhaseCFG,           _num_blocks,              uint)                                                             \
+  c2_nonstatic_field(PhaseCFG,           _blocks,                  Block_List)                                                       \
+  c2_nonstatic_field(PhaseCFG,           _bbs,                     Block_Array)                                                      \
+  c2_nonstatic_field(PhaseCFG,           _broot,                   Block*)                                                           \
+                                                                                                                                     \
+  c2_nonstatic_field(PhaseRegAlloc,      _node_regs,               OptoRegPair*)                                                     \
+  c2_nonstatic_field(PhaseRegAlloc,      _node_regs_max_index,     uint)                                                             \
+  c2_nonstatic_field(PhaseRegAlloc,      _framesize,               uint)                                                             \
+  c2_nonstatic_field(PhaseRegAlloc,      _max_reg,                 OptoReg::Name)                                                    \
+                                                                                                                                     \
+  c2_nonstatic_field(PhaseChaitin,       _trip_cnt,                int)                                                              \
+  c2_nonstatic_field(PhaseChaitin,       _alternate,               int)                                                              \
+  c2_nonstatic_field(PhaseChaitin,       _lo_degree,               uint)                                                             \
+  c2_nonstatic_field(PhaseChaitin,       _lo_stk_degree,           uint)                                                             \
+  c2_nonstatic_field(PhaseChaitin,       _hi_degree,               uint)                                                             \
+  c2_nonstatic_field(PhaseChaitin,       _simplified,              uint)                                                             \
+  c2_nonstatic_field(PhaseChaitin,       _maxlrg,                  uint)                                                             \
+                                                                                                                                     \
+  c2_nonstatic_field(Block,              _nodes,                   Node_List)                                                        \
+  c2_nonstatic_field(Block,              _succs,                   Block_Array)                                                      \
+  c2_nonstatic_field(Block,              _num_succs,               uint)                                                             \
+  c2_nonstatic_field(Block,              _pre_order,               uint)                                                             \
+  c2_nonstatic_field(Block,              _dom_depth,               uint)                                                             \
+  c2_nonstatic_field(Block,              _idom,                    Block*)                                                           \
+  c2_nonstatic_field(Block,              _freq,                    jfloat)                                                           \
+                                                                                                                                     \
+  c2_nonstatic_field(CFGElement,         _freq,                    jfloat)                                                           \
+                                                                                                                                     \
+  c2_nonstatic_field(Block_List,         _cnt,                     uint)                                                             \
+                                                                                                                                     \
+  c2_nonstatic_field(Block_Array,        _size,                    uint)                                                             \
+  c2_nonstatic_field(Block_Array,        _blocks,                  Block**)                                                          \
+  c2_nonstatic_field(Block_Array,        _arena,                   Arena*)                                                           \
+                                                                                                                                     \
+  c2_nonstatic_field(Node_List,          _cnt,                     uint)                                                             \
+                                                                                                                                     \
+  c2_nonstatic_field(Node_Array,         _max,                     uint)                                                             \
+  c2_nonstatic_field(Node_Array,         _nodes,                   Node**)                                                           \
+  c2_nonstatic_field(Node_Array,         _a,                       Arena*)                                                           \
+                                                                                                                                     \
                                                                                                                                      \
   /*********************/                                                                                                            \
   /* -XX flags         */                                                                                                            \
@@ -935,6 +1182,7 @@
   nonstatic_field(Flag,                        name,                                          const char*)                           \
   unchecked_nonstatic_field(Flag,              addr,                                          sizeof(void*)) /* NOTE: no type */     \
   nonstatic_field(Flag,                        kind,                                          const char*)                           \
+  nonstatic_field(Flag,                        origin,                                        FlagValueOrigin)                       \
   static_field(Flag,                           flags,                                         Flag*)                                 \
   static_field(Flag,                           numFlags,                                      size_t)                                \
                                                                                                                                      \
@@ -952,7 +1200,14 @@
   nonstatic_field(JDK_Version,                 _partially_initialized,                        bool)                                  \
   nonstatic_field(JDK_Version,                 _major,                                        unsigned char)                         \
                                                                                                                                      \
+  /*************************/                                                                                                        \
+  /* JVMTI */                                                                                                                        \
+  /*************************/                                                                                                        \
                                                                                                                                      \
+  static_field(JvmtiExport,                     _can_access_local_variables,                  bool)                                  \
+  static_field(JvmtiExport,                     _can_hotswap_or_post_breakpoint,              bool)                                  \
+  static_field(JvmtiExport,                     _can_post_on_exceptions,                      bool)                                  \
+  static_field(JvmtiExport,                     _can_walk_any_space,                          bool)                                  \
                                                                                                                                      \
   /*************/                                                                                                                    \
   /* Arguments */                                                                                                                    \
@@ -978,10 +1233,26 @@
   /* Miscellaneous fields */                                                                                                         \
   /************************/                                                                                                         \
                                                                                                                                      \
-  nonstatic_field(AccessFlags,                 _flags,                                        jint)                                  \
-  nonstatic_field(elapsedTimer,                _counter,                                      jlong)                                 \
-  nonstatic_field(elapsedTimer,                _active,                                       bool)                                  \
-  nonstatic_field(InvocationCounter,           _counter,                                      unsigned int)
+  nonstatic_field(CompileTask,                 _method,                                      jobject)                                \
+  nonstatic_field(CompileTask,                 _osr_bci,                                     int)                                    \
+  nonstatic_field(CompileTask,                 _comp_level,                                  int)                                    \
+  nonstatic_field(CompileTask,                 _compile_id,                                  uint)                                   \
+  nonstatic_field(CompileTask,                 _next,                                        CompileTask*)                           \
+  nonstatic_field(CompileTask,                 _prev,                                        CompileTask*)                           \
+                                                                                                                                     \
+  nonstatic_field(vframeArray,                 _next,                                        vframeArray*)                           \
+  nonstatic_field(vframeArray,                 _original,                                    frame)                                  \
+  nonstatic_field(vframeArray,                 _caller,                                      frame)                                  \
+  nonstatic_field(vframeArray,                 _frames,                                      int)                                    \
+                                                                                                                                     \
+  nonstatic_field(vframeArrayElement,          _frame,                                       frame)                                  \
+  nonstatic_field(vframeArrayElement,          _bci,                                         int)                                    \
+  nonstatic_field(vframeArrayElement,          _method,                                      methodOop)                              \
+                                                                                                                                     \
+  nonstatic_field(AccessFlags,                 _flags,                                       jint)                                   \
+  nonstatic_field(elapsedTimer,                _counter,                                     jlong)                                  \
+  nonstatic_field(elapsedTimer,                _active,                                      bool)                                   \
+  nonstatic_field(InvocationCounter,           _counter,                                     unsigned int)
 
   /* NOTE that we do not use the last_entry() macro here; it is used  */
   /* in vmStructs_<os>_<cpu>.hpp's VM_STRUCTS_OS_CPU macro (and must  */
@@ -1061,11 +1332,14 @@
   /* and are valid types for Fields.                                   */ \
   /*********************************************************************/ \
   declare_integer_type(bool)                                              \
+  declare_integer_type(short)                                             \
   declare_integer_type(int)                                               \
   declare_integer_type(long)                                              \
   declare_integer_type(char)                                              \
   declare_unsigned_integer_type(unsigned char)                            \
+  declare_unsigned_integer_type(u_char)                                   \
   declare_unsigned_integer_type(unsigned int)                             \
+  declare_unsigned_integer_type(uint)                                     \
   declare_unsigned_integer_type(unsigned short)                           \
   declare_unsigned_integer_type(unsigned long)                            \
   /* The compiler thinks this is a different type than */                 \
@@ -1080,7 +1354,6 @@
   declare_toplevel_type(int*)                                             \
   declare_toplevel_type(char*)                                            \
   declare_toplevel_type(char**)                                           \
-  declare_toplevel_type(const char*)                                      \
   declare_toplevel_type(u_char*)                                          \
   declare_toplevel_type(unsigned char*)                                   \
                                                                           \
@@ -1092,14 +1365,12 @@
                                                                           \
   declare_unsigned_integer_type(size_t)                                   \
   declare_integer_type(ssize_t)                                           \
-  declare_unsigned_integer_type(const size_t)                             \
   declare_integer_type(intx)                                              \
   declare_integer_type(intptr_t)                                          \
   declare_unsigned_integer_type(uintx)                                    \
   declare_unsigned_integer_type(uintptr_t)                                \
   declare_unsigned_integer_type(uint32_t)                                 \
   declare_unsigned_integer_type(uint64_t)                                 \
-  declare_integer_type(const int)                                         \
                                                                           \
   /*******************************************************************************/ \
   /* OopDesc and Klass hierarchies (NOTE: missing methodDataOop-related classes) */ \
@@ -1125,8 +1396,8 @@
            declare_type(klassKlass, Klass)                                \
            declare_type(klassOopDesc, oopDesc)                            \
            declare_type(markOopDesc, oopDesc)                             \
-   declare_type(methodDataKlass, Klass)                           \
-   declare_type(methodDataOopDesc, oopDesc)                       \
+   declare_type(methodDataKlass, Klass)                                   \
+   declare_type(methodDataOopDesc, oopDesc)                               \
            declare_type(methodKlass, Klass)                               \
            declare_type(constMethodKlass, Klass)                          \
            declare_type(methodOopDesc, oopDesc)                           \
@@ -1140,6 +1411,8 @@
            declare_toplevel_type(Symbol)                                  \
            declare_toplevel_type(Symbol*)                                 \
                                                                           \
+  declare_toplevel_type(nmethodBucket)                                    \
+                                                                          \
   /********/                                                              \
   /* Oops */                                                              \
   /********/                                                              \
@@ -1207,7 +1480,6 @@
   declare_toplevel_type(GenerationSpec)                                   \
   declare_toplevel_type(HeapWord)                                         \
   declare_toplevel_type(MemRegion)                                        \
-  declare_toplevel_type(const MemRegion)                                  \
   declare_toplevel_type(PermanentGenerationSpec)                          \
   declare_toplevel_type(ThreadLocalAllocBuffer)                           \
   declare_toplevel_type(VirtualSpace)                                     \
@@ -1268,6 +1540,12 @@
   declare_toplevel_type(SystemDictionary)                                 \
   declare_toplevel_type(ProtectionDomainEntry)                            \
                                                                           \
+  declare_toplevel_type(GenericGrowableArray)                             \
+  declare_toplevel_type(GrowableArray<int>)                               \
+  declare_toplevel_type(Arena)                                            \
+    declare_type(ResourceArea, Arena)                                     \
+  declare_toplevel_type(Chunk)                                            \
+                                                                          \
   /***********************************************************/           \
   /* Thread hierarchy (needed for run-time type information) */           \
   /***********************************************************/           \
@@ -1280,7 +1558,7 @@
            declare_type(JavaThread, Thread)                               \
            declare_type(JvmtiAgentThread, JavaThread)                     \
            declare_type(ServiceThread, JavaThread)                        \
-  declare_type(CompilerThread, JavaThread)                        \
+  declare_type(CompilerThread, JavaThread)                                \
   declare_toplevel_type(OSThread)                                         \
   declare_toplevel_type(JavaFrameAnchor)                                  \
                                                                           \
@@ -1346,6 +1624,11 @@
   /***************************************/                               \
                                                                           \
   declare_toplevel_type(PcDesc)                                           \
+  declare_toplevel_type(ExceptionCache)                                   \
+  declare_toplevel_type(PcDescCache)                                      \
+  declare_toplevel_type(Dependencies)                                     \
+  declare_toplevel_type(CompileTask)                                      \
+  declare_toplevel_type(Deoptimization)                                   \
                                                                           \
   /************************/                                              \
   /* OopMap and OopMapSet */                                              \
@@ -1372,6 +1655,7 @@
                                                                           \
   declare_toplevel_type(JNIHandles)                                       \
   declare_toplevel_type(JNIHandleBlock)                                   \
+  declare_toplevel_type(jobject)                                          \
                                                                           \
   /**********************/                                                \
   /* Runtime1 (C1 only) */                                                \
@@ -1392,9 +1676,349 @@
   /* Matcher (C2 only) */                                                 \
   /*********************/                                                 \
                                                                           \
-  /* NOTE: this is not really a toplevel type, but we only need */        \
-  /* this one -- FIXME later if necessary */                              \
   declare_c2_toplevel_type(Matcher)                                       \
+  declare_c2_toplevel_type(Compile)                                       \
+  declare_c2_toplevel_type(InlineTree)                                    \
+  declare_c2_toplevel_type(OptoRegPair)                                   \
+  declare_c2_toplevel_type(JVMState)                                      \
+  declare_c2_toplevel_type(Phase)                                         \
+    declare_c2_type(PhaseCFG, Phase)                                      \
+    declare_c2_type(PhaseRegAlloc, Phase)                                 \
+    declare_c2_type(PhaseChaitin, PhaseRegAlloc)                          \
+  declare_c2_toplevel_type(CFGElement)                                    \
+    declare_c2_type(Block, CFGElement)                                    \
+  declare_c2_toplevel_type(Block_Array)                                   \
+    declare_c2_type(Block_List, Block_Array)                              \
+  declare_c2_toplevel_type(Node_Array)                                    \
+  declare_c2_type(Node_List, Node_Array)                                  \
+  declare_c2_type(Unique_Node_List, Node_List)                            \
+  declare_c2_toplevel_type(Node)                                          \
+  declare_c2_type(AddNode, Node)                                          \
+  declare_c2_type(AddINode, AddNode)                                      \
+  declare_c2_type(AddLNode, AddNode)                                      \
+  declare_c2_type(AddFNode, AddNode)                                      \
+  declare_c2_type(AddDNode, AddNode)                                      \
+  declare_c2_type(AddPNode, Node)                                         \
+  declare_c2_type(OrINode, AddNode)                                       \
+  declare_c2_type(OrLNode, AddNode)                                       \
+  declare_c2_type(XorINode, AddNode)                                      \
+  declare_c2_type(XorLNode, AddNode)                                      \
+  declare_c2_type(MaxNode, AddNode)                                       \
+  declare_c2_type(MaxINode, MaxNode)                                      \
+  declare_c2_type(MinINode, MaxNode)                                      \
+  declare_c2_type(StartNode, MultiNode)                                   \
+  declare_c2_type(StartOSRNode, StartNode)                                \
+  declare_c2_type(ParmNode, ProjNode)                                     \
+  declare_c2_type(ReturnNode, Node)                                       \
+  declare_c2_type(RethrowNode, Node)                                      \
+  declare_c2_type(TailCallNode, ReturnNode)                               \
+  declare_c2_type(TailJumpNode, ReturnNode)                               \
+  declare_c2_type(SafePointNode, MultiNode)                               \
+  declare_c2_type(CallNode, SafePointNode)                                \
+  declare_c2_type(CallJavaNode, CallNode)                                 \
+  declare_c2_type(CallStaticJavaNode, CallJavaNode)                       \
+  declare_c2_type(CallDynamicJavaNode, CallJavaNode)                      \
+  declare_c2_type(CallRuntimeNode, CallNode)                              \
+  declare_c2_type(CallLeafNode, CallRuntimeNode)                          \
+  declare_c2_type(CallLeafNoFPNode, CallLeafNode)                         \
+  declare_c2_type(AllocateNode, CallNode)                                 \
+  declare_c2_type(AllocateArrayNode, AllocateNode)                        \
+  declare_c2_type(LockNode, AbstractLockNode)                             \
+  declare_c2_type(UnlockNode, AbstractLockNode)                           \
+  declare_c2_type(FastLockNode, CmpNode)                                  \
+  declare_c2_type(FastUnlockNode, CmpNode)                                \
+  declare_c2_type(RegionNode, Node)                                       \
+  declare_c2_type(JProjNode, ProjNode)                                    \
+  declare_c2_type(PhiNode, TypeNode)                                      \
+  declare_c2_type(GotoNode, Node)                                         \
+  declare_c2_type(CProjNode, ProjNode)                                    \
+  declare_c2_type(MultiBranchNode, MultiNode)                             \
+  declare_c2_type(IfNode, MultiBranchNode)                                \
+  declare_c2_type(IfTrueNode, CProjNode)                                  \
+  declare_c2_type(IfFalseNode, CProjNode)                                 \
+  declare_c2_type(PCTableNode, MultiBranchNode)                           \
+  declare_c2_type(JumpNode, PCTableNode)                                  \
+  declare_c2_type(JumpProjNode, JProjNode)                                \
+  declare_c2_type(CatchNode, PCTableNode)                                 \
+  declare_c2_type(CatchProjNode, CProjNode)                               \
+  declare_c2_type(CreateExNode, TypeNode)                                 \
+  declare_c2_type(ClearArrayNode, Node)                                   \
+  declare_c2_type(NeverBranchNode, MultiBranchNode)                       \
+  declare_c2_type(ConNode, TypeNode)                                      \
+  declare_c2_type(ConINode, ConNode)                                      \
+  declare_c2_type(ConPNode, ConNode)                                      \
+  declare_c2_type(ConNNode, ConNode)                                      \
+  declare_c2_type(ConLNode, ConNode)                                      \
+  declare_c2_type(ConFNode, ConNode)                                      \
+  declare_c2_type(ConDNode, ConNode)                                      \
+  declare_c2_type(BinaryNode, Node)                                       \
+  declare_c2_type(CMoveNode, TypeNode)                                    \
+  declare_c2_type(CMoveDNode, CMoveNode)                                  \
+  declare_c2_type(CMoveFNode, CMoveNode)                                  \
+  declare_c2_type(CMoveINode, CMoveNode)                                  \
+  declare_c2_type(CMoveLNode, CMoveNode)                                  \
+  declare_c2_type(CMovePNode, CMoveNode)                                  \
+  declare_c2_type(CMoveNNode, CMoveNode)                                  \
+  declare_c2_type(EncodePNode, TypeNode)                                  \
+  declare_c2_type(DecodeNNode, TypeNode)                                  \
+  declare_c2_type(ConstraintCastNode, TypeNode)                           \
+  declare_c2_type(CastIINode, ConstraintCastNode)                         \
+  declare_c2_type(CastPPNode, ConstraintCastNode)                         \
+  declare_c2_type(CheckCastPPNode, TypeNode)                              \
+  declare_c2_type(Conv2BNode, Node)                                       \
+  declare_c2_type(ConvD2FNode, Node)                                      \
+  declare_c2_type(ConvD2INode, Node)                                      \
+  declare_c2_type(ConvD2LNode, Node)                                      \
+  declare_c2_type(ConvF2DNode, Node)                                      \
+  declare_c2_type(ConvF2INode, Node)                                      \
+  declare_c2_type(ConvF2LNode, Node)                                      \
+  declare_c2_type(ConvI2DNode, Node)                                      \
+  declare_c2_type(ConvI2FNode, Node)                                      \
+  declare_c2_type(ConvI2LNode, TypeNode)                                  \
+  declare_c2_type(ConvL2DNode, Node)                                      \
+  declare_c2_type(ConvL2FNode, Node)                                      \
+  declare_c2_type(ConvL2INode, Node)                                      \
+  declare_c2_type(CastX2PNode, Node)                                      \
+  declare_c2_type(CastP2XNode, Node)                                      \
+  declare_c2_type(MemBarNode, MultiNode)                                  \
+  declare_c2_type(MemBarAcquireNode, MemBarNode)                          \
+  declare_c2_type(MemBarReleaseNode, MemBarNode)                          \
+  declare_c2_type(MemBarVolatileNode, MemBarNode)                         \
+  declare_c2_type(MemBarCPUOrderNode, MemBarNode)                         \
+  declare_c2_type(InitializeNode, MemBarNode)                             \
+  declare_c2_type(ThreadLocalNode, Node)                                  \
+  declare_c2_type(Opaque1Node, Node)                                      \
+  declare_c2_type(Opaque2Node, Node)                                      \
+  declare_c2_type(PartialSubtypeCheckNode, Node)                          \
+  declare_c2_type(MoveI2FNode, Node)                                      \
+  declare_c2_type(MoveL2DNode, Node)                                      \
+  declare_c2_type(MoveF2INode, Node)                                      \
+  declare_c2_type(MoveD2LNode, Node)                                      \
+  declare_c2_type(DivINode, Node)                                         \
+  declare_c2_type(DivLNode, Node)                                         \
+  declare_c2_type(DivFNode, Node)                                         \
+  declare_c2_type(DivDNode, Node)                                         \
+  declare_c2_type(ModINode, Node)                                         \
+  declare_c2_type(ModLNode, Node)                                         \
+  declare_c2_type(ModFNode, Node)                                         \
+  declare_c2_type(ModDNode, Node)                                         \
+  declare_c2_type(DivModNode, MultiNode)                                  \
+  declare_c2_type(DivModINode, DivModNode)                                \
+  declare_c2_type(DivModLNode, DivModNode)                                \
+  declare_c2_type(BoxLockNode, Node)                                      \
+  declare_c2_type(LoopNode, RegionNode)                                   \
+  declare_c2_type(CountedLoopNode, LoopNode)                              \
+  declare_c2_type(CountedLoopEndNode, IfNode)                             \
+  declare_c2_type(MachNode, Node)                                         \
+  declare_c2_type(MachIdealNode, MachNode)                                \
+  declare_c2_type(MachTypeNode, MachNode)                                 \
+  declare_c2_type(MachBreakpointNode, MachIdealNode)                      \
+  declare_c2_type(MachUEPNode, MachIdealNode)                             \
+  declare_c2_type(MachPrologNode, MachIdealNode)                          \
+  declare_c2_type(MachEpilogNode, MachIdealNode)                          \
+  declare_c2_type(MachNopNode, MachIdealNode)                             \
+  declare_c2_type(MachSpillCopyNode, MachIdealNode)                       \
+  declare_c2_type(MachNullCheckNode, MachIdealNode)                       \
+  declare_c2_type(MachProjNode, ProjNode)                                 \
+  declare_c2_type(MachIfNode, MachNode)                                   \
+  declare_c2_type(MachFastLockNode, MachNode)                             \
+  declare_c2_type(MachReturnNode, MachNode)                               \
+  declare_c2_type(MachSafePointNode, MachReturnNode)                      \
+  declare_c2_type(MachCallNode, MachSafePointNode)                        \
+  declare_c2_type(MachCallJavaNode, MachCallNode)                         \
+  declare_c2_type(MachCallStaticJavaNode, MachCallJavaNode)               \
+  declare_c2_type(MachCallDynamicJavaNode, MachCallJavaNode)              \
+  declare_c2_type(MachCallRuntimeNode, MachCallNode)                      \
+  declare_c2_type(MachHaltNode, MachReturnNode)                           \
+  declare_c2_type(MachTempNode, MachNode)                                 \
+  declare_c2_type(MemNode, Node)                                          \
+  declare_c2_type(MergeMemNode, Node)                                     \
+  declare_c2_type(LoadNode, MemNode)                                      \
+  declare_c2_type(LoadBNode, LoadNode)                                    \
+  declare_c2_type(LoadUSNode, LoadNode)                                   \
+  declare_c2_type(LoadINode, LoadNode)                                    \
+  declare_c2_type(LoadRangeNode, LoadINode)                               \
+  declare_c2_type(LoadLNode, LoadNode)                                    \
+  declare_c2_type(LoadL_unalignedNode, LoadLNode)                         \
+  declare_c2_type(LoadFNode, LoadNode)                                    \
+  declare_c2_type(LoadDNode, LoadNode)                                    \
+  declare_c2_type(LoadD_unalignedNode, LoadDNode)                         \
+  declare_c2_type(LoadPNode, LoadNode)                                    \
+  declare_c2_type(LoadNNode, LoadNode)                                    \
+  declare_c2_type(LoadKlassNode, LoadPNode)                               \
+  declare_c2_type(LoadNKlassNode, LoadNNode)                              \
+  declare_c2_type(LoadSNode, LoadNode)                                    \
+  declare_c2_type(StoreNode, MemNode)                                     \
+  declare_c2_type(StoreBNode, StoreNode)                                  \
+  declare_c2_type(StoreCNode, StoreNode)                                  \
+  declare_c2_type(StoreINode, StoreNode)                                  \
+  declare_c2_type(StoreLNode, StoreNode)                                  \
+  declare_c2_type(StoreFNode, StoreNode)                                  \
+  declare_c2_type(StoreDNode, StoreNode)                                  \
+  declare_c2_type(StorePNode, StoreNode)                                  \
+  declare_c2_type(StoreNNode, StoreNode)                                  \
+  declare_c2_type(StoreCMNode, StoreNode)                                 \
+  declare_c2_type(LoadPLockedNode, LoadPNode)                             \
+  declare_c2_type(LoadLLockedNode, LoadLNode)                             \
+  declare_c2_type(SCMemProjNode, ProjNode)                                \
+  declare_c2_type(LoadStoreNode, Node)                                    \
+  declare_c2_type(StorePConditionalNode, LoadStoreNode)                   \
+  declare_c2_type(StoreLConditionalNode, LoadStoreNode)                   \
+  declare_c2_type(CompareAndSwapLNode, LoadStoreNode)                     \
+  declare_c2_type(CompareAndSwapINode, LoadStoreNode)                     \
+  declare_c2_type(CompareAndSwapPNode, LoadStoreNode)                     \
+  declare_c2_type(CompareAndSwapNNode, LoadStoreNode)                     \
+  declare_c2_type(PrefetchReadNode, Node)                                 \
+  declare_c2_type(PrefetchWriteNode, Node)                                \
+  declare_c2_type(MulNode, Node)                                          \
+  declare_c2_type(MulINode, MulNode)                                      \
+  declare_c2_type(MulLNode, MulNode)                                      \
+  declare_c2_type(MulFNode, MulNode)                                      \
+  declare_c2_type(MulDNode, MulNode)                                      \
+  declare_c2_type(MulHiLNode, Node)                                       \
+  declare_c2_type(AndINode, MulINode)                                     \
+  declare_c2_type(AndLNode, MulLNode)                                     \
+  declare_c2_type(LShiftINode, Node)                                      \
+  declare_c2_type(LShiftLNode, Node)                                      \
+  declare_c2_type(RShiftINode, Node)                                      \
+  declare_c2_type(RShiftLNode, Node)                                      \
+  declare_c2_type(URShiftINode, Node)                                     \
+  declare_c2_type(URShiftLNode, Node)                                     \
+  declare_c2_type(MultiNode, Node)                                        \
+  declare_c2_type(ProjNode, Node)                                         \
+  declare_c2_type(TypeNode, Node)                                         \
+  declare_c2_type(NodeHash, StackObj)                                     \
+  declare_c2_type(RootNode, LoopNode)                                     \
+  declare_c2_type(HaltNode, Node)                                         \
+  declare_c2_type(SubNode, Node)                                          \
+  declare_c2_type(SubINode, SubNode)                                      \
+  declare_c2_type(SubLNode, SubNode)                                      \
+  declare_c2_type(SubFPNode, SubNode)                                     \
+  declare_c2_type(SubFNode, SubFPNode)                                    \
+  declare_c2_type(SubDNode, SubFPNode)                                    \
+  declare_c2_type(CmpNode, SubNode)                                       \
+  declare_c2_type(CmpINode, CmpNode)                                      \
+  declare_c2_type(CmpUNode, CmpNode)                                      \
+  declare_c2_type(CmpPNode, CmpNode)                                      \
+  declare_c2_type(CmpNNode, CmpNode)                                      \
+  declare_c2_type(CmpLNode, CmpNode)                                      \
+  declare_c2_type(CmpL3Node, CmpLNode)                                    \
+  declare_c2_type(CmpFNode, CmpNode)                                      \
+  declare_c2_type(CmpF3Node, CmpFNode)                                    \
+  declare_c2_type(CmpDNode, CmpNode)                                      \
+  declare_c2_type(CmpD3Node, CmpDNode)                                    \
+  declare_c2_type(BoolNode, Node)                                         \
+  declare_c2_type(AbsNode, Node)                                          \
+  declare_c2_type(AbsINode, AbsNode)                                      \
+  declare_c2_type(AbsFNode, AbsNode)                                      \
+  declare_c2_type(AbsDNode, AbsNode)                                      \
+  declare_c2_type(CmpLTMaskNode, Node)                                    \
+  declare_c2_type(NegNode, Node)                                          \
+  declare_c2_type(NegFNode, NegNode)                                      \
+  declare_c2_type(NegDNode, NegNode)                                      \
+  declare_c2_type(CosDNode, Node)                                         \
+  declare_c2_type(SinDNode, Node)                                         \
+  declare_c2_type(TanDNode, Node)                                         \
+  declare_c2_type(AtanDNode, Node)                                        \
+  declare_c2_type(SqrtDNode, Node)                                        \
+  declare_c2_type(ExpDNode, Node)                                         \
+  declare_c2_type(LogDNode, Node)                                         \
+  declare_c2_type(Log10DNode, Node)                                       \
+  declare_c2_type(PowDNode, Node)                                         \
+  declare_c2_type(ReverseBytesINode, Node)                                \
+  declare_c2_type(ReverseBytesLNode, Node)                                \
+  declare_c2_type(VectorNode, Node)                                       \
+  declare_c2_type(AddVBNode, VectorNode)                                  \
+  declare_c2_type(AddVCNode, VectorNode)                                  \
+  declare_c2_type(AddVSNode, VectorNode)                                  \
+  declare_c2_type(AddVINode, VectorNode)                                  \
+  declare_c2_type(AddVLNode, VectorNode)                                  \
+  declare_c2_type(AddVFNode, VectorNode)                                  \
+  declare_c2_type(AddVDNode, VectorNode)                                  \
+  declare_c2_type(SubVBNode, VectorNode)                                  \
+  declare_c2_type(SubVCNode, VectorNode)                                  \
+  declare_c2_type(SubVSNode, VectorNode)                                  \
+  declare_c2_type(SubVINode, VectorNode)                                  \
+  declare_c2_type(SubVLNode, VectorNode)                                  \
+  declare_c2_type(SubVFNode, VectorNode)                                  \
+  declare_c2_type(SubVDNode, VectorNode)                                  \
+  declare_c2_type(MulVFNode, VectorNode)                                  \
+  declare_c2_type(MulVDNode, VectorNode)                                  \
+  declare_c2_type(DivVFNode, VectorNode)                                  \
+  declare_c2_type(DivVDNode, VectorNode)                                  \
+  declare_c2_type(LShiftVBNode, VectorNode)                               \
+  declare_c2_type(LShiftVCNode, VectorNode)                               \
+  declare_c2_type(LShiftVSNode, VectorNode)                               \
+  declare_c2_type(LShiftVINode, VectorNode)                               \
+  declare_c2_type(URShiftVBNode, VectorNode)                              \
+  declare_c2_type(URShiftVCNode, VectorNode)                              \
+  declare_c2_type(URShiftVSNode, VectorNode)                              \
+  declare_c2_type(URShiftVINode, VectorNode)                              \
+  declare_c2_type(AndVNode, VectorNode)                                   \
+  declare_c2_type(OrVNode, VectorNode)                                    \
+  declare_c2_type(XorVNode, VectorNode)                                   \
+  declare_c2_type(VectorLoadNode, LoadNode)                               \
+  declare_c2_type(Load16BNode, VectorLoadNode)                            \
+  declare_c2_type(Load8BNode, VectorLoadNode)                             \
+  declare_c2_type(Load4BNode, VectorLoadNode)                             \
+  declare_c2_type(Load8CNode, VectorLoadNode)                             \
+  declare_c2_type(Load4CNode, VectorLoadNode)                             \
+  declare_c2_type(Load2CNode, VectorLoadNode)                             \
+  declare_c2_type(Load8SNode, VectorLoadNode)                             \
+  declare_c2_type(Load4SNode, VectorLoadNode)                             \
+  declare_c2_type(Load2SNode, VectorLoadNode)                             \
+  declare_c2_type(Load4INode, VectorLoadNode)                             \
+  declare_c2_type(Load2INode, VectorLoadNode)                             \
+  declare_c2_type(Load2LNode, VectorLoadNode)                             \
+  declare_c2_type(Load4FNode, VectorLoadNode)                             \
+  declare_c2_type(Load2FNode, VectorLoadNode)                             \
+  declare_c2_type(Load2DNode, VectorLoadNode)                             \
+  declare_c2_type(VectorStoreNode, StoreNode)                             \
+  declare_c2_type(Store16BNode, VectorStoreNode)                          \
+  declare_c2_type(Store8BNode, VectorStoreNode)                           \
+  declare_c2_type(Store4BNode, VectorStoreNode)                           \
+  declare_c2_type(Store8CNode, VectorStoreNode)                           \
+  declare_c2_type(Store4CNode, VectorStoreNode)                           \
+  declare_c2_type(Store2CNode, VectorStoreNode)                           \
+  declare_c2_type(Store4INode, VectorStoreNode)                           \
+  declare_c2_type(Store2INode, VectorStoreNode)                           \
+  declare_c2_type(Store2LNode, VectorStoreNode)                           \
+  declare_c2_type(Store4FNode, VectorStoreNode)                           \
+  declare_c2_type(Store2FNode, VectorStoreNode)                           \
+  declare_c2_type(Store2DNode, VectorStoreNode)                           \
+  declare_c2_type(Replicate16BNode, VectorNode)                           \
+  declare_c2_type(Replicate8BNode, VectorNode)                            \
+  declare_c2_type(Replicate4BNode, VectorNode)                            \
+  declare_c2_type(Replicate8CNode, VectorNode)                            \
+  declare_c2_type(Replicate4CNode, VectorNode)                            \
+  declare_c2_type(Replicate2CNode, VectorNode)                            \
+  declare_c2_type(Replicate8SNode, VectorNode)                            \
+  declare_c2_type(Replicate4SNode, VectorNode)                            \
+  declare_c2_type(Replicate2SNode, VectorNode)                            \
+  declare_c2_type(Replicate4INode, VectorNode)                            \
+  declare_c2_type(Replicate2INode, VectorNode)                            \
+  declare_c2_type(Replicate2LNode, VectorNode)                            \
+  declare_c2_type(Replicate4FNode, VectorNode)                            \
+  declare_c2_type(Replicate2FNode, VectorNode)                            \
+  declare_c2_type(Replicate2DNode, VectorNode)                            \
+  declare_c2_type(PackNode, VectorNode)                                   \
+  declare_c2_type(PackBNode, PackNode)                                    \
+  declare_c2_type(PackCNode, PackNode)                                    \
+  declare_c2_type(PackSNode, PackNode)                                    \
+  declare_c2_type(PackINode, PackNode)                                    \
+  declare_c2_type(PackLNode, PackNode)                                    \
+  declare_c2_type(PackFNode, PackNode)                                    \
+  declare_c2_type(PackDNode, PackNode)                                    \
+  declare_c2_type(Pack2x1BNode, PackNode)                                 \
+  declare_c2_type(Pack2x2BNode, PackNode)                                 \
+  declare_c2_type(ExtractNode, Node)                                      \
+  declare_c2_type(ExtractBNode, ExtractNode)                              \
+  declare_c2_type(ExtractCNode, ExtractNode)                              \
+  declare_c2_type(ExtractSNode, ExtractNode)                              \
+  declare_c2_type(ExtractINode, ExtractNode)                              \
+  declare_c2_type(ExtractLNode, ExtractNode)                              \
+  declare_c2_type(ExtractFNode, ExtractNode)                              \
+  declare_c2_type(ExtractDNode, ExtractNode)                              \
                                                                           \
   /*********************/                                                 \
   /* Adapter Blob Entries */                                              \
@@ -1402,6 +2026,32 @@
   declare_toplevel_type(AdapterHandlerEntry)                              \
   declare_toplevel_type(AdapterHandlerEntry*)                             \
                                                                           \
+  /*********************/                                                 \
+  /* CI */                                                                \
+  /*********************/                                                 \
+  declare_toplevel_type(ciEnv)                                            \
+  declare_toplevel_type(ciObjectFactory)                                  \
+  declare_toplevel_type(ciConstant)                                       \
+  declare_toplevel_type(ciField)                                          \
+  declare_toplevel_type(void*)                                            \
+  declare_toplevel_type(ciObject)                                         \
+  declare_type(ciMethod, ciObject)                                        \
+  declare_type(ciMethodData, ciObject)                                    \
+  declare_type(ciType, ciObject)                                          \
+  declare_type(ciInstance, ciObject)                                      \
+  declare_toplevel_type(ciSymbol)                                         \
+  declare_type(ciKlass, ciType)                                           \
+  declare_type(ciInstanceKlass, ciKlass)                                  \
+  declare_type(ciArrayKlass, ciKlass)                                     \
+  declare_type(ciTypeArrayKlass, ciArrayKlass)                            \
+  declare_type(ciObjArrayKlass, ciArrayKlass)                             \
+  declare_type(ciMethodKlass, ciKlass)                                    \
+  declare_type(ciKlassKlass, ciKlass)                                     \
+  declare_type(ciInstanceKlassKlass, ciKlassKlass)                        \
+  declare_type(ciArrayKlassKlass, ciKlassKlass)                           \
+  declare_type(ciTypeArrayKlassKlass, ciArrayKlassKlass)                  \
+  declare_type(ciObjArrayKlassKlass, ciArrayKlassKlass)                   \
+                                                                          \
   /********************/                                                  \
   /* -XX flags        */                                                  \
   /********************/                                                  \
@@ -1410,6 +2060,12 @@
   declare_toplevel_type(Flag*)                                            \
                                                                           \
   /********************/                                                  \
+  /* JVMTI            */                                                  \
+  /********************/                                                  \
+                                                                          \
+  declare_toplevel_type(JvmtiExport)                                      \
+                                                                          \
+  /********************/                                                  \
   /* JDK/VM version   */                                                  \
   /********************/                                                  \
                                                                           \
@@ -1435,19 +2091,24 @@
    declare_integer_type(Location::Type)                                   \
    declare_integer_type(Location::Where)                                  \
    declare_integer_type(PermGen::Name)                                    \
+   declare_integer_type(FlagValueOrigin)                                  \
+   COMPILER2_PRESENT(declare_integer_type(OptoReg::Name))                 \
                                                                           \
    declare_integer_type(AccessFlags)  /* FIXME: wrong type (not integer) */\
   declare_toplevel_type(address)      /* FIXME: should this be an integer type? */\
+   declare_integer_type(BasicType)   /* FIXME: wrong type (not integer) */\
   declare_toplevel_type(BreakpointInfo)                                   \
   declare_toplevel_type(BreakpointInfo*)                                  \
   declare_toplevel_type(CodeBlob*)                                        \
   declare_toplevel_type(CompressedWriteStream*)                           \
   declare_toplevel_type(ConstantPoolCacheEntry)                           \
   declare_toplevel_type(elapsedTimer)                                     \
+  declare_toplevel_type(frame)                                            \
   declare_toplevel_type(intptr_t*)                                        \
    declare_unsigned_integer_type(InvocationCounter) /* FIXME: wrong type (not integer) */ \
   declare_toplevel_type(JavaThread*)                                      \
   declare_toplevel_type(java_lang_Class)                                  \
+  declare_integer_type(JavaThread::AsyncRequests)                         \
   declare_toplevel_type(jbyte*)                                           \
   declare_toplevel_type(jbyte**)                                          \
   declare_toplevel_type(jint*)                                            \
@@ -1460,6 +2121,7 @@
   declare_toplevel_type(jmethodID*)                                       \
   declare_toplevel_type(Mutex*)                                           \
   declare_toplevel_type(nmethod*)                                         \
+  COMPILER2_PRESENT(declare_unsigned_integer_type(node_idx_t))            \
   declare_toplevel_type(ObjectMonitor*)                                   \
   declare_toplevel_type(oop*)                                             \
   declare_toplevel_type(OopMap**)                                         \
@@ -1470,7 +2132,10 @@
    declare_integer_type(ReferenceType)                                    \
   declare_toplevel_type(StubQueue*)                                       \
   declare_toplevel_type(Thread*)                                          \
-  declare_toplevel_type(Universe)
+  declare_toplevel_type(Universe)                                         \
+  declare_toplevel_type(vframeArray)                                      \
+  declare_toplevel_type(vframeArrayElement)
+
 
   /* NOTE that we do not use the last_entry() macro here; it is used  */
   /* in vmStructs_<os>_<cpu>.hpp's VM_TYPES_OS_CPU macro (and must be */
@@ -1775,6 +2440,27 @@
   declare_constant(Location::on_stack)                                    \
   declare_constant(Location::in_register)                                 \
                                                                           \
+  declare_constant(Deoptimization::Reason_many)                           \
+  declare_constant(Deoptimization::Reason_none)                           \
+  declare_constant(Deoptimization::Reason_null_check)                     \
+  declare_constant(Deoptimization::Reason_null_assert)                    \
+  declare_constant(Deoptimization::Reason_range_check)                    \
+  declare_constant(Deoptimization::Reason_class_check)                    \
+  declare_constant(Deoptimization::Reason_array_check)                    \
+  declare_constant(Deoptimization::Reason_intrinsic)                      \
+  declare_constant(Deoptimization::Reason_bimorphic)                      \
+  declare_constant(Deoptimization::Reason_unloaded)                       \
+  declare_constant(Deoptimization::Reason_uninitialized)                  \
+  declare_constant(Deoptimization::Reason_unreached)                      \
+  declare_constant(Deoptimization::Reason_unhandled)                      \
+  declare_constant(Deoptimization::Reason_constraint)                     \
+  declare_constant(Deoptimization::Reason_div0_check)                     \
+  declare_constant(Deoptimization::Reason_age)                            \
+  declare_constant(Deoptimization::Reason_predicate)                      \
+  declare_constant(Deoptimization::Reason_loop_limit_check)               \
+  declare_constant(Deoptimization::Reason_LIMIT)                          \
+  declare_constant(Deoptimization::Reason_RECORDED_LIMIT)                 \
+                                                                          \
   /*********************/                                                 \
   /* Matcher (C2 only) */                                                 \
   /*********************/                                                 \
@@ -2478,12 +3164,14 @@
   {
     VMTypeEntry* types = origtypes;
     while (types->typeName != NULL) {
-      if (!strcmp(typeName, types->typeName)) {
+      if (strcmp(typeName, types->typeName) == 0) {
+        // Found it
         return 1;
       }
       ++types;
     }
   }
+  // Search for the base type by peeling off const and *
   size_t len = strlen(typeName);
   if (typeName[len-1] == '*') {
     char * s = new char[len];