annotate src/hotspot/share/opto/c2_globals.hpp @ 49268:74db2b7cec75

8146201: [AOT] Class static initializers that are not pure should not be executed during static compilation Reviewed-by: kvn
author dlong
date Tue, 20 Mar 2018 10:23:14 -0700
parents f913f6dba2d3
children
rev   line source
duke@1 1 /*
gziemski@38273 2 * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
duke@1 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@1 4 *
duke@1 5 * This code is free software; you can redistribute it and/or modify it
duke@1 6 * under the terms of the GNU General Public License version 2 only, as
duke@1 7 * published by the Free Software Foundation.
duke@1 8 *
duke@1 9 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@1 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@1 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@1 12 * version 2 for more details (a copy is included in the LICENSE file that
duke@1 13 * accompanied this code).
duke@1 14 *
duke@1 15 * You should have received a copy of the GNU General Public License version
duke@1 16 * 2 along with this work; if not, write to the Free Software Foundation,
duke@1 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@1 18 *
trims@5547 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
trims@5547 20 * or visit www.oracle.com if you need additional information or have any
trims@5547 21 * questions.
duke@1 22 *
duke@1 23 */
duke@1 24
stefank@7397 25 #ifndef SHARE_VM_OPTO_C2_GLOBALS_HPP
stefank@7397 26 #define SHARE_VM_OPTO_C2_GLOBALS_HPP
stefank@7397 27
stefank@7397 28 #include "runtime/globals.hpp"
goetz@40010 29 #include "utilities/macros.hpp"
goetz@40010 30
goetz@40010 31 #include CPU_HEADER(c2_globals)
goetz@40010 32 #include OS_HEADER(c2_globals)
stefank@7397 33
duke@1 34 //
duke@1 35 // Defines all globals flags used by the server compiler.
duke@1 36 //
duke@1 37
gziemski@38273 38 #define C2_FLAGS(develop, \
gziemski@38273 39 develop_pd, \
gziemski@38273 40 product, \
gziemski@38273 41 product_pd, \
gziemski@38273 42 diagnostic, \
csahu@39117 43 diagnostic_pd, \
gziemski@38273 44 experimental, \
gziemski@38273 45 notproduct, \
gziemski@38273 46 range, \
gziemski@38273 47 constraint, \
gziemski@38273 48 writeable) \
duke@1 49 \
shade@39435 50 diagnostic(bool, StressLCM, false, \
shade@15871 51 "Randomize instruction scheduling in LCM") \
shade@15871 52 \
shade@39435 53 diagnostic(bool, StressGCM, false, \
shade@15871 54 "Randomize instruction scheduling in GCM") \
shade@15871 55 \
duke@1 56 develop(intx, OptoPrologueNops, 0, \
duke@1 57 "Insert this many extra nop instructions " \
duke@1 58 "in the prologue of every nmethod") \
zmajo@33163 59 range(0, 128) \
duke@1 60 \
duke@1 61 product_pd(intx, InteriorEntryAlignment, \
duke@1 62 "Code alignment for interior entry points " \
duke@1 63 "in generated code (in bytes)") \
zmajo@33163 64 constraint(InteriorEntryAlignmentConstraintFunc, AfterErgo) \
duke@1 65 \
duke@1 66 product(intx, MaxLoopPad, (OptoLoopAlignment-1), \
gziemski@31371 67 "Align a loop if padding size in bytes is less or equal to this " \
gziemski@31371 68 "value") \
zmajo@33163 69 range(0, max_jint) \
duke@1 70 \
kvn@30624 71 product(intx, MaxVectorSize, 64, \
kvn@13104 72 "Max vector size in bytes, " \
kvn@13104 73 "actual size could be less depending on elements type") \
zmajo@33163 74 range(0, max_jint) \
kvn@13104 75 \
kvn@13885 76 product(bool, AlignVector, true, \
kvn@13104 77 "Perform vector store/load alignment in loop") \
kvn@13104 78 \
duke@1 79 product(intx, NumberOfLoopInstrToAlign, 4, \
duke@1 80 "Number of first instructions in a loop to align") \
zmajo@33163 81 range(0, max_jint) \
duke@1 82 \
duke@1 83 notproduct(intx, IndexSetWatch, 0, \
duke@1 84 "Trace all operations on this IndexSet (-1 means all, 0 none)") \
gziemski@31371 85 range(-1, 0) \
duke@1 86 \
duke@1 87 develop(intx, OptoNodeListSize, 4, \
duke@1 88 "Starting allocation size of Node_List data structures") \
zmajo@33163 89 range(0, max_jint) \
duke@1 90 \
duke@1 91 develop(intx, OptoBlockListSize, 8, \
duke@1 92 "Starting allocation size of Block_List data structures") \
zmajo@33163 93 range(0, max_jint) \
duke@1 94 \
duke@1 95 develop(intx, OptoPeepholeAt, -1, \
duke@1 96 "Apply peephole optimizations to this peephole rule") \
duke@1 97 \
duke@1 98 notproduct(bool, PrintIdeal, false, \
duke@1 99 "Print ideal graph before code generation") \
duke@1 100 \
duke@1 101 notproduct(bool, PrintOpto, false, \
duke@1 102 "Print compiler2 attempts") \
duke@1 103 \
duke@1 104 notproduct(bool, PrintOptoInlining, false, \
duke@1 105 "Print compiler2 inlining decisions") \
duke@1 106 \
duke@1 107 notproduct(bool, VerifyOpto, false, \
duke@1 108 "Apply more time consuming verification during compilation") \
duke@1 109 \
bharadwaj@14623 110 notproduct(bool, VerifyIdealNodeCount, false, \
bharadwaj@14623 111 "Verify that tracked dead ideal node count is accurate") \
bharadwaj@14623 112 \
bharadwaj@14623 113 notproduct(bool, PrintIdealNodeCount, false, \
bharadwaj@14623 114 "Print liveness counts of ideal nodes") \
bharadwaj@14623 115 \
duke@1 116 notproduct(bool, VerifyOptoOopOffsets, false, \
duke@1 117 "Check types of base addresses in field references") \
duke@1 118 \
duke@1 119 develop(bool, IdealizedNumerics, false, \
duke@1 120 "Check performance difference allowing FP " \
duke@1 121 "associativity and commutativity...") \
duke@1 122 \
goetz@42063 123 diagnostic_pd(bool, IdealizeClearArrayNode, \
goetz@42063 124 "Replace ClearArrayNode by subgraph of basic operations.") \
goetz@42063 125 \
duke@1 126 develop(bool, OptoBreakpoint, false, \
duke@1 127 "insert breakpoint at method entry") \
duke@1 128 \
duke@1 129 notproduct(bool, OptoBreakpointOSR, false, \
duke@1 130 "insert breakpoint at osr method entry") \
duke@1 131 \
duke@1 132 notproduct(intx, BreakAtNode, 0, \
duke@1 133 "Break at construction of this Node (either _idx or _debug_idx)") \
duke@1 134 \
duke@1 135 notproduct(bool, OptoBreakpointC2R, false, \
duke@1 136 "insert breakpoint at runtime stub entry") \
duke@1 137 \
duke@1 138 notproduct(bool, OptoNoExecute, false, \
duke@1 139 "Attempt to parse and compile but do not execute generated code") \
duke@1 140 \
duke@1 141 notproduct(bool, PrintOptoStatistics, false, \
duke@1 142 "Print New compiler statistics") \
duke@1 143 \
neliasso@33451 144 diagnostic(bool, PrintOptoAssembly, false, \
duke@1 145 "Print New compiler assembly output") \
duke@1 146 \
duke@1 147 develop_pd(bool, OptoPeephole, \
duke@1 148 "Apply peephole optimizations after register allocation") \
duke@1 149 \
duke@1 150 develop(bool, OptoRemoveUseless, true, \
duke@1 151 "Remove useless nodes after parsing") \
duke@1 152 \
duke@1 153 notproduct(bool, PrintFrameConverterAssembly, false, \
duke@1 154 "Print New compiler assembly output for frame converters") \
duke@1 155 \
duke@1 156 notproduct(bool, PrintParseStatistics, false, \
duke@1 157 "Print nodes, transforms and new values made per bytecode parsed")\
duke@1 158 \
duke@1 159 notproduct(bool, PrintOptoPeephole, false, \
duke@1 160 "Print New compiler peephole replacements") \
duke@1 161 \
duke@1 162 develop(bool, PrintCFGBlockFreq, false, \
duke@1 163 "Print CFG block freqencies") \
duke@1 164 \
duke@1 165 develop(bool, TraceOptoParse, false, \
duke@1 166 "Trace bytecode parse and control-flow merge") \
duke@1 167 \
duke@1 168 product_pd(intx, LoopUnrollLimit, \
duke@1 169 "Unroll loop bodies with node count less than this") \
zmajo@33163 170 range(0, max_jint / 4) \
duke@1 171 \
mcberg@36066 172 product_pd(intx, LoopPercentProfileLimit, \
mcberg@36066 173 "Unroll loop bodies with % node count of profile limit") \
mcberg@36066 174 range(10, 100) \
mcberg@36066 175 \
kvn@19283 176 product(intx, LoopMaxUnroll, 16, \
kvn@19283 177 "Maximum number of unrolls for main loop") \
zmajo@33163 178 range(0, max_jint) \
kvn@19283 179 \
iveresov@34162 180 product_pd(bool, SuperWordLoopUnrollAnalysis, \
iveresov@34162 181 "Map number of unrolls for main loop via " \
iveresov@34162 182 "Superword Level Parallelism analysis") \
mcberg@31403 183 \
duke@46061 184 experimental(bool, PostLoopMultiversioning, false, \
mcberg@37292 185 "Multi versioned post loops to eliminate range checks") \
mcberg@37292 186 \
mcberg@31403 187 notproduct(bool, TraceSuperWordLoopUnrollAnalysis, false, \
mcberg@31403 188 "Trace what Superword Level Parallelism analysis applies") \
mcberg@31403 189 \
duke@1 190 product(intx, LoopUnrollMin, 4, \
duke@1 191 "Minimum number of unroll loop bodies before checking progress" \
duke@1 192 "of rounds of unroll,optimize,..") \
zmajo@33163 193 range(0, max_jint) \
duke@1 194 \
thartmann@47420 195 product(bool, UseSubwordForMaxVector, true, \
vdeshpande@46692 196 "Use Subword Analysis to set maximum vector size") \
vdeshpande@46692 197 \
kvn@48164 198 product(bool, UseVectorCmov, false, \
kvn@48164 199 "Use Vectorized Cmov") \
kvn@48164 200 \
duke@1 201 develop(intx, UnrollLimitForProfileCheck, 1, \
duke@1 202 "Don't use profile_trip_cnt() to restrict unrolling until " \
duke@1 203 "unrolling would push the number of unrolled iterations above " \
duke@1 204 "UnrollLimitForProfileCheck. A higher value allows more " \
duke@1 205 "unrolling. Zero acts as a very large value." ) \
zmajo@33163 206 range(0, max_intx) \
duke@1 207 \
duke@1 208 product(intx, MultiArrayExpandLimit, 6, \
duke@1 209 "Maximum number of individual allocations in an inline-expanded " \
duke@1 210 "multianewarray instruction") \
zmajo@33163 211 range(0, max_jint) \
duke@1 212 \
duke@1 213 notproduct(bool, TraceProfileTripCount, false, \
duke@1 214 "Trace profile loop trip count information") \
duke@1 215 \
aeriksso@35084 216 product(bool, UseCountedLoopSafepoints, false, \
aeriksso@35084 217 "Force counted loops to keep a safepoint") \
aeriksso@35084 218 \
cfang@4643 219 product(bool, UseLoopPredicate, true, \
cfang@4643 220 "Generate a predicate to select fast/slow loop versions") \
cfang@4643 221 \
cfang@4643 222 develop(bool, TraceLoopPredicate, false, \
cfang@4643 223 "Trace generation of loop predicates") \
cfang@4643 224 \
kvn@8732 225 develop(bool, TraceLoopOpts, false, \
kvn@8732 226 "Trace executed loop optimizations") \
kvn@8732 227 \
kvn@9446 228 develop(bool, TraceLoopLimitCheck, false, \
kvn@9446 229 "Trace generation of loop limits checks") \
kvn@9446 230 \
kvn@9446 231 develop(bool, TraceRangeLimitCheck, false, \
kvn@9446 232 "Trace additional overflow checks in RCE") \
kvn@9446 233 \
goetz@22853 234 /* OptimizeFill not yet supported on PowerPC. */ \
goetz@22853 235 product(bool, OptimizeFill, true PPC64_ONLY(&& false), \
never@6433 236 "convert fill/copy loops into intrinsic") \
never@6433 237 \
never@6433 238 develop(bool, TraceOptimizeFill, false, \
never@6433 239 "print detailed information about fill conversion") \
never@6433 240 \
duke@1 241 develop(bool, OptoCoalesce, true, \
duke@1 242 "Use Conservative Copy Coalescing in the Register Allocator") \
duke@1 243 \
duke@1 244 develop(bool, UseUniqueSubclasses, true, \
duke@1 245 "Narrow an abstract reference to the unique concrete subclass") \
duke@1 246 \
duke@1 247 develop(bool, UseExactTypes, true, \
duke@1 248 "Use exact types to eliminate array store checks and v-calls") \
duke@1 249 \
duke@1 250 product(intx, TrackedInitializationLimit, 50, \
duke@1 251 "When initializing fields, track up to this many words") \
zmajo@33163 252 range(0, 65535) \
duke@1 253 \
duke@1 254 product(bool, ReduceFieldZeroing, true, \
duke@1 255 "When initializing fields, try to avoid needless zeroing") \
duke@1 256 \
duke@1 257 product(bool, ReduceInitialCardMarks, true, \
duke@1 258 "When initializing fields, try to avoid needless card marks") \
duke@1 259 \
duke@1 260 product(bool, ReduceBulkZeroing, true, \
duke@1 261 "When bulk-initializing, try to avoid needless zeroing") \
duke@1 262 \
never@6272 263 product(bool, UseFPUForSpilling, false, \
never@6272 264 "Spill integer registers to FPU instead of stack when possible") \
never@6272 265 \
duke@1 266 develop_pd(intx, RegisterCostAreaRatio, \
duke@1 267 "Spill selection in reg allocator: scale area by (X/64K) before " \
duke@1 268 "adding cost") \
duke@1 269 \
duke@1 270 develop_pd(bool, UseCISCSpill, \
duke@1 271 "Use ADLC supplied cisc instructions during allocation") \
duke@1 272 \
duke@1 273 notproduct(bool, VerifyGraphEdges , false, \
duke@1 274 "Verify Bi-directional Edges") \
duke@1 275 \
duke@1 276 notproduct(bool, VerifyDUIterators, true, \
duke@1 277 "Verify the safety of all iterations of Bi-directional Edges") \
duke@1 278 \
duke@1 279 notproduct(bool, VerifyHashTableKeys, true, \
duke@1 280 "Verify the immutability of keys in the VN hash tables") \
duke@1 281 \
kvn@2014 282 notproduct(bool, VerifyRegisterAllocator , false, \
kvn@2014 283 "Verify Register Allocator") \
kvn@2014 284 \
duke@1 285 develop_pd(intx, FLOATPRESSURE, \
duke@1 286 "Number of float LRG's that constitute high register pressure") \
zmajo@33163 287 range(0, max_jint) \
duke@1 288 \
duke@1 289 develop_pd(intx, INTPRESSURE, \
duke@1 290 "Number of integer LRG's that constitute high register pressure") \
zmajo@33163 291 range(0, max_jint) \
duke@1 292 \
duke@1 293 notproduct(bool, TraceOptoPipelining, false, \
duke@1 294 "Trace pipelining information") \
duke@1 295 \
duke@1 296 notproduct(bool, TraceOptoOutput, false, \
duke@1 297 "Trace pipelining information") \
duke@1 298 \
duke@1 299 product_pd(bool, OptoScheduling, \
duke@1 300 "Instruction Scheduling after register allocation") \
duke@1 301 \
mcberg@33065 302 product_pd(bool, OptoRegScheduling, \
mcberg@33065 303 "Instruction Scheduling before register allocation for pressure") \
mcberg@33065 304 \
duke@1 305 product(bool, PartialPeelLoop, true, \
duke@1 306 "Partial peel (rotate) loops") \
duke@1 307 \
duke@1 308 product(intx, PartialPeelNewPhiDelta, 0, \
duke@1 309 "Additional phis that can be created by partial peeling") \
zmajo@33163 310 range(0, max_jint) \
duke@1 311 \
duke@1 312 notproduct(bool, TracePartialPeeling, false, \
duke@1 313 "Trace partial peeling (loop rotation) information") \
duke@1 314 \
duke@1 315 product(bool, PartialPeelAtUnsignedTests, true, \
duke@1 316 "Partial peel at unsigned tests if no signed test exists") \
duke@1 317 \
duke@1 318 product(bool, ReassociateInvariants, true, \
duke@1 319 "Enable reassociation of expressions with loop invariants.") \
duke@1 320 \
duke@1 321 product(bool, LoopUnswitching, true, \
duke@1 322 "Enable loop unswitching (a form of invariant test hoisting)") \
duke@1 323 \
duke@1 324 notproduct(bool, TraceLoopUnswitching, false, \
duke@1 325 "Trace loop unswitching") \
duke@1 326 \
kvn@30593 327 product(bool, AllowVectorizeOnDemand, true, \
kvn@30593 328 "Globally supress vectorization set in VectorizeMethod") \
kvn@30593 329 \
duke@1 330 product(bool, UseSuperWord, true, \
duke@1 331 "Transform scalar operations into superword operations") \
duke@1 332 \
duke@1 333 develop(bool, SuperWordRTDepCheck, false, \
duke@1 334 "Enable runtime dependency checks.") \
duke@1 335 \
kvn@30211 336 product(bool, SuperWordReductions, true, \
kvn@30211 337 "Enable reductions support in superword.") \
kvn@30211 338 \
iveresov@33469 339 product(bool, UseCMoveUnconditionally, false, \
iveresov@33469 340 "Use CMove (scalar and vector) ignoring profitability test.") \
iveresov@33469 341 \
iveresov@33166 342 product(bool, DoReserveCopyInSuperWord, true, \
iveresov@33166 343 "Create reserve copy of graph in SuperWord.") \
iveresov@33166 344 \
kvn@13108 345 notproduct(bool, TraceSuperWord, false, \
duke@1 346 "Trace superword transforms") \
duke@1 347 \
kvn@13108 348 notproduct(bool, TraceNewVectors, false, \
kvn@13108 349 "Trace creation of Vector nodes") \
kvn@13108 350 \
duke@1 351 product_pd(bool, OptoBundling, \
duke@1 352 "Generate nops to fill i-cache lines") \
duke@1 353 \
duke@1 354 product_pd(intx, ConditionalMoveLimit, \
duke@1 355 "Limit of ops to make speculative when using CMOVE") \
zmajo@33163 356 range(0, max_jint) \
duke@1 357 \
duke@1 358 /* Set BranchOnRegister == false. See 4965987. */ \
duke@1 359 product(bool, BranchOnRegister, false, \
duke@1 360 "Use Sparc V9 branch-on-register opcodes") \
duke@1 361 \
duke@1 362 develop(bool, SparcV9RegsHiBitsZero, true, \
duke@1 363 "Assume Sparc V9 I&L registers on V8+ systems are zero-extended") \
duke@1 364 \
twisti@7433 365 product(bool, UseRDPCForConstantTableBase, false, \
twisti@7433 366 "Use Sparc RDPC instruction for the constant table base.") \
twisti@7433 367 \
vlivanov@33454 368 notproduct(bool, PrintIdealGraph, false, \
duke@1 369 "Print ideal graph to XML file / network interface. " \
duke@1 370 "By default attempts to connect to the visualizer on a socket.") \
duke@1 371 \
vlivanov@33454 372 notproduct(intx, PrintIdealGraphLevel, 0, \
zmajo@27147 373 "Level of detail of the ideal graph printout. " \
vlivanov@33447 374 "System-wide value, 0=nothing is printed, 4=all details printed. "\
zmajo@27147 375 "Level of detail of printouts can be set on a per-method level " \
zmajo@27147 376 "as well by using CompileCommand=option.") \
vlivanov@33447 377 range(0, 4) \
zmajo@27147 378 \
vlivanov@33454 379 notproduct(intx, PrintIdealGraphPort, 4444, \
duke@1 380 "Ideal graph printer to network port") \
zmajo@33163 381 range(0, SHRT_MAX) \
duke@1 382 \
kvn@1553 383 notproduct(ccstr, PrintIdealGraphAddress, "127.0.0.1", \
duke@1 384 "IP address to connect to visualizer") \
duke@1 385 \
kvn@1553 386 notproduct(ccstr, PrintIdealGraphFile, NULL, \
duke@1 387 "File to dump ideal graph to. If set overrides the " \
duke@1 388 "use of the network") \
duke@1 389 \
duke@1 390 product(bool, UseBimorphicInlining, true, \
duke@1 391 "Profiling based inlining for two receivers") \
duke@1 392 \
duke@1 393 product(bool, UseOnlyInlinedBimorphic, true, \
duke@1 394 "Don't use BimorphicInlining if can't inline a second method") \
duke@1 395 \
duke@1 396 product(bool, InsertMemBarAfterArraycopy, true, \
duke@1 397 "Insert memory barrier after arraycopy call") \
duke@1 398 \
kvn@6180 399 develop(bool, SubsumeLoads, true, \
gziemski@31371 400 "Attempt to compile while subsuming loads into machine " \
gziemski@31371 401 "instructions.") \
kvn@6180 402 \
kvn@6180 403 develop(bool, StressRecompilation, false, \
gziemski@31371 404 "Recompile each compiled method without subsuming loads " \
gziemski@31371 405 "or escape analysis.") \
kvn@6180 406 \
duke@1 407 develop(intx, ImplicitNullCheckThreshold, 3, \
gziemski@31371 408 "Don't do implicit null checks if NPE's in a method exceeds " \
gziemski@31371 409 "limit") \
zmajo@33163 410 range(0, max_jint) \
duke@1 411 \
duke@1 412 product(intx, LoopOptsCount, 43, \
duke@1 413 "Set level of loop optimization for tier 1 compiles") \
zmajo@33163 414 range(5, 43) \
duke@1 415 \
duke@1 416 /* controls for heat-based inlining */ \
duke@1 417 \
duke@1 418 develop(intx, NodeCountInliningCutoff, 18000, \
duke@1 419 "If parser node generation exceeds limit stop inlining") \
zmajo@33163 420 range(0, max_jint) \
duke@1 421 \
duke@1 422 develop(intx, NodeCountInliningStep, 1000, \
duke@1 423 "Target size of warm calls inlined between optimization passes") \
zmajo@33163 424 range(0, max_jint) \
duke@1 425 \
duke@1 426 develop(bool, InlineWarmCalls, false, \
duke@1 427 "Use a heat-based priority queue to govern inlining") \
duke@1 428 \
goetz@46486 429 /* Max values must not exceed WarmCallInfo::MAX_VALUE(). */ \
duke@1 430 develop(intx, HotCallCountThreshold, 999999, \
duke@1 431 "large numbers of calls (per method invocation) force hotness") \
goetz@46486 432 range(0, ((intx)MIN2((int64_t)max_intx,(int64_t)(+1.0e10)))) \
duke@1 433 \
duke@1 434 develop(intx, HotCallProfitThreshold, 999999, \
duke@1 435 "highly profitable inlining opportunities force hotness") \
goetz@46486 436 range(0, ((intx)MIN2((int64_t)max_intx,(int64_t)(+1.0e10)))) \
duke@1 437 \
duke@1 438 develop(intx, HotCallTrivialWork, -1, \
duke@1 439 "trivial execution time (no larger than this) forces hotness") \
goetz@46486 440 range(-1, ((intx)MIN2((int64_t)max_intx,(int64_t)(+1.0e10)))) \
duke@1 441 \
duke@1 442 develop(intx, HotCallTrivialSize, -1, \
duke@1 443 "trivial methods (no larger than this) force calls to be hot") \
goetz@46486 444 range(-1, ((intx)MIN2((int64_t)max_intx,(int64_t)(+1.0e10)))) \
duke@1 445 \
duke@1 446 develop(intx, WarmCallMinCount, -1, \
duke@1 447 "number of calls (per method invocation) to enable inlining") \
goetz@46486 448 range(-1, ((intx)MIN2((int64_t)max_intx,(int64_t)(+1.0e10)))) \
duke@1 449 \
duke@1 450 develop(intx, WarmCallMinProfit, -1, \
duke@1 451 "number of calls (per method invocation) to enable inlining") \
goetz@46486 452 range(-1, ((intx)MIN2((int64_t)max_intx,(int64_t)(+1.0e10)))) \
duke@1 453 \
duke@1 454 develop(intx, WarmCallMaxWork, 999999, \
duke@1 455 "execution time of the largest inlinable method") \
goetz@46486 456 range(0, ((intx)MIN2((int64_t)max_intx,(int64_t)(+1.0e10)))) \
duke@1 457 \
duke@1 458 develop(intx, WarmCallMaxSize, 999999, \
duke@1 459 "size of the largest inlinable method") \
goetz@46486 460 range(0, ((intx)MIN2((int64_t)max_intx,(int64_t)(+1.0e10)))) \
duke@1 461 \
drchase@18099 462 product(intx, MaxNodeLimit, 80000, \
duke@1 463 "Maximum number of nodes") \
zmajo@33163 464 range(1000, max_jint / 3) \
duke@1 465 \
drchase@18099 466 product(intx, NodeLimitFudgeFactor, 2000, \
duke@1 467 "Fudge Factor for certain optimizations") \
zmajo@33163 468 constraint(NodeLimitFudgeFactorConstraintFunc, AfterErgo) \
duke@1 469 \
duke@1 470 product(bool, UseJumpTables, true, \
duke@1 471 "Use JumpTables instead of a binary search tree for switches") \
duke@1 472 \
duke@1 473 product(bool, UseDivMod, true, \
duke@1 474 "Use combined DivMod instruction if available") \
duke@1 475 \
adlertz@19772 476 product_pd(intx, MinJumpTableSize, \
duke@1 477 "Minimum number of targets in a generated jump table") \
zmajo@33163 478 range(0, max_intx) \
duke@1 479 \
duke@1 480 product(intx, MaxJumpTableSize, 65000, \
duke@1 481 "Maximum number of targets in a generated jump table") \
zmajo@33163 482 range(0, max_intx) \
duke@1 483 \
duke@1 484 product(intx, MaxJumpTableSparseness, 5, \
duke@1 485 "Maximum sparseness for jumptables") \
zmajo@33163 486 range(0, max_intx / 4) \
duke@1 487 \
duke@1 488 product(bool, EliminateLocks, true, \
duke@1 489 "Coarsen locks when possible") \
duke@1 490 \
kvn@11445 491 product(bool, EliminateNestedLocks, true, \
kvn@11445 492 "Eliminate nested locks of the same object when possible") \
kvn@11445 493 \
duke@1 494 notproduct(bool, PrintLockStatistics, false, \
duke@1 495 "Print precise statistics on the dynamic lock usage") \
duke@1 496 \
duke@1 497 diagnostic(bool, PrintPreciseBiasedLockingStatistics, false, \
duke@1 498 "Print per-lock-site statistics of biased locking in JVM") \
duke@1 499 \
kvn@23491 500 diagnostic(bool, PrintPreciseRTMLockingStatistics, false, \
kvn@23491 501 "Print per-lock-site statistics of rtm locking in JVM") \
kvn@23491 502 \
duke@1 503 notproduct(bool, PrintEliminateLocks, false, \
duke@1 504 "Print out when locks are eliminated") \
duke@1 505 \
kvn@24479 506 product(bool, EliminateAutoBox, true, \
kvn@17383 507 "Control optimizations for autobox elimination") \
never@190 508 \
vlivanov@23192 509 diagnostic(bool, UseImplicitStableValues, true, \
vlivanov@19770 510 "Mark well-known stable fields as such (e.g. String.value)") \
vlivanov@19770 511 \
never@190 512 product(intx, AutoBoxCacheMax, 128, \
never@190 513 "Sets max value cached by the java.lang.Integer autobox cache") \
zmajo@33163 514 range(0, max_jint) \
never@190 515 \
kvn@17383 516 experimental(bool, AggressiveUnboxing, false, \
kvn@17383 517 "Control optimizations for aggressive boxing elimination") \
kvn@17383 518 \
goetz@22844 519 develop(bool, TracePostallocExpand, false, "Trace expanding nodes after" \
goetz@22844 520 " register allocation.") \
goetz@22844 521 \
kvn@3685 522 product(bool, DoEscapeAnalysis, true, \
duke@1 523 "Perform escape analysis") \
duke@1 524 \
kvn@27424 525 product(double, EscapeAnalysisTimeout, 20. DEBUG_ONLY(+40.), \
kvn@27424 526 "Abort EA when it reaches time limit (in sec)") \
zmajo@33163 527 range(0, DBL_MAX) \
kvn@27424 528 \
kvn@14133 529 develop(bool, ExitEscapeAnalysisOnTimeout, true, \
kvn@14133 530 "Exit or throw assert in EA when it reaches time limit") \
kvn@14133 531 \
duke@1 532 notproduct(bool, PrintEscapeAnalysis, false, \
duke@1 533 "Print the results of escape analysis") \
duke@1 534 \
duke@1 535 product(bool, EliminateAllocations, true, \
duke@1 536 "Use escape analysis to eliminate allocations") \
duke@1 537 \
kvn@238 538 notproduct(bool, PrintEliminateAllocations, false, \
kvn@238 539 "Print out when allocations are eliminated") \
kvn@238 540 \
kvn@238 541 product(intx, EliminateAllocationArraySizeLimit, 64, \
kvn@238 542 "Array size (number of elements) limit for scalar replacement") \
zmajo@33163 543 range(0, max_jint) \
kvn@238 544 \
kvn@11189 545 product(bool, OptimizePtrCompare, true, \
kvn@11189 546 "Use escape analysis to optimize pointers compare") \
kvn@11189 547 \
kvn@11189 548 notproduct(bool, PrintOptimizePtrCompare, false, \
kvn@11189 549 "Print information about optimized pointers compare") \
kvn@11189 550 \
kvn@12158 551 notproduct(bool, VerifyConnectionGraph , true, \
kvn@12158 552 "Verify Connection Graph construction in Escape Analysis") \
kvn@12158 553 \
kvn@2340 554 product(bool, UseOptoBiasInlining, true, \
kvn@1500 555 "Generate biased locking code in C2 ideal graph") \
kvn@1500 556 \
never@10963 557 product(bool, OptimizeStringConcat, true, \
never@4450 558 "Optimize the construction of Strings by StringBuilder") \
never@4450 559 \
never@4450 560 notproduct(bool, PrintOptimizeStringConcat, false, \
never@4450 561 "Print information about transformations performed on Strings") \
never@4450 562 \
kvn@961 563 product(intx, ValueSearchLimit, 1000, \
kvn@961 564 "Recursion limit in PhaseMacroExpand::value_from_mem_phi") \
zmajo@33163 565 range(0, max_jint) \
kvn@961 566 \
duke@1 567 product(intx, MaxLabelRootDepth, 1100, \
duke@1 568 "Maximum times call Label_Root to prevent stack overflow") \
zmajo@33163 569 range(100, max_jint) \
kvn@581 570 \
kvn@581 571 diagnostic(intx, DominatorSearchLimit, 1000, \
kvn@581 572 "Iterations limit in Node::dominates") \
zmajo@33163 573 range(0, max_jint) \
rasbold@1498 574 \
rasbold@1498 575 product(bool, BlockLayoutByFrequency, true, \
rasbold@1498 576 "Use edge frequencies to drive block ordering") \
rasbold@1498 577 \
rasbold@1498 578 product(intx, BlockLayoutMinDiamondPercentage, 20, \
gziemski@31371 579 "Miniumum %% of a successor (predecessor) for which block " \
gziemski@31371 580 "layout a will allow a fork (join) in a single chain") \
gziemski@31371 581 range(0, 100) \
rasbold@1498 582 \
kvn@2340 583 product(bool, BlockLayoutRotateLoops, true, \
roland@38046 584 "Allow back branches to be fall throughs in the block layout") \
twisti@13521 585 \
rraghavan@38285 586 diagnostic(bool, InlineReflectionGetCallerClass, true, \
gziemski@31371 587 "inline sun.reflect.Reflection.getCallerClass(), known to be " \
gziemski@31371 588 "part of base library DLL") \
twisti@13521 589 \
rraghavan@38285 590 diagnostic(bool, InlineObjectCopy, true, \
twisti@13521 591 "inline Object.clone and Arrays.copyOf[Range] intrinsics") \
twisti@13521 592 \
rraghavan@38285 593 diagnostic(bool, SpecialStringCompareTo, true, \
twisti@13521 594 "special version of string compareTo") \
twisti@13521 595 \
rraghavan@38285 596 diagnostic(bool, SpecialStringIndexOf, true, \
twisti@13521 597 "special version of string indexOf") \
twisti@13521 598 \
rraghavan@38285 599 diagnostic(bool, SpecialStringEquals, true, \
twisti@13521 600 "special version of string equals") \
twisti@13521 601 \
rraghavan@38285 602 diagnostic(bool, SpecialArraysEquals, true, \
twisti@13521 603 "special version of Arrays.equals(char[],char[])") \
twisti@13521 604 \
rraghavan@38285 605 diagnostic(bool, SpecialEncodeISOArray, true, \
kvn@15242 606 "special version of ISO_8859_1$Encoder.encodeISOArray") \
kvn@15242 607 \
twisti@13521 608 develop(bool, BailoutToInterpreterForThrows, false, \
twisti@13521 609 "Compiled methods which throws/catches exceptions will be " \
twisti@13521 610 "deopt and intp.") \
twisti@13521 611 \
twisti@13521 612 develop(bool, ConvertCmpD2CmpF, true, \
twisti@13521 613 "Convert cmpD to cmpF when one input is constant in float range") \
twisti@13521 614 \
twisti@13521 615 develop(bool, ConvertFloat2IntClipping, true, \
twisti@13521 616 "Convert float2int clipping idiom to integer clipping") \
twisti@13521 617 \
twisti@13521 618 develop(bool, Use24BitFPMode, true, \
twisti@13521 619 "Set 24-bit FPU mode on a per-compile basis ") \
twisti@13521 620 \
twisti@13521 621 develop(bool, Use24BitFP, true, \
twisti@13521 622 "use FP instructions that produce 24-bit precise results") \
twisti@13521 623 \
twisti@13521 624 develop(bool, MonomorphicArrayCheck, true, \
twisti@13521 625 "Uncommon-trap array store checks that require full type check") \
twisti@13521 626 \
twisti@13521 627 notproduct(bool, TracePhaseCCP, false, \
twisti@13521 628 "Print progress during Conditional Constant Propagation") \
twisti@13521 629 \
twisti@13521 630 develop(bool, PrintDominators, false, \
twisti@13521 631 "Print out dominator trees for GVN") \
twisti@13521 632 \
neliasso@33451 633 diagnostic(bool, TraceSpilling, false, \
twisti@13521 634 "Trace spilling") \
twisti@13521 635 \
twisti@13884 636 diagnostic(bool, TraceTypeProfile, false, \
twisti@13521 637 "Trace type profile") \
twisti@13521 638 \
twisti@13521 639 develop(bool, PoisonOSREntry, true, \
twisti@13521 640 "Detect abnormal calls to OSR code") \
twisti@13521 641 \
twisti@13521 642 develop(bool, SoftMatchFailure, trueInProduct, \
twisti@13521 643 "If the DFA fails to match a node, print a message and bail out") \
twisti@13521 644 \
twisti@13521 645 develop(bool, InlineAccessors, true, \
twisti@13521 646 "inline accessor methods (get/set)") \
twisti@13521 647 \
twisti@13521 648 product(intx, TypeProfileMajorReceiverPercent, 90, \
twisti@13521 649 "% of major receiver type to all profiled receivers") \
gziemski@31371 650 range(0, 100) \
twisti@13521 651 \
twisti@13521 652 diagnostic(bool, PrintIntrinsics, false, \
twisti@13521 653 "prints attempted and successful inlining of intrinsics") \
twisti@13521 654 \
twisti@13521 655 develop(bool, StressReflectiveCode, false, \
twisti@13521 656 "Use inexact types at allocations, etc., to test reflection") \
twisti@13521 657 \
twisti@13521 658 diagnostic(bool, DebugInlinedCalls, true, \
twisti@13521 659 "If false, restricts profiled locations to the root method only") \
twisti@13521 660 \
twisti@13521 661 notproduct(bool, VerifyLoopOptimizations, false, \
twisti@13521 662 "verify major loop optimizations") \
twisti@13521 663 \
twisti@13521 664 diagnostic(bool, ProfileDynamicTypes, true, \
twisti@13521 665 "do extra type profiling and use it more aggressively") \
twisti@13521 666 \
twisti@13521 667 develop(bool, TraceIterativeGVN, false, \
twisti@13521 668 "Print progress during Iterative Global Value Numbering") \
twisti@13521 669 \
twisti@13521 670 develop(bool, VerifyIterativeGVN, false, \
twisti@13521 671 "Verify Def-Use modifications during sparse Iterative Global " \
twisti@13521 672 "Value Numbering") \
twisti@13521 673 \
twisti@13521 674 notproduct(bool, TraceCISCSpill, false, \
twisti@13521 675 "Trace allocators use of cisc spillable instructions") \
twisti@13521 676 \
twisti@13521 677 product(bool, SplitIfBlocks, true, \
twisti@13521 678 "Clone compares and control flow through merge points to fold " \
twisti@13521 679 "some branches") \
twisti@13521 680 \
twisti@13521 681 develop(intx, FreqCountInvocations, 1, \
twisti@13521 682 "Scaling factor for branch frequencies (deprecated)") \
zmajo@33163 683 range(1, max_intx) \
twisti@13521 684 \
twisti@13521 685 product(intx, AliasLevel, 3, \
twisti@13521 686 "0 for no aliasing, 1 for oop/field/static/array split, " \
twisti@13521 687 "2 for class split, 3 for unique instances") \
gziemski@31371 688 range(0, 3) \
sangheki@31995 689 constraint(AliasLevelConstraintFunc,AfterErgo) \
twisti@13521 690 \
twisti@13521 691 develop(bool, VerifyAliases, false, \
twisti@13521 692 "perform extra checks on the results of alias analysis") \
roland@15113 693 \
roland@15113 694 product(bool, IncrementalInline, true, \
roland@15113 695 "do post parse inlining") \
roland@15113 696 \
roland@15113 697 develop(bool, AlwaysIncrementalInline, false, \
roland@15113 698 "do all inlining incrementally") \
roland@15113 699 \
vlivanov@27707 700 product(intx, LiveNodeCountInliningCutoff, 40000, \
roland@15113 701 "max number of live nodes in a method") \
zmajo@33163 702 range(0, max_juint / 8) \
roland@15618 703 \
roland@15618 704 diagnostic(bool, OptimizeExpensiveOps, true, \
roland@15618 705 "Find best control for expensive operations") \
rbackman@20289 706 \
rraghavan@38285 707 diagnostic(bool, UseMathExactIntrinsics, true, \
roland@21089 708 "Enables intrinsification of various java.lang.Math functions") \
roland@21089 709 \
rraghavan@38285 710 diagnostic(bool, UseMultiplyToLenIntrinsic, false, \
kvn@26434 711 "Enables intrinsification of BigInteger.multiplyToLen()") \
kvn@26434 712 \
rraghavan@38285 713 diagnostic(bool, UseSquareToLenIntrinsic, false, \
kvn@31129 714 "Enables intrinsification of BigInteger.squareToLen()") \
kvn@31129 715 \
rraghavan@38285 716 diagnostic(bool, UseMulAddIntrinsic, false, \
kvn@31129 717 "Enables intrinsification of BigInteger.mulAdd()") \
kvn@31129 718 \
rraghavan@38285 719 diagnostic(bool, UseMontgomeryMultiplyIntrinsic, false, \
aph@31583 720 "Enables intrinsification of BigInteger.montgomeryMultiply()") \
aph@31583 721 \
rraghavan@38285 722 diagnostic(bool, UseMontgomerySquareIntrinsic, false, \
aph@31583 723 "Enables intrinsification of BigInteger.montgomerySquare()") \
aph@31583 724 \
roland@23208 725 product(bool, UseTypeSpeculation, true, \
goetz@22856 726 "Speculatively propagate types from profiles") \
goetz@22856 727 \
roland@22928 728 diagnostic(bool, UseInlineDepthForSpeculativeTypes, true, \
roland@22928 729 "Carry inline depth of profile point with speculative type " \
roland@22928 730 "and give priority to profiling from lower inline depth") \
roland@22928 731 \
goetz@22856 732 product_pd(bool, TrapBasedRangeChecks, \
goetz@22856 733 "Generate code for range checks that uses a cmp and trap " \
goetz@22856 734 "instruction raising SIGTRAP. Used on PPC64.") \
roland@28396 735 \
roland@28396 736 product(intx, ArrayCopyLoadStoreMaxElem, 8, \
roland@28396 737 "Maximum number of arraycopy elements inlined as a sequence of" \
roland@28396 738 "loads/stores") \
zmajo@33163 739 range(0, max_intx) \
roland@28396 740 \
roland@28396 741 develop(bool, StressArrayCopyMacroNode, false, \
zmajo@34503 742 "Perform ArrayCopy load/store replacement during IGVN only") \
zmajo@34503 743 \
zmajo@34503 744 develop(bool, RenumberLiveNodes, true, \
zmajo@34503 745 "Renumber live nodes") \
roland@48020 746 \
roland@48020 747 product(uintx, LoopStripMiningIter, 0, \
roland@48020 748 "Number of iterations in strip mined loop") \
roland@48020 749 range(0, max_juint) \
roland@48020 750 \
roland@48020 751 product(uintx, LoopStripMiningIterShortLoop, 0, \
roland@48020 752 "Loop with fewer iterations are not strip mined") \
roland@48020 753 range(0, max_juint) \
duke@1 754
gziemski@31371 755 C2_FLAGS(DECLARE_DEVELOPER_FLAG, \
gziemski@31371 756 DECLARE_PD_DEVELOPER_FLAG, \
gziemski@31371 757 DECLARE_PRODUCT_FLAG, \
gziemski@31371 758 DECLARE_PD_PRODUCT_FLAG, \
gziemski@31371 759 DECLARE_DIAGNOSTIC_FLAG, \
csahu@39117 760 DECLARE_PD_DIAGNOSTIC_FLAG, \
gziemski@31371 761 DECLARE_EXPERIMENTAL_FLAG, \
gziemski@31371 762 DECLARE_NOTPRODUCT_FLAG, \
gziemski@31371 763 IGNORE_RANGE, \
gziemski@38273 764 IGNORE_CONSTRAINT, \
gziemski@38273 765 IGNORE_WRITEABLE)
stefank@7397 766
stefank@7397 767 #endif // SHARE_VM_OPTO_C2_GLOBALS_HPP