Mercurial > hg > graal-compiler
changeset 18641:e22a21b27036
Merge.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Sun, 07 Dec 2014 20:43:33 +0100 |
parents | 02b5114b74c1 (diff) 56f806632622 (current diff) |
children | 133d5a98c547 |
files | |
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 Sat Dec 06 01:14:03 2014 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/GraalOptions.java Sun Dec 07 20:43:33 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 Sat Dec 06 01:14:03 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/policy/AbstractInliningPolicy.java Sun Dec 07 20:43:33 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 Sat Dec 06 01:14:03 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/CallsiteHolderExplorable.java Sun Dec 07 20:43:33 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