src/share/vm/opto/c2_globals.hpp

Tue, 08 Aug 2017 15:57:29 +0800

author
aoqi
date
Tue, 08 Aug 2017 15:57:29 +0800
changeset 6876
710a3c8b516e
parent 6679
968a17f18337
parent 1
2d8a650513c2
child 7535
7ae4e26cb1e0
permissions
-rw-r--r--

merge

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

mercurial