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