1 /*
   2  * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 package com.oracle.graal.phases;
  24 
  25 import com.oracle.graal.options.*;
  26 
  27 /**
  28  * This class encapsulates options that control the behavior of the Graal compiler.
  29  */
  30 // @formatter:off
  31 public final class GraalOptions {
  32 
  33     @Option(help = "Enable use of compiler intrinsics")
  34     public static final OptionValue<Boolean> Intrinsify = new OptionValue<>(true);
  35     @Option(help = "Enable inlining of monomorphic calls")
  36     static final OptionValue<Boolean> InlineMonomorphicCalls = new OptionValue<>(true);
  37     @Option(help = "Enable inlining of polymorphic calls")
  38     static final OptionValue<Boolean> InlinePolymorphicCalls = new OptionValue<>(true);
  39     @Option(help = "Enable inlining of megamorphic calls")
  40     static final OptionValue<Boolean> InlineMegamorphicCalls = new OptionValue<>(true);
  41     @Option(help = "")
  42     public static final OptionValue<Double> MegamorphicInliningMinMethodProbability = new OptionValue<>(0.33D);
  43     @Option(help = "")
  44     public static final OptionValue<Integer> MaximumDesiredSize = new OptionValue<>(20000);
  45     @Option(help = "")
  46     public static final OptionValue<Integer> MaximumRecursiveInlining = new OptionValue<>(1);
  47 
  48     // inlining settings
  49     @Option(help = "")
  50     public static final OptionValue<Float> BoostInliningForEscapeAnalysis = new OptionValue<>(2f);
  51     @Option(help = "")
  52     public static final OptionValue<Float> RelevanceCapForInlining = new OptionValue<>(1f);
  53     @Option(help = "")
  54     public static final OptionValue<Float> CapInheritedRelevance = new OptionValue<>(1f);
  55     @Option(help = "")
  56     public static final OptionValue<Boolean> IterativeInlining = new OptionValue<>(false);
  57 
  58     @Option(help = "")
  59     public static final OptionValue<Integer> TrivialInliningSize = new OptionValue<>(10);
  60     @Option(help = "")
  61     public static final OptionValue<Integer> MaximumInliningSize = new OptionValue<>(300);
  62     @Option(help = "")
  63     public static final OptionValue<Integer> SmallCompiledLowLevelGraphSize = new OptionValue<>(300);
  64     @Option(help = "")
  65     public static final OptionValue<Double> LimitInlinedInvokes = new OptionValue<>(5.0);


  66 
  67     // escape analysis settings
  68     @Option(help = "")
  69     public static final OptionValue<Boolean> PartialEscapeAnalysis = new OptionValue<>(true);
  70     @Option(help = "")
  71     public static final OptionValue<Boolean> EscapeAnalysisHistogram = new OptionValue<>(false);
  72     @Option(help = "")
  73     public static final OptionValue<Integer> EscapeAnalysisIterations = new OptionValue<>(2);
  74     @Option(help = "")
  75     public static final OptionValue<String> EscapeAnalyzeOnly = new OptionValue<>(null);
  76     @Option(help = "")
  77     public static final OptionValue<Integer> MaximumEscapeAnalysisArrayLength = new OptionValue<>(32);
  78     @Option(help = "")
  79     public static final OptionValue<Boolean> PEAInliningHints = new OptionValue<>(false);
  80 
  81     @Option(help = "")
  82     public static final OptionValue<Double> TailDuplicationProbability = new OptionValue<>(0.5);
  83     @Option(help = "")
  84     public static final OptionValue<Integer> TailDuplicationTrivialSize = new OptionValue<>(1);
  85 
  86     // profiling information
  87     @Option(help = "")
  88     public static final OptionValue<Integer> DeoptsToDisableOptimisticOptimization = new OptionValue<>(40);
  89 
  90     // comilation queue
  91     @Option(help = "")
  92     public static final OptionValue<Boolean> DynamicCompilePriority = new OptionValue<>(false);
  93     @Option(help = "")
  94     public static final OptionValue<String> CompileTheWorld = new OptionValue<>(null);
  95     @Option(help = "")
  96     public static final OptionValue<Integer> CompileTheWorldStartAt = new OptionValue<>(1);
  97     @Option(help = "")
  98     public static final OptionValue<Integer> CompileTheWorldStopAt = new OptionValue<>(Integer.MAX_VALUE);
  99 
 100     // graph caching
 101     @Option(help = "")
 102     public static final OptionValue<Boolean> CacheGraphs = new OptionValue<>(true);
 103     @Option(help = "")
 104     public static final OptionValue<Integer> GraphCacheSize = new OptionValue<>(1000);
 105     @Option(help = "")
 106     public static final OptionValue<Boolean> PrintGraphCache = new OptionValue<>(false);
 107 
 108     //loop transform settings TODO (gd) tune
 109     @Option(help = "")
 110     public static final OptionValue<Boolean> LoopPeeling = new OptionValue<>(true);
 111     @Option(help = "")
 112     public static final OptionValue<Boolean> ReassociateInvariants = new OptionValue<>(true);
 113     @Option(help = "")
 114     public static final OptionValue<Boolean> FullUnroll = new OptionValue<>(true);
 115     @Option(help = "")
 116     public static final OptionValue<Boolean> LoopUnswitch = new OptionValue<>(true);
 117     @Option(help = "")
 118     public static final OptionValue<Integer> FullUnrollMaxNodes = new OptionValue<>(300);
 119     @Option(help = "")
 120     public static final OptionValue<Integer> ExactFullUnrollMaxNodes = new OptionValue<>(1200);
 121     @Option(help = "")
 122     public static final OptionValue<Float> MinimumPeelProbability = new OptionValue<>(0.35f);
 123     @Option(help = "")
 124     public static final OptionValue<Integer> LoopMaxUnswitch = new OptionValue<>(3);
 125     @Option(help = "")
 126     public static final OptionValue<Integer> LoopUnswitchMaxIncrease = new OptionValue<>(50);
 127     @Option(help = "")
 128     public static final OptionValue<Integer> LoopUnswitchUncertaintyBoost = new OptionValue<>(5);
 129     @Option(help = "")
 130     public static final OptionValue<Boolean> UseLoopLimitChecks = new OptionValue<>(true);
 131 
 132     // debugging settings
 133     @Option(help = "")
 134     public static final OptionValue<Boolean> ZapStackOnMethodEntry = new OptionValue<>(false);
 135     @Option(help = "")
 136     public static final OptionValue<Boolean> DeoptALot = new OptionValue<>(false);
 137     @Option(help = "")
 138     public static final OptionValue<Boolean> VerifyPhases = new OptionValue<>(false);
 139 
 140     @Option(help = "")
 141     public static final OptionValue<String> PrintFilter = new OptionValue<>(null);
 142 
 143     // Debug settings:
 144     @Option(help = "")
 145     public static final OptionValue<Boolean> BootstrapReplacements = new OptionValue<>(false);
 146     @Option(help = "")
 147     public static final OptionValue<Integer> GCDebugStartCycle = new OptionValue<>(-1);
 148     // Ideal graph visualizer output settings
 149     @Option(help = "")
 150     public static final OptionValue<Boolean> PrintBinaryGraphs = new OptionValue<>(true);
 151     @Option(help = "")
 152     public static final OptionValue<Boolean> PrintCFG = new OptionValue<>(false);
 153     @Option(help = "")
 154     public static final OptionValue<Boolean> PrintIdealGraphFile = new OptionValue<>(false);
 155     @Option(help = "")
 156     public static final OptionValue<String> PrintIdealGraphAddress = new OptionValue<>("127.0.0.1");
 157     @Option(help = "")
 158     public static final OptionValue<Integer> PrintIdealGraphPort = new OptionValue<>(4444);
 159     @Option(help = "")
 160     public static final OptionValue<Integer> PrintBinaryGraphPort = new OptionValue<>(4445);
 161 
 162     // Other printing settings
 163     @Option(help = "")
 164     public static final OptionValue<Boolean> PrintCompilation = new OptionValue<>(false);
 165     @Option(help = "")
 166     public static final OptionValue<Boolean> PrintProfilingInformation = new OptionValue<>(false);
 167     @Option(help = "")
 168     public static final OptionValue<Boolean> PrintIRWithLIR = new OptionValue<>(false);
 169     @Option(help = "")
 170     public static final OptionValue<Boolean> PrintCodeBytes = new OptionValue<>(false);
 171     @Option(help = "")
 172     public static final OptionValue<Boolean> PrintBailout = new OptionValue<>(false);
 173     @Option(help = "")
 174     public static final OptionValue<Integer> TraceLinearScanLevel = new OptionValue<>(0);
 175     @Option(help = "")
 176     public static final OptionValue<Integer> TraceLIRGeneratorLevel = new OptionValue<>(0);
 177     @Option(help = "")
 178     public static final OptionValue<Boolean> TraceEscapeAnalysis = new OptionValue<>(false);
 179     @Option(help = "")
 180     public static final OptionValue<Integer> TraceBytecodeParserLevel = new OptionValue<>(0);
 181     @Option(help = "")
 182     public static final OptionValue<Boolean> ExitVMOnBailout = new OptionValue<>(false);
 183     @Option(help = "")
 184     public static final OptionValue<Boolean> ExitVMOnException = new OptionValue<>(true);
 185     @Option(help = "")
 186     public static final OptionValue<Boolean> PrintStackTraceOnException = new OptionValue<>(false);
 187     @Option(help = "Sets a phase after which the decompiler dumps the graph, -G:Dump= required")
 188     public static final OptionValue<String> DecompileAfterPhase = new OptionValue<>(null);
 189 
 190     // HotSpot command line options
 191     @Option(help = "")
 192     public static final OptionValue<Boolean> HotSpotPrintCompilation = new OptionValue<>(false);
 193     @Option(help = "")
 194     public static final OptionValue<Boolean> HotSpotPrintInlining = new OptionValue<>(false);
 195 
 196     // Register allocator debugging
 197     @Option(help = "")
 198     public static final OptionValue<String> RegisterPressure = new OptionValue<>(null);
 199 
 200     // Code generator settings
 201     @Option(help = "")
 202     public static final OptionValue<Boolean> ConditionalElimination = new OptionValue<>(true);
 203     @Option(help = "")
 204     public static final OptionValue<Boolean> UseProfilingInformation = new OptionValue<>(true);
 205     @Option(help = "")
 206            static final OptionValue<Boolean> RemoveNeverExecutedCode = new OptionValue<>(true);
 207            @Option(help = "")
 208            static final OptionValue<Boolean> UseExceptionProbability = new OptionValue<>(true);
 209            @Option(help = "")
 210            static final OptionValue<Boolean> UseExceptionProbabilityForOperations = new OptionValue<>(true);
 211            @Option(help = "")
 212     public static final OptionValue<Boolean> OmitHotExceptionStacktrace = new OptionValue<>(false);
 213     @Option(help = "")
 214     public static final OptionValue<Boolean> GenSafepoints = new OptionValue<>(true);
 215     @Option(help = "")
 216     public static final OptionValue<Boolean> GenLoopSafepoints = new OptionValue<>(true);
 217     @Option(help = "")
 218            static final OptionValue<Boolean> UseTypeCheckHints = new OptionValue<>(true);
 219            @Option(help = "")
 220     public static final OptionValue<Boolean> InlineVTableStubs = new OptionValue<>(true);
 221     @Option(help = "")
 222     public static final OptionValue<Boolean> AlwaysInlineVTableStubs = new OptionValue<>(false);
 223     @Option(help = "")
 224     public static final OptionValue<Boolean> GenAssertionCode = new OptionValue<>(false);
 225     @Option(help = "")
 226     public static final OptionValue<Boolean> AlignCallsForPatching = new OptionValue<>(true);
 227     @Option(help = "")
 228     public static final OptionValue<Boolean> ResolveClassBeforeStaticInvoke = new OptionValue<>(false);
 229     @Option(help = "")
 230     public static final OptionValue<Boolean> CanOmitFrame = new OptionValue<>(true);
 231     @Option(help = "")
 232     public static final OptionValue<Integer> SafepointPollOffset = new OptionValue<>(256);
 233 
 234     @Option(help = "")
 235     public static final OptionValue<Boolean> MemoryAwareScheduling = new OptionValue<>(true);
 236 
 237     // Translating tableswitch instructions
 238     @Option(help = "")
 239     public static final OptionValue<Integer> MinimumJumpTableSize = new OptionValue<>(5);
 240     @Option(help = "")
 241     public static final OptionValue<Integer> RangeTestsSwitchDensity = new OptionValue<>(5);
 242     @Option(help = "")
 243     public static final OptionValue<Double> MinTableSwitchDensity = new OptionValue<>(0.5);
 244 
 245     // Ahead of time compilation
 246     @Option(help = "configure compiler to emit code compatible with AOT requirements for HotSpot")
 247     public static final OptionValue<Boolean> AOTCompilation = new OptionValue<>(false);
 248 
 249     // Runtime settings
 250     @Option(help = "")
 251     public static final OptionValue<Integer> StackShadowPages = new OptionValue<>(2);
 252 
 253     @Option(help = "")
 254     public static final OptionValue<Boolean> SupportJsrBytecodes = new OptionValue<>(true);
 255 
 256     @Option(help = "")
 257     public static final OptionValue<Boolean> OptAssumptions = new OptionValue<>(true);
 258     @Option(help = "")
 259     public static final OptionValue<Boolean> OptConvertDeoptsToGuards = new OptionValue<>(true);
 260     @Option(help = "")
 261     public static final OptionValue<Boolean> OptReadElimination = new OptionValue<>(true);
 262     @Option(help = "")
 263     public static final OptionValue<Boolean> OptCanonicalizer = new OptionValue<>(true);
 264     @Option(help = "")
 265      public static final OptionValue<Boolean> OptScheduleOutOfLoops = new OptionValue<>(true);
 266     @Option(help = "")
 267     public static final OptionValue<Boolean> OptEliminateGuards = new OptionValue<>(true);
 268     @Option(help = "")
 269     public static final OptionValue<Boolean> OptEliminateSafepoints = new OptionValue<>(true);
 270     @Option(help = "")
 271     public static final OptionValue<Boolean> OptImplicitNullChecks = new OptionValue<>(true);
 272     @Option(help = "")
 273     public static final OptionValue<Boolean> OptLivenessAnalysis = new OptionValue<>(true);
 274     @Option(help = "")
 275     public static final OptionValue<Boolean> OptLoopTransform = new OptionValue<>(true);
 276     @Option(help = "")
 277     public static final OptionValue<Boolean> OptFloatingReads = new OptionValue<>(true);
 278     @Option(help = "")
 279     public static final OptionValue<Boolean> OptTailDuplication = new OptionValue<>(true);
 280     @Option(help = "")
 281     public static final OptionValue<Boolean> OptEliminatePartiallyRedundantGuards = new OptionValue<>(true);
 282     @Option(help = "")
 283     public static final OptionValue<Boolean> OptFilterProfiledTypes = new OptionValue<>(true);
 284     @Option(help = "")
 285     public static final OptionValue<Boolean> OptDevirtualizeInvokesOptimistically = new OptionValue<>(true);
 286     @Option(help = "")
 287     public static final OptionValue<Boolean> OptPushThroughPi = new OptionValue<>(true);
 288 
 289     // Intrinsification settings
 290     @Option(help = "")
 291     public static final OptionValue<Boolean> IntrinsifyObjectClone = new OptionValue<>(false);
 292     @Option(help = "")
 293     public static final OptionValue<Boolean> IntrinsifyArrayCopy = new OptionValue<>(true);
 294     @Option(help = "")
 295     public static final OptionValue<Boolean> IntrinsifyObjectMethods = new OptionValue<>(true);
 296     @Option(help = "")
 297     public static final OptionValue<Boolean> IntrinsifySystemMethods = new OptionValue<>(true);
 298     @Option(help = "")
 299     public static final OptionValue<Boolean> IntrinsifyClassMethods = new OptionValue<>(true);
 300     @Option(help = "")
 301     public static final OptionValue<Boolean> IntrinsifyThreadMethods = new OptionValue<>(true);
 302     @Option(help = "")
 303     public static final OptionValue<Boolean> IntrinsifyUnsafeMethods = new OptionValue<>(true);
 304     @Option(help = "")
 305     public static final OptionValue<Boolean> IntrinsifyMathMethods = new OptionValue<>(true);
 306     @Option(help = "")
 307     public static final OptionValue<Boolean> IntrinsifyAESMethods = new OptionValue<>(true);
 308     @Option(help = "")
 309     public static final OptionValue<Boolean> IntrinsifyReflectionMethods = new OptionValue<>(true);
 310     @Option(help = "")
 311     public static final OptionValue<Boolean> IntrinsifyInstalledCodeMethods = new OptionValue<>(true);
 312     @Option(help = "")
 313     public static final OptionValue<Boolean> IntrinsifyCallSiteTarget = new OptionValue<>(true);
 314 
 315     /**
 316      * Counts the various paths taken through snippets.
 317      */
 318     @Option(help = "")
 319     public static final OptionValue<Boolean> SnippetCounters = new OptionValue<>(false);
 320 
 321     /**
 322      * If the probability that a checkcast will hit one the profiled types (up to {@link #CheckcastMaxHints})
 323      * is below this value, the checkcast will be compiled without hints.
 324      */
 325     @Option(help = "")
 326     public static final OptionValue<Double> CheckcastMinHintHitProbability = new OptionValue<>(0.5);
 327 
 328     /**
 329      * The maximum number of hint types that will be used when compiling a checkcast for which
 330      * profiling information is available. Note that {@link #CheckcastMinHintHitProbability}
 331      * also influences whether hints are used.
 332      */
 333     @Option(help = "")
 334     public static final OptionValue<Integer> CheckcastMaxHints = new OptionValue<>(2);
 335 
 336     /**
 337      * If the probability that an instanceof will hit one the profiled types (up to {@link #InstanceOfMaxHints})
 338      * is below this value, the instanceof will be compiled without hints.
 339      */
 340     @Option(help = "")
 341     public static final OptionValue<Double> InstanceOfMinHintHitProbability = new OptionValue<>(0.5);
 342 
 343     /**
 344      * The maximum number of hint types that will be used when compiling an instanceof for which
 345      * profiling information is available. Note that {@link #InstanceOfMinHintHitProbability}
 346      * also influences whether hints are used.
 347      */
 348     @Option(help = "")
 349     public static final OptionValue<Integer> InstanceOfMaxHints = new OptionValue<>(2);
 350 }
--- EOF ---