The compiler component options initialization occurs in several stages; this doc outlines the order in which the initialization and processing occurs, and describes the various stages.
- Frontend preprocess
- JIT preprocess
- Process options (excluding option sets)
- JIT postprocess
- Frontend postprocess
- Frontend late postprocess
- JIT late postprocess
- Process option sets
- JIT late postprocess on option sets
- Frontend late postprocess on option sets
Since the compiler processes both -Xjit
and -Xaot
, both of which
are represented by TR::Options
, the initialization/processing
occurs twice in two initialization phases:
onLoadInternal
- Called when the JVM is in the
JIT_INITIALIZED
init phase. - This is where the global AOT and JIT
TR::Options
objects are allocated, initialized, and processed.
- Called when the JVM is in the
aboutToBootstrap
- Called when the JVM is in the
ABOUT_TO_BOOTSTRAP
init phase. - This is where late post processing occurs, as well as the processing of option sets.
- Called when the JVM is in the
It is worth noting that methods below with the fe
prefix perform
initialization that is specific to the OpenJ9 runtime whereas
methods with the jit
prefix perform initialization that is
common across all runtimes that consume OMR.
onLoadInternal
calls processOptionsAOT
and processOptionsJIT
to
process the -Xaot
and -Xjit
options respectively. Each of these
call fePreProcess
, jitPreProcess
, and processOptions
. The
preprocessing is used to initialize options with default values prior
to parsing and processing options passed in via the command-line.
processOptions
calls processOptionSet
, jitPostProcess
, and
either fePostProcessAOT
or fePostProcessJIT
(depending on
whether the -Xaot
or -Xjit
options respectively are currently
being processed). At this point in the options processing procedure,
processOptionSet
parses and processes (via processOption
) only
global options (i.e., options that are not specified to only apply
to specific methods); when an option set is found, it stores it for
processing later. The postprocessing is used for initialization taking
into account the fact that options may have been set via the
command-line.
aboutToBootstrap
calls latePostProcessAOT
and latePostProcessJIT
to set options that can only be set once the JVM has done most of the
necessary initialization and is ready to bootstrap. Each of these
calls latePostProcess
, which first calls feLatePostProcess
and
jitLatePostProcess
.
Next, for each option set that was collected as part of the call to
processOptionSet
above, lastPostProcess
calls processOptionSet
to now parse and process the option set, followed by calls to
jitLatePostProcess
and feLatePostProcess
.
onLoadInternal
OMR::Options::processOptionsAOT(char *aotOptions, void *feBase, TR_FrontEnd *fe)
J9::Options::fePreProcess(void * base)
OMR::Options::jitPreProcess()
OMR::Options::processOptions(char *options, char *envOptions, void *feBase, TR_FrontEnd *fe, TR::Options *cmdLineOptions)
OMR::Options::processOptions(char * options, char * envOptions, TR::Options *cmdLineOptions)
OMR::Options::processOptionSet(char *options, char *envOptions, TR::Options *jitBase, bool isAOT)
OMR::Options::processOption(char *startOption, TR::OptionTable *table, void *base, int32_t numEntries, TR::OptionSet *optionSet)
OMR::Options::jitPostProcess()
J9::Options::fePostProcessAOT(void * base)
OMR::Options::processOptionsJIT(char *jitOptions, void *feBase, TR_FrontEnd *fe)
J9::Options::fePreProcess(void * base)
OMR::Options::jitPreProcess()
OMR::Options::processOptions(char *options, char *envOptions, void *feBase, TR_FrontEnd *fe, TR::Options *cmdLineOptions)
OMR::Options::processOptions(char * options, char * envOptions, TR::Options *cmdLineOptions)
OMR::Options::processOptionSet(char *options, char *envOptions, TR::Options *jitBase, bool isAOT)
OMR::Options::processOption(char *startOption, TR::OptionTable *table, void *base, int32_t numEntries, TR::OptionSet *optionSet)
OMR::Options::jitPostProcess()
J9::Options::fePostProcessJIT(void * base)
aboutToBootstrap
OMR::Options::latePostProcessAOT(void *jitConfig)
OMR::Options::latePostProcess(TR::Options *options, void *jitConfig, bool isAOT)
J9::Options::feLatePostProcess(void * base, TR::OptionSet * optionSet)
OMR::Options::jitLatePostProcess(TR::OptionSet *optionSet, void * jitConfig)
OMR::Options::processOptionSet(char *options, char *envOptions, TR::Options *jitBase, bool isAOT)
OMR::Options::jitLatePostProcess(TR::OptionSet *optionSet, void * jitConfig)
J9::Options::feLatePostProcess(void * base, TR::OptionSet * optionSet)
OMR::Options::latePostProcessJIT(void *jitConfig)
OMR::Options::latePostProcess(TR::Options *options, void *jitConfig, bool isAOT)
J9::Options::feLatePostProcess(void * base, TR::OptionSet * optionSet)
OMR::Options::jitLatePostProcess(TR::OptionSet *optionSet, void * jitConfig)
OMR::Options::processOptionSet(char *options, char *envOptions, TR::Options *jitBase, bool isAOT)
OMR::Options::jitLatePostProcess(TR::OptionSet *optionSet, void * jitConfig)
J9::Options::feLatePostProcess(void * base, TR::OptionSet * optionSet)