diff a/src/hotspot/share/opto/compile.hpp b/src/hotspot/share/opto/compile.hpp
--- a/src/hotspot/share/opto/compile.hpp
+++ b/src/hotspot/share/opto/compile.hpp
@@ -180,27 +180,30 @@
   const bool _do_escape_analysis;    // Do escape analysis.
   const bool _do_iterative_escape_analysis;  // Do iterative escape analysis.
   const bool _do_reduce_allocation_merges;  // Do try to reduce allocation merges.
   const bool _eliminate_boxing;      // Do boxing elimination.
   const bool _do_locks_coarsening;   // Do locks coarsening
+  const bool _for_preload;           // Generate code for preload (before Java method execution), do class init barriers
   const bool _do_superword;          // Do SuperWord
   const bool _install_code;          // Install the code that was compiled
  public:
   Options(bool subsume_loads,
           bool do_escape_analysis,
           bool do_iterative_escape_analysis,
           bool do_reduce_allocation_merges,
           bool eliminate_boxing,
           bool do_locks_coarsening,
           bool do_superword,
+          bool for_preload,
           bool install_code) :
           _subsume_loads(subsume_loads),
           _do_escape_analysis(do_escape_analysis),
           _do_iterative_escape_analysis(do_iterative_escape_analysis),
           _do_reduce_allocation_merges(do_reduce_allocation_merges),
           _eliminate_boxing(eliminate_boxing),
           _do_locks_coarsening(do_locks_coarsening),
+          _for_preload(for_preload),
           _do_superword(do_superword),
           _install_code(install_code) {
   }
 
   static Options for_runtime_stub() {
@@ -209,10 +212,11 @@
        /* do_escape_analysis = */ false,
        /* do_iterative_escape_analysis = */ false,
        /* do_reduce_allocation_merges = */ false,
        /* eliminate_boxing = */ false,
        /* do_lock_coarsening = */ false,
+       /* for_preload = */ false,
        /* do_superword = */ true,
        /* install_code = */ true
     );
   }
 };
@@ -355,10 +359,11 @@
   // JSR 292
   bool                  _has_method_handle_invokes; // True if this method has MethodHandle invokes.
   bool                  _has_monitors;          // Metadata transfered to nmethod to enable Continuations lock-detection fastpath
   bool                  _has_scoped_access;     // For shared scope closure
   bool                  _clinit_barrier_on_entry; // True if clinit barrier is needed on nmethod entry
+  bool                  _has_clinit_barriers;   // True if compiled code has clinit barriers
   int                   _loop_opts_cnt;         // loop opts round
   uint                  _stress_seed;           // Seed for stress testing
 
   // Compilation environment.
   Arena                 _comp_arena;            // Arena with lifetime equivalent to Compile
@@ -599,10 +604,13 @@
   bool              should_install_code() const { return _options._install_code; }
   /** Do locks coarsening. */
   bool              do_locks_coarsening() const { return _options._do_locks_coarsening; }
   bool              do_superword() const        { return _options._do_superword; }
 
+  bool              do_clinit_barriers()  const { return _options._for_preload; }
+  bool              for_preload()         const { return _options._for_preload; }
+
   // Other fixed compilation parameters.
   ciMethod*         method() const              { return _method; }
   int               entry_bci() const           { return _entry_bci; }
   bool              is_osr_compilation() const  { return _entry_bci != InvocationEntryBci; }
   bool              is_method_compilation() const { return (_method != nullptr && !_method->flags().is_native()); }
@@ -677,10 +685,12 @@
   void          set_clinit_barrier_on_entry(bool z) { _clinit_barrier_on_entry = z; }
   bool              has_monitors() const         { return _has_monitors; }
   void          set_has_monitors(bool v)         { _has_monitors = v; }
   bool              has_scoped_access() const    { return _has_scoped_access; }
   void          set_has_scoped_access(bool v)    { _has_scoped_access = v; }
+  bool              has_clinit_barriers()        { return _has_clinit_barriers; }
+  void          set_has_clinit_barriers(bool z)  { _has_clinit_barriers = z; }
 
   // check the CompilerOracle for special behaviours for this compile
   bool          method_has_option(CompileCommandEnum option) {
     return method() != nullptr && method()->has_option(option);
   }
