changeset 18674:ecb9d0cedbab

First draft of option classification.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Sat, 13 Dec 2014 15:03:20 +0100
parents db8ce7ad932b
children 72d0cd2eeca4
files graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/GraalOptions.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalDebugConfig.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LocationMarker.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/OptimizingLinearScanWalker.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/HighTier.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LowTier.java graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILNewObjectSnippets.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/BenchmarkCounters.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/constopt/ConstantLoadOptimization.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java graal/com.oracle.graal.options/src/com/oracle/graal/options/Option.java graal/com.oracle.graal.options/src/com/oracle/graal/options/OptionType.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeadCodeEliminationPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningPhase.java graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/Suites.java graal/com.oracle.graal.printer/src/com/oracle/graal/printer/NoDeadCodeVerifyHandler.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapePhase.java
diffstat 28 files changed, 281 insertions(+), 197 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/GraalOptions.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/GraalOptions.java	Sat Dec 13 15:03:20 2014 +0100
@@ -30,317 +30,314 @@
 // @formatter:off
 public final class GraalOptions {
 
-    @Option(help = "Use experimental baseline compiler configuration.")
+    @Option(help = "Use experimental baseline compiler configuration.", type = OptionType.Debug)
     public static final OptionValue<Boolean> UseBaselineCompiler = new OptionValue<>(false);
 
-    @Option(help = "Use compiler intrinsifications.")
+    @Option(help = "Use compiler intrinsifications.", type = OptionType.Debug)
     public static final OptionValue<Boolean> Intrinsify = new OptionValue<>(true);
 
-    @Option(help = "Inline calls with monomorphic type profile.")
+    @Option(help = "Inline calls with monomorphic type profile.", type = OptionType.Expert)
     public static final OptionValue<Boolean> InlineMonomorphicCalls = new OptionValue<>(true);
 
-    @Option(help = "Inline calls with polymorphic type profile.")
+    @Option(help = "Inline calls with polymorphic type profile.", type = OptionType.Expert)
     public static final OptionValue<Boolean> InlinePolymorphicCalls = new OptionValue<>(true);
 
-    @Option(help = "Inline calls with megamorphic type profile (i.e., not all types could be recorded).")
+    @Option(help = "Inline calls with megamorphic type profile (i.e., not all types could be recorded).", type = OptionType.Expert)
     public static final OptionValue<Boolean> InlineMegamorphicCalls = new OptionValue<>(true);
 
-    @Option(help = "Maximum desired size of the compiler graph in nodes.")
+    @Option(help = "Maximum desired size of the compiler graph in nodes.", type = OptionType.User)
     public static final OptionValue<Integer> MaximumDesiredSize = new OptionValue<>(20000);
 
-    @Option(help = "Minimum probability for methods to be inlined for megamorphic type profiles.")
+    @Option(help = "Minimum probability for methods to be inlined for megamorphic type profiles.", type = OptionType.Expert)
     public static final OptionValue<Double> MegamorphicInliningMinMethodProbability = new OptionValue<>(0.33D);
 
-    @Option(help = "Maximum level of recursive inlining.")
+    @Option(help = "Maximum level of recursive inlining.", type = OptionType.Expert)
     public static final OptionValue<Integer> MaximumRecursiveInlining = new OptionValue<>(5);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> IterativeInlining = new OptionValue<>(false);
 
-    @Option(help = "Graphs with less than this number of nodes are trivial and therefore always inlined.")
+    @Option(help = "Graphs with less than this number of nodes are trivial and therefore always inlined.", type = OptionType.Expert)
     public static final OptionValue<Integer> TrivialInliningSize = new OptionValue<>(10);
 
-    @Option(help = "Inlining is explored up to this number of nodes in the graph for each call site.")
+    @Option(help = "Inlining is explored up to this number of nodes in the graph for each call site.", type = OptionType.Expert)
     public static final OptionValue<Integer> MaximumInliningSize = new OptionValue<>(300);
 
-    @Option(help = "If the previous low-level graph size of the method exceeds the threshold, it is not inlined.")
+    @Option(help = "If the previous low-level graph size of the method exceeds the threshold, it is not inlined.", type = OptionType.Expert)
     public static final OptionValue<Integer> SmallCompiledLowLevelGraphSize = new OptionValue<>(300);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Double> LimitInlinedInvokes = new OptionValue<>(5.0);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Boolean> InlineEverything = new OptionValue<>(false);
 
     // escape analysis settings
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> PartialEscapeAnalysis = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Integer> EscapeAnalysisIterations = new OptionValue<>(2);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<String> EscapeAnalyzeOnly = new OptionValue<>(null);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Integer> MaximumEscapeAnalysisArrayLength = new OptionValue<>(32);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> PEAInliningHints = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Double> TailDuplicationProbability = new OptionValue<>(0.5);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Integer> TailDuplicationTrivialSize = new OptionValue<>(1);
 
-    // profiling information
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Integer> DeoptsToDisableOptimisticOptimization = new OptionValue<>(40);
 
-    // graph caching
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Boolean> CacheGraphs = new OptionValue<>(false);
 
-    //loop transform settings TODO (gd) tune
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> LoopPeeling = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> ReassociateInvariants = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> FullUnroll = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> LoopUnswitch = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Integer> FullUnrollMaxNodes = new OptionValue<>(300);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Integer> ExactFullUnrollMaxNodes = new OptionValue<>(1200);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Float> MinimumPeelProbability = new OptionValue<>(0.35f);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Integer> LoopMaxUnswitch = new OptionValue<>(3);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Integer> LoopUnswitchMaxIncrease = new OptionValue<>(50);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Integer> LoopUnswitchUncertaintyBoost = new OptionValue<>(5);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> UseLoopLimitChecks = new OptionValue<>(true);
 
     // debugging settings
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> ZapStackOnMethodEntry = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> DeoptALot = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> VerifyPhases = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<String> PrintFilter = new OptionValue<>(null);
 
     // Debug settings:
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> BootstrapReplacements = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Integer> GCDebugStartCycle = new OptionValue<>(-1);
 
     // Ideal graph visualizer output settings
-    @Option(help = "Dump IdealGraphVisualizer output in binary format")
+    @Option(help = "Dump IdealGraphVisualizer output in binary format", type = OptionType.Debug)
     public static final OptionValue<Boolean> PrintBinaryGraphs = new OptionValue<>(true);
 
-    @Option(help = "Output probabilities for fixed nodes during binary graph dumping")
+    @Option(help = "Output probabilities for fixed nodes during binary graph dumping", type = OptionType.Debug)
     public static final OptionValue<Boolean> PrintGraphProbabilities = new OptionValue<>(false);
 
-    @Option(help = "Enable dumping to the C1Visualizer. Enabling this option implies PrintBackendCFG.")
+    @Option(help = "Enable dumping to the C1Visualizer. Enabling this option implies PrintBackendCFG.", type = OptionType.Debug)
     public static final OptionValue<Boolean> PrintCFG = new OptionValue<>(false);
 
-    @Option(help = "Enable dumping LIR, register allocation and code generation info to the C1Visualizer.")
+    @Option(help = "Enable dumping LIR, register allocation and code generation info to the C1Visualizer.", type = OptionType.Debug)
     public static final OptionValue<Boolean> PrintBackendCFG = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> PrintIdealGraphFile = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<String> PrintIdealGraphAddress = new OptionValue<>("127.0.0.1");
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Integer> PrintIdealGraphPort = new OptionValue<>(4444);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Integer> PrintBinaryGraphPort = new OptionValue<>(4445);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> PrintIdealGraphSchedule = new OptionValue<>(false);
 
     // Other printing settings
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> PrintCompilation = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> PrintAfterCompilation = new OptionValue<>(false);
 
-    @Option(help = "Print profiling information when parsing a method's bytecode")
+    @Option(help = "Print profiling information when parsing a method's bytecode", type = OptionType.Debug)
     public static final OptionValue<Boolean> PrintProfilingInformation = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> PrintCodeBytes = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> PrintBailout = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> TraceEscapeAnalysis = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> ExitVMOnBailout = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> ExitVMOnException = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> PrintStackTraceOnException = new OptionValue<>(false);
 
-    @Option(help = "Set a phase after which the decompiler dumps the graph, -G:Dump= required")
+    @Option(help = "Set a phase after which the decompiler dumps the graph, -G:Dump= required", type = OptionType.Debug)
     public static final OptionValue<String> DecompileAfterPhase = new OptionValue<>(null);
 
     // HotSpot command line options
-    @Option(help = "Print inlining optimizations")
+    @Option(help = "Print inlining optimizations", type = OptionType.Debug)
     public static final OptionValue<Boolean> HotSpotPrintInlining = new OptionValue<>(false);
 
     // Register allocator debugging
-    @Option(help = "Comma separated list of register that the allocation is limited to.")
+    @Option(help = "Comma separated list of register that the allocation is limited to.", type = OptionType.Debug)
     public static final OptionValue<String> RegisterPressure = new OptionValue<>(null);
 
     // Code generator settings
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> FlowSensitiveReduction = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> ConditionalElimination = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> UseProfilingInformation = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> RemoveNeverExecutedCode = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> UseExceptionProbability = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> UseExceptionProbabilityForOperations = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> OmitHotExceptionStacktrace = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> GenSafepoints = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> GenLoopSafepoints = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> UseTypeCheckHints = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Boolean> InlineVTableStubs = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Boolean> AlwaysInlineVTableStubs = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> ResolveClassBeforeStaticInvoke = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> CanOmitFrame = new OptionValue<>(true);
 
     // Ahead of time compilation
-    @Option(help = "Try to avoid emitting code where patching is required")
+    @Option(help = "Try to avoid emitting code where patching is required", type = OptionType.Expert)
     public static final OptionValue<Boolean> ImmutableCode = new OptionValue<>(false);
 
-    @Option(help = "Generate position independent code")
+    @Option(help = "Generate position independent code", type = OptionType.Expert)
     public static final OptionValue<Boolean> GeneratePIC = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Boolean> CallArrayCopy = new OptionValue<>(true);
 
     // Runtime settings
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Boolean> SupportJsrBytecodes = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Expert)
     public static final OptionValue<Boolean> OptAssumptions = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> OptConvertDeoptsToGuards = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> OptReadElimination = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> OptCanonicalizer = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> OptDeoptimizationGrouping = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> OptScheduleOutOfLoops = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> OptEliminateGuards = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> OptImplicitNullChecks = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> OptLivenessAnalysis = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> OptLoopTransform = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> OptFloatingReads = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> OptTailDuplication = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> OptEliminatePartiallyRedundantGuards = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> OptFilterProfiledTypes = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> OptDevirtualizeInvokesOptimistically = new OptionValue<>(true);
 
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> OptPushThroughPi = new OptionValue<>(true);
 
-    @Option(help = "Allow backend to match complex expressions.")
+    @Option(help = "Allow backend to match complex expressions.", type = OptionType.Debug)
     public static final OptionValue<Boolean> MatchExpressions = new OptionValue<>(true);
 
-    @Option(help = "Constant fold final fields with default values.")
+    @Option(help = "Constant fold final fields with default values.", type = OptionType.Debug)
     public static final OptionValue<Boolean> TrustFinalDefaultFields = new OptionValue<>(true);
 
-    @Option(help = "Mark well-known stable fields as such.")
+    @Option(help = "Mark well-known stable fields as such.", type = OptionType.Debug)
     public static final OptionValue<Boolean> ImplicitStableValues = new OptionValue<>(true);
 
 
     /**
      * Counts the various paths taken through snippets.
      */
-    @Option(help = "")
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> SnippetCounters = new OptionValue<>(false);
 }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Sat Dec 13 15:03:20 2014 +0100
@@ -84,13 +84,13 @@
          */
         @Option(help = "Pattern for method(s) to which intrinsification (if available) will be applied. " +
                        "By default, all available intrinsifications are applied except for methods matched " +
-                       "by IntrinsificationsDisabled. See MethodFilter class for pattern syntax.")
+                       "by IntrinsificationsDisabled. See MethodFilter class for pattern syntax.", type = OptionType.Debug)
         public static final OptionValue<String> IntrinsificationsEnabled = new OptionValue<>(null);
         /**
          * @see MethodFilter
          */
         @Option(help = "Pattern for method(s) to which intrinsification will not be applied. " +
-                       "See MethodFilter class for pattern syntax.")
+                       "See MethodFilter class for pattern syntax.", type = OptionType.Debug)
         public static final OptionValue<String> IntrinsificationsDisabled = new OptionValue<>(null);
         // @formatter:on
 
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalDebugConfig.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalDebugConfig.java	Sat Dec 13 15:03:20 2014 +0100
@@ -38,31 +38,31 @@
 public class GraalDebugConfig implements DebugConfig {
 
     // @formatter:off
-    @Option(help = "Pattern for scope(s) in which dumping is enabled (see DebugFilter and Debug.dump)")
+    @Option(help = "Pattern for scope(s) in which dumping is enabled (see DebugFilter and Debug.dump)", type = OptionType.Debug)
     public static final OptionValue<String> Dump = new OptionValue<>(null);
-    @Option(help = "Pattern for scope(s) in which metering is enabled (see DebugFilter and Debug.metric)")
+    @Option(help = "Pattern for scope(s) in which metering is enabled (see DebugFilter and Debug.metric)", type = OptionType.Debug)
     public static final OptionValue<String> Meter = new OptionValue<>(null);
-    @Option(help = "Pattern for scope(s) in which verification is enabled (see DebugFilter and Debug.verify)")
+    @Option(help = "Pattern for scope(s) in which verification is enabled (see DebugFilter and Debug.verify)", type = OptionType.Debug)
     public static final OptionValue<String> Verify = new OptionValue<>(null);
-    @Option(help = "Pattern for scope(s) in which memory use tracking is enabled (see DebugFilter and Debug.metric)")
+    @Option(help = "Pattern for scope(s) in which memory use tracking is enabled (see DebugFilter and Debug.metric)", type = OptionType.Debug)
     public static final OptionValue<String> TrackMemUse = new OptionValue<>(null);
-    @Option(help = "Pattern for scope(s) in which timing is enabled (see DebugFilter and Debug.timer)")
+    @Option(help = "Pattern for scope(s) in which timing is enabled (see DebugFilter and Debug.timer)", type = OptionType.Debug)
     public static final OptionValue<String> Time = new OptionValue<>(null);
-    @Option(help = "Pattern for scope(s) in which logging is enabled (see DebugFilter and Debug.log)")
+    @Option(help = "Pattern for scope(s) in which logging is enabled (see DebugFilter and Debug.log)", type = OptionType.Debug)
     public static final OptionValue<String> Log = new OptionValue<>(null);
-    @Option(help = "Pattern for filtering debug scope output based on method context (see MethodFilter)")
+    @Option(help = "Pattern for filtering debug scope output based on method context (see MethodFilter)", type = OptionType.Debug)
     public static final OptionValue<String> MethodFilter = new OptionValue<>(null);
     @Option(help = "How to print metric and timing values:%n" +
                    "Name - aggregate by unqualified name%n" +
                    "Partial - aggregate by partially qualified name (e.g., A.B.C.D.Counter and X.Y.Z.D.Counter will be merged to D.Counter)%n" +
                    "Complete - aggregate by qualified name%n" +
-                   "Thread - aggregate by qualified name and thread")
+                   "Thread - aggregate by qualified name and thread", type = OptionType.Debug)
     public static final OptionValue<String> DebugValueSummary = new OptionValue<>("Name");
-    @Option(help = "Omit reporting 0-value metrics")
+    @Option(help = "Omit reporting 0-value metrics", type = OptionType.Debug)
     public static final OptionValue<Boolean> SuppressZeroDebugValues = new OptionValue<>(false);
-    @Option(help = "Send Graal IR to dump handlers on error")
+    @Option(help = "Send Graal IR to dump handlers on error", type = OptionType.Debug)
     public static final OptionValue<Boolean> DumpOnError = new OptionValue<>(false);
-    @Option(help = "Enable expensive assertions")
+    @Option(help = "Enable expensive assertions", type = OptionType.Debug)
     public static final OptionValue<Boolean> DetailedAsserts = new StableOptionValue<Boolean>() {
         @Override
         protected Boolean initialValue() {
@@ -72,7 +72,7 @@
             return enabled;
         }
     };
-    @Option(help = "Enable more verbose log output when available")
+    @Option(help = "Enable more verbose log output when available", type = OptionType.Debug)
     public static final OptionValue<Boolean> LogVerbose = new OptionValue<>(false);
     // @formatter:on
 
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java	Sat Dec 13 15:03:20 2014 +0100
@@ -73,7 +73,7 @@
 
     public static class Options {
         // @formatter:off
-        @Option(help = "Enable spill position optimization")
+        @Option(help = "Enable spill position optimization", type = OptionType.Debug)
         public static final OptionValue<Boolean> LSRAOptimizeSpillPosition = new OptionValue<>(true);
         // @formatter:on
     }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LocationMarker.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LocationMarker.java	Sat Dec 13 15:03:20 2014 +0100
@@ -40,7 +40,7 @@
 
     public static class Options {
         // @formatter:off
-        @Option(help = "Use decoupled pass for location marking (instead of using LSRA marking)")
+        @Option(help = "Use decoupled pass for location marking (instead of using LSRA marking)", type = OptionType.Debug)
         public static final OptionValue<Boolean> UseLocationMarker = new OptionValue<>(false);
         // @formatter:on
     }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/OptimizingLinearScanWalker.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/OptimizingLinearScanWalker.java	Sat Dec 13 15:03:20 2014 +0100
@@ -38,9 +38,9 @@
 
     public static class Options {
         // @formatter:off
-        @Option(help = "Enable LSRA optimization")
+        @Option(help = "Enable LSRA optimization", type = OptionType.Debug)
         public static final OptionValue<Boolean> LSRAOptimization = new OptionValue<>(true);
-        @Option(help = "LSRA optimization: Only split but do not reassign")
+        @Option(help = "LSRA optimization: Only split but do not reassign", type = OptionType.Debug)
         public static final OptionValue<Boolean> LSRAOptSplitOnly = new OptionValue<>(false);
         // @formatter:on
     }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/HighTier.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/HighTier.java	Sat Dec 13 15:03:20 2014 +0100
@@ -41,7 +41,7 @@
     public static class Options {
 
         // @formatter:off
-        @Option(help = "Enable inlining")
+        @Option(help = "Enable inlining", type = OptionType.Expert)
         public static final OptionValue<Boolean> Inline = new OptionValue<>(true);
         // @formatter:on
     }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LowTier.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LowTier.java	Sat Dec 13 15:03:20 2014 +0100
@@ -36,7 +36,7 @@
     static class Options {
 
         // @formatter:off
-        @Option(help = "")
+        @Option(help = "", type = OptionType.Debug)
         public static final OptionValue<Boolean> ProfileCompiledMethods = new OptionValue<>(false);
         // @formatter:on
 
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java	Sat Dec 13 15:03:20 2014 +0100
@@ -40,7 +40,7 @@
 public class Graph {
 
     static class Options {
-        @Option(help = "Verify graphs often during compilation when assertions are turned on")//
+        @Option(help = "Verify graphs often during compilation when assertions are turned on", type = OptionType.Debug)//
         public static final OptionValue<Boolean> VerifyGraalGraphs = new OptionValue<>(true);
     }
 
--- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java	Sat Dec 13 15:03:20 2014 +0100
@@ -89,7 +89,7 @@
     public static class Options {
 
         // @formatter:off
-        @Option(help = "Number of TLABs used for HSAIL kernels which allocate")
+        @Option(help = "Number of TLABs used for HSAIL kernels which allocate", type = OptionType.Debug)
         public static  final OptionValue<Integer> HsailKernelTlabs = new OptionValue<>(4);
         // @formatter:on
     }
--- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILNewObjectSnippets.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILNewObjectSnippets.java	Sat Dec 13 15:03:20 2014 +0100
@@ -59,13 +59,13 @@
     public static class Options {
 
         // @formatter:off
-        @Option(help = "In HSAIL allocation, allow allocation from eden as fallback if TLAB is full")
+        @Option(help = "In HSAIL allocation, allow allocation from eden as fallback if TLAB is full", type = OptionType.Debug)
         static final OptionValue<Boolean> HsailUseEdenAllocate = new OptionValue<>(false);
 
-        @Option(help = "In HSAIL allocation, allow GPU to allocate a new tlab if TLAB is full")
+        @Option(help = "In HSAIL allocation, allow GPU to allocate a new tlab if TLAB is full", type = OptionType.Debug)
         static final OptionValue<Boolean> HsailNewTlabAllocate = new OptionValue<>(true);
 
-        @Option(help = "Estimate of number of bytes allocated by each HSAIL workitem, used to size TLABs")
+        @Option(help = "Estimate of number of bytes allocated by each HSAIL workitem, used to size TLABs", type = OptionType.Debug)
         public  static  final OptionValue<Integer> HsailAllocBytesPerWorkitem = new OptionValue<>(64);
 
         // @formatter:on
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java	Sat Dec 13 15:03:20 2014 +0100
@@ -56,19 +56,19 @@
 
     public static class Options {
         // @formatter:off
-        @Option(help = "Compile all methods in all classes on given class path")
+        @Option(help = "Compile all methods in all classes on given class path", type = OptionType.Debug)
         public static final OptionValue<String> CompileTheWorldClasspath = new OptionValue<>(SUN_BOOT_CLASS_PATH);
-        @Option(help = "Verbose CompileTheWorld operation")
+        @Option(help = "Verbose CompileTheWorld operation", type = OptionType.Debug)
         public static final OptionValue<Boolean> CompileTheWorldVerbose = new OptionValue<>(true);
-        @Option(help = "The number of CompileTheWorld iterations to perform")
+        @Option(help = "The number of CompileTheWorld iterations to perform", type = OptionType.Debug)
         public static final OptionValue<Integer> CompileTheWorldIterations = new OptionValue<>(1);
-        @Option(help = "First class to consider when using -XX:+CompileTheWorld")
+        @Option(help = "First class to consider when using -XX:+CompileTheWorld", type = OptionType.Debug)
         public static final OptionValue<Integer> CompileTheWorldStartAt = new OptionValue<>(1);
-        @Option(help = "Last class to consider when using -XX:+CompileTheWorld")
+        @Option(help = "Last class to consider when using -XX:+CompileTheWorld", type = OptionType.Debug)
         public static final OptionValue<Integer> CompileTheWorldStopAt = new OptionValue<>(Integer.MAX_VALUE);
         @Option(help = "Option value overrides to use during compile the world. For example, " +
                        "to disable inlining and partial escape analysis specify '-PartialEscapeAnalysis -Inline'. " +
-                       "The format for each option is the same as on the command line just without the '-G:' prefix.")
+                       "The format for each option is the same as on the command line just without the '-G:' prefix.", type = OptionType.Debug)
         public static final OptionValue<String> CompileTheWorldConfig = new OptionValue<>(null);
         // @formatter:on
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java	Sat Dec 13 15:03:20 2014 +0100
@@ -189,10 +189,10 @@
     public static class Options {
 
         // @formatter:off
-        @Option(help = "The runtime configuration to use")
+        @Option(help = "The runtime configuration to use", type = OptionType.Expert)
         static final OptionValue<String> GraalRuntime = new OptionValue<>("");
 
-        @Option(help = "File to which logging is sent.  A %p in the name will be replaced with a string identifying the process, usually the process id.")
+        @Option(help = "File to which logging is sent.  A %p in the name will be replaced with a string identifying the process, usually the process id.", type = OptionType.Expert)
         public static final PrintStreamOption LogFile = new PrintStreamOption();
         // @formatter:on
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/BenchmarkCounters.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/BenchmarkCounters.java	Sat Dec 13 15:03:20 2014 +0100
@@ -84,16 +84,16 @@
     static class Options {
 
         //@formatter:off
-        @Option(help = "Turn on the benchmark counters, and displays the results on VM shutdown")
+        @Option(help = "Turn on the benchmark counters, and displays the results on VM shutdown", type = OptionType.Debug)
         private static final OptionValue<Boolean> GenericDynamicCounters = new OptionValue<>(false);
-        @Option(help = "Turn on the benchmark counters, and displays the results every n milliseconds")
+        @Option(help = "Turn on the benchmark counters, and displays the results every n milliseconds", type = OptionType.Debug)
         private static final OptionValue<Integer> TimedDynamicCounters = new OptionValue<>(-1);
 
         @Option(help = "Turn on the benchmark counters, and listen for specific patterns on System.out/System.err:%n" +
                        "Format: (err|out),start pattern,end pattern (~ matches multiple digits)%n" +
                        "Examples:%n" +
                        "  dacapo = 'err, starting =====, PASSED in'%n" +
-                       "  specjvm2008 = 'out,Iteration ~ (~s) begins:,Iteration ~ (~s) ends:'")
+                       "  specjvm2008 = 'out,Iteration ~ (~s) begins:,Iteration ~ (~s) ends:'", type = OptionType.Debug)
         private static final OptionValue<String> BenchmarkDynamicCounters = new OptionValue<>(null);
         //@formatter:on
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java	Sat Dec 13 15:03:20 2014 +0100
@@ -198,11 +198,11 @@
 
         // @formatter:off
         @Option(help = "If the probability that a type check will hit one the profiled types (up to " +
-                       "TypeCheckMaxHints) is below this value, the type check will be compiled without profiling info")
+                       "TypeCheckMaxHints) is below this value, the type check will be compiled without profiling info", type = OptionType.Expert)
         static final OptionValue<Double> TypeCheckMinProfileHitProbability = new OptionValue<>(0.5);
 
         @Option(help = "The maximum number of profiled types that will be used when compiling a profiled type check. " +
-                        "Note that TypeCheckMinProfileHitProbability also influences whether profiling info is used in compiled type checks.")
+                        "Note that TypeCheckMinProfileHitProbability also influences whether profiling info is used in compiled type checks.", type = OptionType.Expert)
         static final OptionValue<Integer> TypeCheckMaxHints = new OptionValue<>(2);
         // @formatter:on
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java	Sat Dec 13 15:03:20 2014 +0100
@@ -70,7 +70,7 @@
     public static class Options {
 
         //@formatter:off
-        @Option(help = "")
+        @Option(help = "", type = OptionType.Debug)
         private static final OptionValue<Boolean> ProfileMonitors = new OptionValue<>(false);
         //@formatter:on
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java	Sat Dec 13 15:03:20 2014 +0100
@@ -69,7 +69,7 @@
     static class Options {
 
         //@formatter:off
-        @Option(help = "")
+        @Option(help = "", type = OptionType.Debug)
         static final OptionValue<Boolean> ProfileAllocations = new OptionValue<>(false);
         //@formatter:on
     }
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java	Sat Dec 13 15:03:20 2014 +0100
@@ -44,7 +44,7 @@
 
     static class Options {
         // @formatter:off
-        @Option(help = "The trace level for the bytecode parser used when building a graph from bytecode")
+        @Option(help = "The trace level for the bytecode parser used when building a graph from bytecode", type = OptionType.Debug)
         public static final OptionValue<Integer> TraceBytecodeParserLevel = new OptionValue<>(0);
         // @formatter:on
     }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/constopt/ConstantLoadOptimization.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/constopt/ConstantLoadOptimization.java	Sat Dec 13 15:03:20 2014 +0100
@@ -49,7 +49,7 @@
 
     public static class Options {
         // @formatter:off
-        @Option(help = "Enable constant load optimization.")
+        @Option(help = "Enable constant load optimization.", type = OptionType.Debug)
         public static final OptionValue<Boolean> ConstantLoadOptimization = new OptionValue<>(true);
         // @formatter:on
     }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java	Sat Dec 13 15:03:20 2014 +0100
@@ -48,9 +48,9 @@
 
     public static class Options {
         // @formatter:off
-        @Option(help = "Print HIR along side LIR as the latter is generated")
+        @Option(help = "Print HIR along side LIR as the latter is generated", type = OptionType.Debug)
         public static final OptionValue<Boolean> PrintIRWithLIR = new OptionValue<>(false);
-        @Option(help = "The trace level for the LIR generator")
+        @Option(help = "The trace level for the LIR generator", type = OptionType.Debug)
         public static final OptionValue<Integer> TraceLIRGeneratorLevel = new OptionValue<>(0);
         // @formatter:on
     }
--- a/graal/com.oracle.graal.options/src/com/oracle/graal/options/Option.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.options/src/com/oracle/graal/options/Option.java	Sat Dec 13 15:03:20 2014 +0100
@@ -27,7 +27,7 @@
 /**
  * Describes the attributes of an option whose {@link OptionValue value} is in a static field
  * annotated by this annotation type.
- * 
+ *
  * @see OptionProcessor
  * @see OptionDescriptor
  */
@@ -45,4 +45,9 @@
      * The name of the option. By default, the name of the annotated field should be used.
      */
     String name() default "";
+
+    /**
+     * Specifies the type of the option.
+     */
+    OptionType type() default OptionType.Debug;
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.graal.options/src/com/oracle/graal/options/OptionType.java	Sat Dec 13 15:03:20 2014 +0100
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.graal.options;
+
+/**
+ * Classifies Graal options in several categories depending on who this option is relevant for.
+ *
+ */
+public enum OptionType {
+    /**
+     * An option common for users to apply.
+     */
+    User,
+
+    /**
+     * An option only relevant in corner cases and for fine-tuning.
+     */
+    Expert,
+
+    /**
+     * An option only relevant when debugging the compiler.
+     */
+    Debug
+}
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeadCodeEliminationPhase.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeadCodeEliminationPhase.java	Sat Dec 13 15:03:20 2014 +0100
@@ -34,7 +34,7 @@
 
     public static class Options {
         // @formatter:off
-        @Option(help = "Disable optional dead code eliminations")
+        @Option(help = "Disable optional dead code eliminations", type = OptionType.Debug)
         public static final OptionValue<Boolean> ReduceDCE = new OptionValue<>(true);
         // @formatter:on
     }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningPhase.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningPhase.java	Sat Dec 13 15:03:20 2014 +0100
@@ -37,7 +37,7 @@
     public static class Options {
 
         // @formatter:off
-        @Option(help = "Unconditionally inline intrinsics")
+        @Option(help = "Unconditionally inline intrinsics", type = OptionType.Debug)
         public static final OptionValue<Boolean> AlwaysInlineIntrinsics = new OptionValue<>(false);
         // @formatter:on
     }
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/Suites.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/Suites.java	Sat Dec 13 15:03:20 2014 +0100
@@ -36,7 +36,7 @@
     static class Options {
 
         // @formatter:off
-        @Option(help = "The compiler configuration to use")
+        @Option(help = "The compiler configuration to use", type = OptionType.User)
         static final OptionValue<String> CompilerConfiguration = new OptionValue<>("");
         // @formatter:on
     }
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/NoDeadCodeVerifyHandler.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/NoDeadCodeVerifyHandler.java	Sat Dec 13 15:03:20 2014 +0100
@@ -48,7 +48,7 @@
 
     static class Options {
         // @formatter:off
-        @Option(help = "Run level for NoDeadCodeVerifyHandler (0 = off, 1 = info, 2 = verbose, 3 = fatal)")
+        @Option(help = "Run level for NoDeadCodeVerifyHandler (0 = off, 1 = info, 2 = verbose, 3 = fatal)", type = OptionType.Debug)
         public static final OptionValue<Integer> NDCV = new OptionValue<>(0);
         // @formatter:on
     }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java	Sat Dec 13 15:03:20 2014 +0100
@@ -41,99 +41,137 @@
      * Element = Include | '~' Exclude ;
      * </pre>
      */
-    @Option(help = "Restrict compilation to comma-separated list of includes (or excludes prefixed with tilde)")
+    @Option(help = "Restrict compilation to comma-separated list of includes (or excludes prefixed with tilde)", type = OptionType.Debug)
     public static final OptionValue<String> TruffleCompileOnly = new OptionValue<>(null);
-    @Option(help = "Compile call target when call count exceeds this threshold")
+
+    @Option(help = "Compile call target when call count exceeds this threshold", type = OptionType.User)
     public static final OptionValue<Integer> TruffleCompilationThreshold = new OptionValue<>(1000);
-    @Option(help = "Defines the maximum timespan in milliseconds that is required for a call target to be queued for compilation.")
+
+    @Option(help = "Defines the maximum timespan in milliseconds that is required for a call target to be queued for compilation.", type = OptionType.User)
     public static final OptionValue<Integer> TruffleTimeThreshold = new OptionValue<>(25000);
-    @Option(help = "Minimum number of calls before a call target is compiled")
+
+    @Option(help = "Minimum number of calls before a call target is compiled", type = OptionType.Expert)
     public static final OptionValue<Integer> TruffleMinInvokeThreshold = new OptionValue<>(3);
-    @Option(help = "Delay compilation after an invalidation to allow for reprofiling")
+
+    @Option(help = "Delay compilation after an invalidation to allow for reprofiling", type = OptionType.Expert)
     public static final OptionValue<Integer> TruffleInvalidationReprofileCount = new OptionValue<>(3);
-    @Option(help = "Delay compilation after a node replacement")
+
+    @Option(help = "Delay compilation after a node replacement", type = OptionType.Expert)
     public static final OptionValue<Integer> TruffleReplaceReprofileCount = new OptionValue<>(10);
-    @Option(help = "Enable automatic inlining of call targets")
+
+    @Option(help = "Enable automatic inlining of call targets", type = OptionType.Debug)
     public static final OptionValue<Boolean> TruffleFunctionInlining = new OptionValue<>(true);
-    @Option(help = "Enable an expansion cache per CallTarget. Only functionable with TruffleContextSensitiveInlining enabled.")
+
+    @Option(help = "Enable an expansion cache per CallTarget. Only functionable with TruffleContextSensitiveInlining enabled.", type = OptionType.Debug)
     public static final OptionValue<Boolean> TruffleFunctionInliningCache = new OptionValue<>(true);
-    @Option(help = "Maximum number of Graal IR nodes during partial evaluation")
+
+    @Option(help = "Maximum number of Graal IR nodes during partial evaluation", type = OptionType.Expert)
     public static final OptionValue<Integer> TruffleGraphMaxNodes = new OptionValue<>(200000);
-    @Option(help = "Stop inlining if caller's cumulative tree size would exceed this limit")
+
+    @Option(help = "Stop inlining if caller's cumulative tree size would exceed this limit", type = OptionType.Expert)
     public static final OptionValue<Integer> TruffleInliningMaxCallerSize = new OptionValue<>(2250);
 
-    @Option(help = "Defines the number of graal nodes that triggers a performance warning.")
+    @Option(help = "Defines the number of graal nodes that triggers a performance warning.", type = OptionType.Debug)
     public static final OptionValue<Integer> TrufflePerformanceWarningGraalNodeCount = new OptionValue<>(1000);
 
-    @Option(help = "Enable call target splitting")
+    @Option(help = "Enable call target splitting", type = OptionType.Expert)
     public static final OptionValue<Boolean> TruffleSplitting = new OptionValue<>(true);
-    @Option(help = "Experimental: Enable the new version of truffle splitting.")
+
+    @Option(help = "Experimental: Enable the new version of truffle splitting.", type = OptionType.Debug)
     public static final OptionValue<Boolean> TruffleSplittingNew = new OptionValue<>(false);
-    @Option(help = "Experimental. New splitting only: Whether or not splitting should be based instance comparisons of non TypedObjects")
+
+    @Option(help = "Experimental. New splitting only: Whether or not splitting should be based instance comparisons of non TypedObjects", type = OptionType.Debug)
     public static final OptionValue<Boolean> TruffleSplittingClassInstanceStamps = new OptionValue<>(false);
-    @Option(help = "Experimental. New splitting only: Whether or not splitting should be based instance comparisons of TypedObjects")
+
+    @Option(help = "Experimental. New splitting only: Whether or not splitting should be based instance comparisons of TypedObjects", type = OptionType.Debug)
     public static final OptionValue<Boolean> TruffleSplittingTypeInstanceStamps = new OptionValue<>(true);
-    @Option(help = "Experimental. New splitting only: The number of calls until splitting is performed. ")
+
+    @Option(help = "Experimental. New splitting only: The number of calls until splitting is performed. ", type = OptionType.Debug)
     public static final OptionValue<Integer> TruffleSplittingStartCallCount = new OptionValue<>(3);
-    @Option(help = "Experimental. New splitting only: Split everything aggressively. ")
+
+    @Option(help = "Experimental. New splitting only: Split everything aggressively. ", type = OptionType.Debug)
     public static final OptionValue<Boolean> TruffleSplittingAggressive = new OptionValue<>(false);
 
-
-    @Option(help = "Disable call target splitting if tree size exceeds this limit")
+    @Option(help = "Disable call target splitting if tree size exceeds this limit", type = OptionType.Debug)
     public static final OptionValue<Integer> TruffleSplittingMaxCalleeSize = new OptionValue<>(100);
-    @Option(help = "Number of most recently used methods in truffle cache")
+
+    @Option(help = "Number of most recently used methods in truffle cache", type = OptionType.Debug)
     public static final OptionValue<Integer> TruffleMaxCompilationCacheSize = new OptionValue<>(512);
-    @Option(help = "Enable asynchronous truffle compilation in background thread")
+
+    @Option(help = "Enable asynchronous truffle compilation in background thread", type = OptionType.Expert)
     public static final OptionValue<Boolean> TruffleBackgroundCompilation = new OptionValue<>(true);
-    @Option(help = "")
+
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Integer> TruffleCompilationDecisionTime = new OptionValue<>(100);
-    @Option(help = "")
+
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> TruffleCompilationDecisionTimePrintFail = new OptionValue<>(false);
-    @Option(help = "")
+
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> TruffleReturnTypeSpeculation = new StableOptionValue<>(true);
-    @Option(help = "")
+
+    @Option(help = "", type = OptionType.Debug)
     public static final OptionValue<Boolean> TruffleArgumentTypeSpeculation = new StableOptionValue<>(true);
 
     // tracing
-    @Option(help = "Print potential performance problems")
+    @Option(help = "Print potential performance problems", type = OptionType.Debug)
     public static final OptionValue<Boolean> TraceTrufflePerformanceWarnings = new OptionValue<>(false);
-    @Option(help = "Print information for compilation results")
+
+    @Option(help = "Print information for compilation results", type = OptionType.Debug)
     public static final OptionValue<Boolean> TraceTruffleCompilation = new OptionValue<>(false);
-    @Option(help = "Print information for compilation queuing")
+
+    @Option(help = "Print information for compilation queuing", type = OptionType.Debug)
     public static final OptionValue<Boolean> TraceTruffleCompilationDetails = new OptionValue<>(false);
-    @Option(help = "Print a node count histogram after each compilation")
+
+    @Option(help = "Print a node count histogram after each compilation", type = OptionType.Debug)
     public static final OptionValue<Boolean> TraceTruffleCompilationHistogram = new OptionValue<>(false);
-    @Option(help = "Print all polymorphic and generic nodes after each compilation")
+
+    @Option(help = "Print all polymorphic and generic nodes after each compilation", type = OptionType.Debug)
     public static final OptionValue<Boolean> TraceTruffleCompilationPolymorphism = new OptionValue<>(false);
-    @Option(help = "Print all polymorphic and generic nodes after each compilation")
+
+    @Option(help = "Print all polymorphic and generic nodes after each compilation", type = OptionType.Debug)
     public static final OptionValue<Boolean> TraceTruffleCompilationAST = new OptionValue<>(false);
-    @Option(help = "Print the inlined call tree for each compiled method")
+
+    @Option(help = "Print the inlined call tree for each compiled method", type = OptionType.Debug)
     public static final OptionValue<Boolean> TraceTruffleCompilationCallTree = new OptionValue<>(false);
-    @Option(help = "Print the expansion trees for each compilation")
+
+    @Option(help = "Print the expansion trees for each compilation", type = OptionType.Debug)
     public static final OptionValue<Boolean> TraceTruffleExpansion = new OptionValue<>(false);
-    @Option(help = "Print source secions for printed expansion trees")
+
+    @Option(help = "Print source secions for printed expansion trees", type = OptionType.Debug)
     public static final OptionValue<Boolean> TraceTruffleExpansionSource = new OptionValue<>(false);
-    @Option(help = "Print detailed information for the Truffle compilation cache")
+
+    @Option(help = "Print detailed information for the Truffle compilation cache", type = OptionType.Debug)
     public static final OptionValue<Boolean> TraceTruffleCacheDetails = new OptionValue<>(false);
-    @Option(help = "Treat compilation exceptions as fatal exceptions that will exit the application")
+
+    @Option(help = "Treat compilation exceptions as fatal exceptions that will exit the application", type = OptionType.Debug)
     public static final OptionValue<Boolean> TruffleCompilationExceptionsAreFatal = new OptionValue<>(false);
-    @Option(help = "Treat compilation exceptions as thrown runtime exceptions")
+
+    @Option(help = "Treat compilation exceptions as thrown runtime exceptions", type = OptionType.Debug)
     public static final OptionValue<Boolean> TruffleCompilationExceptionsAreThrown = new OptionValue<>(false);
-    @Option(help = "Print information for inlining for each compilation.")
+
+    @Option(help = "Print information for inlining for each compilation.", type = OptionType.Debug)
     public static final OptionValue<Boolean> TraceTruffleInlining = new OptionValue<>(false);
-    @Option(help = "Print information for each splitted call site.")
+
+    @Option(help = "Print information for each splitted call site.", type = OptionType.Debug)
     public static final OptionValue<Boolean> TraceTruffleSplitting = new OptionValue<>(false);
-    @Option(help = "Print stack trace on transfer to interpreter")
+
+    @Option(help = "Print stack trace on transfer to interpreter", type = OptionType.Debug)
     public static final OptionValue<Boolean> TraceTruffleTransferToInterpreter = new StableOptionValue<>(false);
-    @Option(help = "Print stack trace on assumption invalidation")
+
+    @Option(help = "Print stack trace on assumption invalidation", type = OptionType.Debug)
     public static final OptionValue<Boolean> TraceTruffleAssumptions = new StableOptionValue<>(false);
-    @Option(help = "Number of stack trace elements printed by TraceTruffleTransferToInterpreter and TraceTruffleAssumptions")
+
+    @Option(help = "Number of stack trace elements printed by TraceTruffleTransferToInterpreter and TraceTruffleAssumptions", type = OptionType.Debug)
     public static final OptionValue<Integer> TraceTruffleStackTraceLimit = new OptionValue<>(20);
-    @Option(help = "Print a summary of execution counts for all executed CallTargets. Introduces counter overhead for each call.")
+
+    @Option(help = "Print a summary of execution counts for all executed CallTargets. Introduces counter overhead for each call.", type = OptionType.Debug)
     public static final OptionValue<Boolean> TruffleCallTargetProfiling = new StableOptionValue<>(false);
-    @Option(help = "Print Truffle compilation statistics at the end of a run.")
+
+    @Option(help = "Print Truffle compilation statistics at the end of a run.", type = OptionType.Debug)
     public static final OptionValue<Boolean> TruffleCompilationStatistics = new OptionValue<>(false);
-    @Option(help = "Print additional more verbose Truffle compilation statistics at the end of a run.")
+
+    @Option(help = "Print additional more verbose Truffle compilation statistics at the end of a run.", type = OptionType.Debug)
     public static final OptionValue<Boolean> TruffleCompilationStatisticDetails = new OptionValue<>(false);
     // @formatter:on
 }
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapePhase.java	Fri Dec 12 15:57:35 2014 -0800
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapePhase.java	Sat Dec 13 15:03:20 2014 +0100
@@ -45,7 +45,7 @@
 
     static class Options {
         //@formatter:off
-        @Option(help = "")
+        @Option(help = "", type = OptionType.Debug)
         public static final OptionValue<Boolean> OptEarlyReadElimination = new OptionValue<>(true);
         //@formatter:on
     }