changeset 18640:02b5114b74c1

Started consolidation of options. Added descriptions.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Fri, 05 Dec 2014 11:09:57 +0100
parents 7d8270532cd9
children e22a21b27036
files graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/GraalOptions.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/policy/AbstractInliningPolicy.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/CallsiteHolderExplorable.java
diffstat 3 files changed, 96 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/GraalOptions.java	Wed Dec 03 16:07:22 2014 +0100
+++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/GraalOptions.java	Fri Dec 05 11:09:57 2014 +0100
@@ -30,58 +30,67 @@
 // @formatter:off
 public final class GraalOptions {
 
-    @Option(help = "Use baseline compiler configuration")
+    @Option(help = "Use experimental baseline compiler configuration.")
     public static final OptionValue<Boolean> UseBaselineCompiler = new OptionValue<>(false);
-    @Option(help = "Enable use of compiler intrinsics")
+
+    @Option(help = "Use compiler intrinsifications.")
     public static final OptionValue<Boolean> Intrinsify = new OptionValue<>(true);
-    @Option(help = "Enable inlining of monomorphic calls")
+
+    @Option(help = "Inline calls with monomorphic type profile.")
     public static final OptionValue<Boolean> InlineMonomorphicCalls = new OptionValue<>(true);
-    @Option(help = "Enable inlining of polymorphic calls")
+
+    @Option(help = "Inline calls with polymorphic type profile.")
     public static final OptionValue<Boolean> InlinePolymorphicCalls = new OptionValue<>(true);
-    @Option(help = "Enable inlining of megamorphic calls")
+
+    @Option(help = "Inline calls with megamorphic type profile (i.e., not all types could be recorded).")
     public static final OptionValue<Boolean> InlineMegamorphicCalls = new OptionValue<>(true);
-    @Option(help = "")
+
+    @Option(help = "Maximum desired size of the compiler graph in nodes.")
+    public static final OptionValue<Integer> MaximumDesiredSize = new OptionValue<>(20000);
+
+    @Option(help = "Minimum probability for methods to be inlined for megamorphic type profiles.")
     public static final OptionValue<Double> MegamorphicInliningMinMethodProbability = new OptionValue<>(0.33D);
-    @Option(help = "")
-    public static final OptionValue<Integer> MaximumDesiredSize = new OptionValue<>(20000);
-    @Option(help = "")
+
+    @Option(help = "Maximum level of recursive inlining.")
     public static final OptionValue<Integer> MaximumRecursiveInlining = new OptionValue<>(5);
 
-    // inlining settings
-    @Option(help = "")
-    public static final OptionValue<Float> BoostInliningForEscapeAnalysis = new OptionValue<>(2f);
-    @Option(help = "")
-    public static final OptionValue<Float> RelevanceCapForInlining = new OptionValue<>(1f);
-    @Option(help = "")
-    public static final OptionValue<Float> CapInheritedRelevance = new OptionValue<>(1f);
     @Option(help = "")
     public static final OptionValue<Boolean> IterativeInlining = new OptionValue<>(false);
 
-    @Option(help = "")
+    @Option(help = "Graphs with less than this number of nodes are trivial and therefore always inlined.")
     public static final OptionValue<Integer> TrivialInliningSize = new OptionValue<>(10);
-    @Option(help = "")
+
+    @Option(help = "Inlining is explored up to this number of nodes in the graph for each call site.")
     public static final OptionValue<Integer> MaximumInliningSize = new OptionValue<>(300);
-    @Option(help = "")
+
+    @Option(help = "If the previous low-level graph size of the method exceeds the threshold, it is not inlined.")
     public static final OptionValue<Integer> SmallCompiledLowLevelGraphSize = new OptionValue<>(300);
+
     @Option(help = "")
     public static final OptionValue<Double> LimitInlinedInvokes = new OptionValue<>(5.0);
+
     @Option(help = "")
     public static final OptionValue<Boolean> InlineEverything = new OptionValue<>(false);
 
     // escape analysis settings
     @Option(help = "")
     public static final OptionValue<Boolean> PartialEscapeAnalysis = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Integer> EscapeAnalysisIterations = new OptionValue<>(2);
+
     @Option(help = "")
     public static final OptionValue<String> EscapeAnalyzeOnly = new OptionValue<>(null);
+
     @Option(help = "")
     public static final OptionValue<Integer> MaximumEscapeAnalysisArrayLength = new OptionValue<>(32);
+
     @Option(help = "")
     public static final OptionValue<Boolean> PEAInliningHints = new OptionValue<>(false);
 
     @Option(help = "")
     public static final OptionValue<Double> TailDuplicationProbability = new OptionValue<>(0.5);
+
     @Option(help = "")
     public static final OptionValue<Integer> TailDuplicationTrivialSize = new OptionValue<>(1);
 
@@ -96,32 +105,44 @@
     //loop transform settings TODO (gd) tune
     @Option(help = "")
     public static final OptionValue<Boolean> LoopPeeling = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> ReassociateInvariants = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> FullUnroll = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> LoopUnswitch = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Integer> FullUnrollMaxNodes = new OptionValue<>(300);
+
     @Option(help = "")
     public static final OptionValue<Integer> ExactFullUnrollMaxNodes = new OptionValue<>(1200);
+
     @Option(help = "")
     public static final OptionValue<Float> MinimumPeelProbability = new OptionValue<>(0.35f);
+
     @Option(help = "")
     public static final OptionValue<Integer> LoopMaxUnswitch = new OptionValue<>(3);
+
     @Option(help = "")
     public static final OptionValue<Integer> LoopUnswitchMaxIncrease = new OptionValue<>(50);
+
     @Option(help = "")
     public static final OptionValue<Integer> LoopUnswitchUncertaintyBoost = new OptionValue<>(5);
+
     @Option(help = "")
     public static final OptionValue<Boolean> UseLoopLimitChecks = new OptionValue<>(true);
 
     // debugging settings
     @Option(help = "")
     public static final OptionValue<Boolean> ZapStackOnMethodEntry = new OptionValue<>(false);
+
     @Option(help = "")
     public static final OptionValue<Boolean> DeoptALot = new OptionValue<>(false);
+
     @Option(help = "")
     public static final OptionValue<Boolean> VerifyPhases = new OptionValue<>(false);
 
@@ -131,47 +152,66 @@
     // Debug settings:
     @Option(help = "")
     public static final OptionValue<Boolean> BootstrapReplacements = new OptionValue<>(false);
+
     @Option(help = "")
     public static final OptionValue<Integer> GCDebugStartCycle = new OptionValue<>(-1);
+
     // Ideal graph visualizer output settings
     @Option(help = "Dump IdealGraphVisualizer output in binary format")
     public static final OptionValue<Boolean> PrintBinaryGraphs = new OptionValue<>(true);
+
     @Option(help = "Output probabilities for fixed nodes during binary graph dumping")
     public static final OptionValue<Boolean> PrintGraphProbabilities = new OptionValue<>(false);
+
     @Option(help = "Enable dumping to the C1Visualizer. Enabling this option implies PrintBackendCFG.")
     public static final OptionValue<Boolean> PrintCFG = new OptionValue<>(false);
+
     @Option(help = "Enable dumping LIR, register allocation and code generation info to the C1Visualizer.")
     public static final OptionValue<Boolean> PrintBackendCFG = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> PrintIdealGraphFile = new OptionValue<>(false);
+
     @Option(help = "")
     public static final OptionValue<String> PrintIdealGraphAddress = new OptionValue<>("127.0.0.1");
+
     @Option(help = "")
     public static final OptionValue<Integer> PrintIdealGraphPort = new OptionValue<>(4444);
+
     @Option(help = "")
     public static final OptionValue<Integer> PrintBinaryGraphPort = new OptionValue<>(4445);
+
     @Option(help = "")
     public static final OptionValue<Boolean> PrintIdealGraphSchedule = new OptionValue<>(false);
 
     // Other printing settings
     @Option(help = "")
     public static final OptionValue<Boolean> PrintCompilation = new OptionValue<>(false);
+
     @Option(help = "")
     public static final OptionValue<Boolean> PrintAfterCompilation = new OptionValue<>(false);
+
     @Option(help = "Print profiling information when parsing a method's bytecode")
     public static final OptionValue<Boolean> PrintProfilingInformation = new OptionValue<>(false);
+
     @Option(help = "")
     public static final OptionValue<Boolean> PrintCodeBytes = new OptionValue<>(false);
+
     @Option(help = "")
     public static final OptionValue<Boolean> PrintBailout = new OptionValue<>(false);
+
     @Option(help = "")
     public static final OptionValue<Boolean> TraceEscapeAnalysis = new OptionValue<>(false);
+
     @Option(help = "")
     public static final OptionValue<Boolean> ExitVMOnBailout = new OptionValue<>(false);
+
     @Option(help = "")
     public static final OptionValue<Boolean> ExitVMOnException = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> PrintStackTraceOnException = new OptionValue<>(false);
+
     @Option(help = "Set a phase after which the decompiler dumps the graph, -G:Dump= required")
     public static final OptionValue<String> DecompileAfterPhase = new OptionValue<>(null);
 
@@ -180,51 +220,52 @@
     public static final OptionValue<Boolean> HotSpotPrintInlining = new OptionValue<>(false);
 
     // Register allocator debugging
-    @Option(help = "")
+    @Option(help = "Comma separated list of register that the allocation is limited to.")
     public static final OptionValue<String> RegisterPressure = new OptionValue<>(null);
 
     // Code generator settings
     @Option(help = "")
     public static final OptionValue<Boolean> FlowSensitiveReduction = new OptionValue<>(false);
+
     @Option(help = "")
     public static final OptionValue<Boolean> ConditionalElimination = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> UseProfilingInformation = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> RemoveNeverExecutedCode = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> UseExceptionProbability = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> UseExceptionProbabilityForOperations = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> OmitHotExceptionStacktrace = new OptionValue<>(false);
+
     @Option(help = "")
     public static final OptionValue<Boolean> GenSafepoints = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> GenLoopSafepoints = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> UseTypeCheckHints = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> InlineVTableStubs = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> AlwaysInlineVTableStubs = new OptionValue<>(false);
-    @Option(help = "")
-    public static final OptionValue<Boolean> GenAssertionCode = new OptionValue<>(false);
-    @Option(help = "")
-    public static final OptionValue<Boolean> AlignCallsForPatching = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> ResolveClassBeforeStaticInvoke = new OptionValue<>(false);
+
     @Option(help = "")
     public static final OptionValue<Boolean> CanOmitFrame = new OptionValue<>(true);
 
-    // Translating tableswitch instructions
-    @Option(help = "")
-    public static final OptionValue<Integer> MinimumJumpTableSize = new OptionValue<>(5);
-    @Option(help = "")
-    public static final OptionValue<Integer> RangeTestsSwitchDensity = new OptionValue<>(5);
-    @Option(help = "")
-    public static final OptionValue<Double> MinTableSwitchDensity = new OptionValue<>(0.5);
-
     // Ahead of time compilation
     @Option(help = "Try to avoid emitting code where patching is required")
     public static final OptionValue<Boolean> ImmutableCode = new OptionValue<>(false);
@@ -238,42 +279,58 @@
 
     @Option(help = "")
     public static final OptionValue<Boolean> OptAssumptions = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> OptConvertDeoptsToGuards = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> OptReadElimination = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> OptCanonicalizer = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> OptDeoptimizationGrouping = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> OptScheduleOutOfLoops = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> OptEliminateGuards = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> OptImplicitNullChecks = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> OptLivenessAnalysis = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> OptLoopTransform = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> OptFloatingReads = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> OptTailDuplication = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> OptEliminatePartiallyRedundantGuards = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> OptFilterProfiledTypes = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> OptDevirtualizeInvokesOptimistically = new OptionValue<>(true);
+
     @Option(help = "")
     public static final OptionValue<Boolean> OptPushThroughPi = new OptionValue<>(true);
-    @Option(help = "Allow backend to emit arithmetic and compares directly against memory.")
-    public static final OptionValue<Boolean> OptFoldMemory = new OptionValue<>(false);
+
     @Option(help = "Allow backend to match complex expressions.")
     public static final OptionValue<Boolean> MatchExpressions = new OptionValue<>(true);
+
     @Option(help = "Constant fold final fields with default values.")
     public static final OptionValue<Boolean> TrustFinalDefaultFields = new OptionValue<>(true);
+
     @Option(help = "Mark well-known stable fields as such.")
     public static final OptionValue<Boolean> ImplicitStableValues = new OptionValue<>(true);
 
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/policy/AbstractInliningPolicy.java	Wed Dec 03 16:07:22 2014 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/policy/AbstractInliningPolicy.java	Fri Dec 05 11:09:57 2014 +0100
@@ -33,11 +33,11 @@
 
 import java.util.Map;
 
-import static com.oracle.graal.compiler.common.GraalOptions.RelevanceCapForInlining;
 import static com.oracle.graal.phases.common.inlining.InliningPhase.Options.AlwaysInlineIntrinsics;
 
 public abstract class AbstractInliningPolicy implements InliningPolicy {
-
+    public static final float RelevanceCapForInlining = 1.0f;
+    public static final float CapInheritedRelevance = 1.0f;
     protected final Map<Invoke, Double> hints;
 
     public AbstractInliningPolicy(Map<Invoke, Double> hints) {
@@ -45,7 +45,7 @@
     }
 
     protected double computeMaximumSize(double relevance, int configuredMaximum) {
-        double inlineRatio = Math.min(RelevanceCapForInlining.getValue(), relevance);
+        double inlineRatio = Math.min(RelevanceCapForInlining, relevance);
         return configuredMaximum * inlineRatio;
     }
 
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/CallsiteHolderExplorable.java	Wed Dec 03 16:07:22 2014 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/CallsiteHolderExplorable.java	Fri Dec 05 11:09:57 2014 +0100
@@ -25,13 +25,12 @@
 import com.oracle.graal.api.meta.ResolvedJavaMethod;
 import com.oracle.graal.graph.*;
 import com.oracle.graal.nodes.*;
+import com.oracle.graal.phases.common.inlining.policy.*;
 import com.oracle.graal.phases.graph.FixedNodeProbabilityCache;
 
 import java.util.*;
 import java.util.function.ToDoubleFunction;
 
-import static com.oracle.graal.compiler.common.GraalOptions.CapInheritedRelevance;
-
 /**
  * <p>
  * A {@link CallsiteHolder} whose graph has been copied already and thus can be modified without
@@ -204,7 +203,7 @@
     }
 
     public double invokeRelevance(Invoke invoke) {
-        return Math.min(CapInheritedRelevance.getValue(), relevance) * computeInliningRelevance.getRelevance(invoke);
+        return Math.min(AbstractInliningPolicy.CapInheritedRelevance, relevance) * computeInliningRelevance.getRelevance(invoke);
     }
 
     @Override