# HG changeset patch # User Thomas Wuerthinger # Date 1417774197 -3600 # Node ID 02b5114b74c1331e9e32be42c2aebff4d1a34a0c # Parent 7d8270532cd9c456a53b6d79d60195798d29d3c6 Started consolidation of options. Added descriptions. diff -r 7d8270532cd9 -r 02b5114b74c1 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/GraalOptions.java --- 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 UseBaselineCompiler = new OptionValue<>(false); - @Option(help = "Enable use of compiler intrinsics") + + @Option(help = "Use compiler intrinsifications.") public static final OptionValue Intrinsify = new OptionValue<>(true); - @Option(help = "Enable inlining of monomorphic calls") + + @Option(help = "Inline calls with monomorphic type profile.") public static final OptionValue InlineMonomorphicCalls = new OptionValue<>(true); - @Option(help = "Enable inlining of polymorphic calls") + + @Option(help = "Inline calls with polymorphic type profile.") public static final OptionValue 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 InlineMegamorphicCalls = new OptionValue<>(true); - @Option(help = "") + + @Option(help = "Maximum desired size of the compiler graph in nodes.") + public static final OptionValue MaximumDesiredSize = new OptionValue<>(20000); + + @Option(help = "Minimum probability for methods to be inlined for megamorphic type profiles.") public static final OptionValue MegamorphicInliningMinMethodProbability = new OptionValue<>(0.33D); - @Option(help = "") - public static final OptionValue MaximumDesiredSize = new OptionValue<>(20000); - @Option(help = "") + + @Option(help = "Maximum level of recursive inlining.") public static final OptionValue MaximumRecursiveInlining = new OptionValue<>(5); - // inlining settings - @Option(help = "") - public static final OptionValue BoostInliningForEscapeAnalysis = new OptionValue<>(2f); - @Option(help = "") - public static final OptionValue RelevanceCapForInlining = new OptionValue<>(1f); - @Option(help = "") - public static final OptionValue CapInheritedRelevance = new OptionValue<>(1f); @Option(help = "") public static final OptionValue 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 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 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 SmallCompiledLowLevelGraphSize = new OptionValue<>(300); + @Option(help = "") public static final OptionValue LimitInlinedInvokes = new OptionValue<>(5.0); + @Option(help = "") public static final OptionValue InlineEverything = new OptionValue<>(false); // escape analysis settings @Option(help = "") public static final OptionValue PartialEscapeAnalysis = new OptionValue<>(true); + @Option(help = "") public static final OptionValue EscapeAnalysisIterations = new OptionValue<>(2); + @Option(help = "") public static final OptionValue EscapeAnalyzeOnly = new OptionValue<>(null); + @Option(help = "") public static final OptionValue MaximumEscapeAnalysisArrayLength = new OptionValue<>(32); + @Option(help = "") public static final OptionValue PEAInliningHints = new OptionValue<>(false); @Option(help = "") public static final OptionValue TailDuplicationProbability = new OptionValue<>(0.5); + @Option(help = "") public static final OptionValue TailDuplicationTrivialSize = new OptionValue<>(1); @@ -96,32 +105,44 @@ //loop transform settings TODO (gd) tune @Option(help = "") public static final OptionValue LoopPeeling = new OptionValue<>(true); + @Option(help = "") public static final OptionValue ReassociateInvariants = new OptionValue<>(true); + @Option(help = "") public static final OptionValue FullUnroll = new OptionValue<>(true); + @Option(help = "") public static final OptionValue LoopUnswitch = new OptionValue<>(true); + @Option(help = "") public static final OptionValue FullUnrollMaxNodes = new OptionValue<>(300); + @Option(help = "") public static final OptionValue ExactFullUnrollMaxNodes = new OptionValue<>(1200); + @Option(help = "") public static final OptionValue MinimumPeelProbability = new OptionValue<>(0.35f); + @Option(help = "") public static final OptionValue LoopMaxUnswitch = new OptionValue<>(3); + @Option(help = "") public static final OptionValue LoopUnswitchMaxIncrease = new OptionValue<>(50); + @Option(help = "") public static final OptionValue LoopUnswitchUncertaintyBoost = new OptionValue<>(5); + @Option(help = "") public static final OptionValue UseLoopLimitChecks = new OptionValue<>(true); // debugging settings @Option(help = "") public static final OptionValue ZapStackOnMethodEntry = new OptionValue<>(false); + @Option(help = "") public static final OptionValue DeoptALot = new OptionValue<>(false); + @Option(help = "") public static final OptionValue VerifyPhases = new OptionValue<>(false); @@ -131,47 +152,66 @@ // Debug settings: @Option(help = "") public static final OptionValue BootstrapReplacements = new OptionValue<>(false); + @Option(help = "") public static final OptionValue GCDebugStartCycle = new OptionValue<>(-1); + // Ideal graph visualizer output settings @Option(help = "Dump IdealGraphVisualizer output in binary format") public static final OptionValue PrintBinaryGraphs = new OptionValue<>(true); + @Option(help = "Output probabilities for fixed nodes during binary graph dumping") public static final OptionValue PrintGraphProbabilities = new OptionValue<>(false); + @Option(help = "Enable dumping to the C1Visualizer. Enabling this option implies PrintBackendCFG.") public static final OptionValue PrintCFG = new OptionValue<>(false); + @Option(help = "Enable dumping LIR, register allocation and code generation info to the C1Visualizer.") public static final OptionValue PrintBackendCFG = new OptionValue<>(true); + @Option(help = "") public static final OptionValue PrintIdealGraphFile = new OptionValue<>(false); + @Option(help = "") public static final OptionValue PrintIdealGraphAddress = new OptionValue<>("127.0.0.1"); + @Option(help = "") public static final OptionValue PrintIdealGraphPort = new OptionValue<>(4444); + @Option(help = "") public static final OptionValue PrintBinaryGraphPort = new OptionValue<>(4445); + @Option(help = "") public static final OptionValue PrintIdealGraphSchedule = new OptionValue<>(false); // Other printing settings @Option(help = "") public static final OptionValue PrintCompilation = new OptionValue<>(false); + @Option(help = "") public static final OptionValue PrintAfterCompilation = new OptionValue<>(false); + @Option(help = "Print profiling information when parsing a method's bytecode") public static final OptionValue PrintProfilingInformation = new OptionValue<>(false); + @Option(help = "") public static final OptionValue PrintCodeBytes = new OptionValue<>(false); + @Option(help = "") public static final OptionValue PrintBailout = new OptionValue<>(false); + @Option(help = "") public static final OptionValue TraceEscapeAnalysis = new OptionValue<>(false); + @Option(help = "") public static final OptionValue ExitVMOnBailout = new OptionValue<>(false); + @Option(help = "") public static final OptionValue ExitVMOnException = new OptionValue<>(true); + @Option(help = "") public static final OptionValue PrintStackTraceOnException = new OptionValue<>(false); + @Option(help = "Set a phase after which the decompiler dumps the graph, -G:Dump= required") public static final OptionValue DecompileAfterPhase = new OptionValue<>(null); @@ -180,51 +220,52 @@ public static final OptionValue 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 RegisterPressure = new OptionValue<>(null); // Code generator settings @Option(help = "") public static final OptionValue FlowSensitiveReduction = new OptionValue<>(false); + @Option(help = "") public static final OptionValue ConditionalElimination = new OptionValue<>(true); + @Option(help = "") public static final OptionValue UseProfilingInformation = new OptionValue<>(true); + @Option(help = "") public static final OptionValue RemoveNeverExecutedCode = new OptionValue<>(true); + @Option(help = "") public static final OptionValue UseExceptionProbability = new OptionValue<>(true); + @Option(help = "") public static final OptionValue UseExceptionProbabilityForOperations = new OptionValue<>(true); + @Option(help = "") public static final OptionValue OmitHotExceptionStacktrace = new OptionValue<>(false); + @Option(help = "") public static final OptionValue GenSafepoints = new OptionValue<>(true); + @Option(help = "") public static final OptionValue GenLoopSafepoints = new OptionValue<>(true); + @Option(help = "") public static final OptionValue UseTypeCheckHints = new OptionValue<>(true); + @Option(help = "") public static final OptionValue InlineVTableStubs = new OptionValue<>(true); + @Option(help = "") public static final OptionValue AlwaysInlineVTableStubs = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue GenAssertionCode = new OptionValue<>(false); - @Option(help = "") - public static final OptionValue AlignCallsForPatching = new OptionValue<>(true); + @Option(help = "") public static final OptionValue ResolveClassBeforeStaticInvoke = new OptionValue<>(false); + @Option(help = "") public static final OptionValue CanOmitFrame = new OptionValue<>(true); - // Translating tableswitch instructions - @Option(help = "") - public static final OptionValue MinimumJumpTableSize = new OptionValue<>(5); - @Option(help = "") - public static final OptionValue RangeTestsSwitchDensity = new OptionValue<>(5); - @Option(help = "") - public static final OptionValue MinTableSwitchDensity = new OptionValue<>(0.5); - // Ahead of time compilation @Option(help = "Try to avoid emitting code where patching is required") public static final OptionValue ImmutableCode = new OptionValue<>(false); @@ -238,42 +279,58 @@ @Option(help = "") public static final OptionValue OptAssumptions = new OptionValue<>(true); + @Option(help = "") public static final OptionValue OptConvertDeoptsToGuards = new OptionValue<>(true); + @Option(help = "") public static final OptionValue OptReadElimination = new OptionValue<>(true); + @Option(help = "") public static final OptionValue OptCanonicalizer = new OptionValue<>(true); + @Option(help = "") public static final OptionValue OptDeoptimizationGrouping = new OptionValue<>(true); + @Option(help = "") public static final OptionValue OptScheduleOutOfLoops = new OptionValue<>(true); + @Option(help = "") public static final OptionValue OptEliminateGuards = new OptionValue<>(true); + @Option(help = "") public static final OptionValue OptImplicitNullChecks = new OptionValue<>(true); + @Option(help = "") public static final OptionValue OptLivenessAnalysis = new OptionValue<>(true); + @Option(help = "") public static final OptionValue OptLoopTransform = new OptionValue<>(true); + @Option(help = "") public static final OptionValue OptFloatingReads = new OptionValue<>(true); + @Option(help = "") public static final OptionValue OptTailDuplication = new OptionValue<>(true); + @Option(help = "") public static final OptionValue OptEliminatePartiallyRedundantGuards = new OptionValue<>(true); + @Option(help = "") public static final OptionValue OptFilterProfiledTypes = new OptionValue<>(true); + @Option(help = "") public static final OptionValue OptDevirtualizeInvokesOptimistically = new OptionValue<>(true); + @Option(help = "") public static final OptionValue OptPushThroughPi = new OptionValue<>(true); - @Option(help = "Allow backend to emit arithmetic and compares directly against memory.") - public static final OptionValue OptFoldMemory = new OptionValue<>(false); + @Option(help = "Allow backend to match complex expressions.") public static final OptionValue MatchExpressions = new OptionValue<>(true); + @Option(help = "Constant fold final fields with default values.") public static final OptionValue TrustFinalDefaultFields = new OptionValue<>(true); + @Option(help = "Mark well-known stable fields as such.") public static final OptionValue ImplicitStableValues = new OptionValue<>(true); diff -r 7d8270532cd9 -r 02b5114b74c1 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/policy/AbstractInliningPolicy.java --- 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 hints; public AbstractInliningPolicy(Map 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; } diff -r 7d8270532cd9 -r 02b5114b74c1 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/CallsiteHolderExplorable.java --- 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; - /** *

* 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