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