Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/hotspot/share/opto/c2_globals.hpp
40930 views
1
/*
2
* Copyright (c) 2000, 2021, 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_OPTO_C2_GLOBALS_HPP
26
#define SHARE_OPTO_C2_GLOBALS_HPP
27
28
#include "opto/c2_globals_pd.hpp"
29
#include "runtime/globals_shared.hpp"
30
#include "utilities/macros.hpp"
31
32
//
33
// Defines all globals flags used by the server compiler.
34
//
35
36
#define C2_FLAGS(develop, \
37
develop_pd, \
38
product, \
39
product_pd, \
40
notproduct, \
41
range, \
42
constraint) \
43
\
44
product(bool, StressLCM, false, DIAGNOSTIC, \
45
"Randomize instruction scheduling in LCM") \
46
\
47
product(bool, StressGCM, false, DIAGNOSTIC, \
48
"Randomize instruction scheduling in GCM") \
49
\
50
product(bool, StressIGVN, false, DIAGNOSTIC, \
51
"Randomize worklist traversal in IGVN") \
52
\
53
product(bool, StressCCP, false, DIAGNOSTIC, \
54
"Randomize worklist traversal in CCP") \
55
\
56
product(uint, StressSeed, 0, DIAGNOSTIC, \
57
"Seed for randomized stress testing (if unset, a random one is " \
58
"generated). The seed is recorded in the compilation log, if " \
59
"available.") \
60
range(0, max_juint) \
61
\
62
develop(bool, StressMethodHandleLinkerInlining, false, \
63
"Stress inlining through method handle linkers") \
64
\
65
develop(intx, OptoPrologueNops, 0, \
66
"Insert this many extra nop instructions " \
67
"in the prologue of every nmethod") \
68
range(0, 128) \
69
\
70
product_pd(intx, InteriorEntryAlignment, \
71
"Code alignment for interior entry points " \
72
"in generated code (in bytes)") \
73
constraint(InteriorEntryAlignmentConstraintFunc, AfterErgo) \
74
\
75
product(intx, MaxLoopPad, (OptoLoopAlignment-1), \
76
"Align a loop if padding size in bytes is less or equal to this " \
77
"value") \
78
range(0, max_jint) \
79
\
80
product(intx, MaxVectorSize, 64, \
81
"Max vector size in bytes, " \
82
"actual size could be less depending on elements type") \
83
range(0, max_jint) \
84
\
85
product(intx, ArrayCopyPartialInlineSize, -1, DIAGNOSTIC, \
86
"Partial inline size used for array copy acceleration.") \
87
range(-1, 64) \
88
\
89
product(bool, AlignVector, true, \
90
"Perform vector store/load alignment in loop") \
91
\
92
product(intx, NumberOfLoopInstrToAlign, 4, \
93
"Number of first instructions in a loop to align") \
94
range(0, max_jint) \
95
\
96
notproduct(intx, IndexSetWatch, 0, \
97
"Trace all operations on this IndexSet (-1 means all, 0 none)") \
98
range(-1, 0) \
99
\
100
develop(intx, OptoNodeListSize, 4, \
101
"Starting allocation size of Node_List data structures") \
102
range(1, max_jint) \
103
\
104
develop(intx, OptoBlockListSize, 8, \
105
"Starting allocation size of Block_List data structures") \
106
range(1, max_jint) \
107
\
108
develop(intx, OptoPeepholeAt, -1, \
109
"Apply peephole optimizations to this peephole rule") \
110
\
111
notproduct(bool, PrintIdeal, false, \
112
"Print ideal graph before code generation") \
113
\
114
notproduct(uintx, PrintIdealIndentThreshold, 0, \
115
"A depth threshold of ideal graph. Indentation is disabled " \
116
"when users attempt to dump an ideal graph deeper than it.") \
117
\
118
notproduct(bool, PrintOpto, false, \
119
"Print compiler2 attempts") \
120
\
121
notproduct(bool, PrintOptoInlining, false, \
122
"Print compiler2 inlining decisions") \
123
\
124
notproduct(bool, VerifyIdealNodeCount, false, \
125
"Verify that tracked dead ideal node count is accurate") \
126
\
127
notproduct(bool, PrintIdealNodeCount, false, \
128
"Print liveness counts of ideal nodes") \
129
\
130
product_pd(bool, IdealizeClearArrayNode, DIAGNOSTIC, \
131
"Replace ClearArrayNode by subgraph of basic operations.") \
132
\
133
develop(bool, OptoBreakpoint, false, \
134
"insert breakpoint at method entry") \
135
\
136
notproduct(bool, OptoBreakpointOSR, false, \
137
"insert breakpoint at osr method entry") \
138
\
139
notproduct(intx, BreakAtNode, 0, \
140
"Break at construction of this Node (either _idx or _debug_idx)") \
141
\
142
notproduct(bool, OptoBreakpointC2R, false, \
143
"insert breakpoint at runtime stub entry") \
144
\
145
notproduct(bool, OptoNoExecute, false, \
146
"Attempt to parse and compile but do not execute generated code") \
147
\
148
notproduct(bool, PrintOptoStatistics, false, \
149
"Print New compiler statistics") \
150
\
151
product(bool, PrintOptoAssembly, false, DIAGNOSTIC, \
152
"Print New compiler assembly output") \
153
\
154
develop_pd(bool, OptoPeephole, \
155
"Apply peephole optimizations after register allocation") \
156
\
157
notproduct(bool, PrintFrameConverterAssembly, false, \
158
"Print New compiler assembly output for frame converters") \
159
\
160
notproduct(bool, PrintParseStatistics, false, \
161
"Print nodes, transforms and new values made per bytecode parsed")\
162
\
163
notproduct(bool, PrintOptoPeephole, false, \
164
"Print New compiler peephole replacements") \
165
\
166
develop(bool, PrintCFGBlockFreq, false, \
167
"Print CFG block freqencies") \
168
\
169
develop(bool, TraceOptoParse, false, \
170
"Trace bytecode parse and control-flow merge") \
171
\
172
product_pd(intx, LoopUnrollLimit, \
173
"Unroll loop bodies with node count less than this") \
174
range(0, max_jint / 4) \
175
\
176
product_pd(intx, LoopPercentProfileLimit, \
177
"Unroll loop bodies with % node count of profile limit") \
178
range(10, 100) \
179
\
180
product(intx, LoopMaxUnroll, 16, \
181
"Maximum number of unrolls for main loop") \
182
range(0, max_jint) \
183
\
184
product_pd(bool, SuperWordLoopUnrollAnalysis, \
185
"Map number of unrolls for main loop via " \
186
"Superword Level Parallelism analysis") \
187
\
188
product(bool, PostLoopMultiversioning, false, EXPERIMENTAL, \
189
"Multi versioned post loops to eliminate range checks") \
190
\
191
notproduct(bool, TraceSuperWordLoopUnrollAnalysis, false, \
192
"Trace what Superword Level Parallelism analysis applies") \
193
\
194
product(bool, UseVectorMacroLogic, true, DIAGNOSTIC, \
195
"Use ternary macro logic instructions") \
196
\
197
product(intx, LoopUnrollMin, 4, \
198
"Minimum number of unroll loop bodies before checking progress" \
199
"of rounds of unroll,optimize,..") \
200
range(0, max_jint) \
201
\
202
product(bool, UseSubwordForMaxVector, true, \
203
"Use Subword Analysis to set maximum vector size") \
204
\
205
product(bool, UseVectorCmov, false, \
206
"Use Vectorized Cmov") \
207
\
208
develop(intx, UnrollLimitForProfileCheck, 1, \
209
"Don't use profile_trip_cnt() to restrict unrolling until " \
210
"unrolling would push the number of unrolled iterations above " \
211
"UnrollLimitForProfileCheck. A higher value allows more " \
212
"unrolling. Zero acts as a very large value." ) \
213
range(0, max_intx) \
214
\
215
product(intx, MultiArrayExpandLimit, 6, \
216
"Maximum number of individual allocations in an inline-expanded " \
217
"multianewarray instruction") \
218
range(0, max_jint) \
219
\
220
notproduct(bool, TraceProfileTripCount, false, \
221
"Trace profile loop trip count information") \
222
\
223
product(bool, UseCountedLoopSafepoints, false, \
224
"Force counted loops to keep a safepoint") \
225
\
226
product(bool, UseLoopPredicate, true, \
227
"Generate a predicate to select fast/slow loop versions") \
228
\
229
develop(bool, TraceLoopPredicate, false, \
230
"Trace generation of loop predicates") \
231
\
232
develop(bool, TraceLoopOpts, false, \
233
"Trace executed loop optimizations") \
234
\
235
develop(bool, TraceLoopLimitCheck, false, \
236
"Trace generation of loop limits checks") \
237
\
238
develop(bool, TraceRangeLimitCheck, false, \
239
"Trace additional overflow checks in RCE") \
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
product(intx, TrackedInitializationLimit, 50, \
255
"When initializing fields, track up to this many words") \
256
range(0, 65535) \
257
\
258
product(bool, ReduceFieldZeroing, true, \
259
"When initializing fields, try to avoid needless zeroing") \
260
\
261
product(bool, ReduceInitialCardMarks, true, \
262
"When initializing fields, try to avoid needless card marks") \
263
\
264
product(bool, ReduceBulkZeroing, true, \
265
"When bulk-initializing, try to avoid needless zeroing") \
266
\
267
product(bool, UseFPUForSpilling, false, \
268
"Spill integer registers to FPU instead of stack when possible") \
269
\
270
develop_pd(intx, RegisterCostAreaRatio, \
271
"Spill selection in reg allocator: scale area by (X/64K) before " \
272
"adding cost") \
273
\
274
develop_pd(bool, UseCISCSpill, \
275
"Use ADLC supplied cisc instructions during allocation") \
276
\
277
notproduct(bool, VerifyGraphEdges , false, \
278
"Verify Bi-directional Edges") \
279
\
280
notproduct(bool, VerifyDUIterators, true, \
281
"Verify the safety of all iterations of Bi-directional Edges") \
282
\
283
notproduct(bool, VerifyHashTableKeys, true, \
284
"Verify the immutability of keys in the VN hash tables") \
285
\
286
notproduct(bool, VerifyRegisterAllocator , false, \
287
"Verify Register Allocator") \
288
\
289
develop_pd(intx, FLOATPRESSURE, \
290
"Number of float LRG's that constitute high register pressure") \
291
range(0, max_jint) \
292
\
293
develop_pd(intx, INTPRESSURE, \
294
"Number of integer LRG's that constitute high register pressure") \
295
range(0, max_jint) \
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_pd(bool, OptoRegScheduling, \
307
"Instruction Scheduling before register allocation for pressure") \
308
\
309
product(bool, PartialPeelLoop, true, \
310
"Partial peel (rotate) loops") \
311
\
312
product(intx, PartialPeelNewPhiDelta, 0, \
313
"Additional phis that can be created by partial peeling") \
314
range(0, max_jint) \
315
\
316
notproduct(bool, TracePartialPeeling, false, \
317
"Trace partial peeling (loop rotation) information") \
318
\
319
product(bool, PartialPeelAtUnsignedTests, true, \
320
"Partial peel at unsigned tests if no signed test exists") \
321
\
322
product(bool, ReassociateInvariants, true, \
323
"Enable reassociation of expressions with loop invariants.") \
324
\
325
product(bool, LoopUnswitching, true, \
326
"Enable loop unswitching (a form of invariant test hoisting)") \
327
\
328
notproduct(bool, TraceLoopUnswitching, false, \
329
"Trace loop unswitching") \
330
\
331
product(bool, AllowVectorizeOnDemand, true, \
332
"Globally supress vectorization set in VectorizeMethod") \
333
\
334
product(bool, UseSuperWord, true, \
335
"Transform scalar operations into superword operations") \
336
\
337
develop(bool, SuperWordRTDepCheck, false, \
338
"Enable runtime dependency checks.") \
339
\
340
product(bool, SuperWordReductions, true, \
341
"Enable reductions support in superword.") \
342
\
343
product(bool, UseCMoveUnconditionally, false, \
344
"Use CMove (scalar and vector) ignoring profitability test.") \
345
\
346
product(bool, DoReserveCopyInSuperWord, true, \
347
"Create reserve copy of graph in SuperWord.") \
348
\
349
notproduct(bool, TraceSuperWord, false, \
350
"Trace superword transforms") \
351
\
352
notproduct(bool, TraceNewVectors, false, \
353
"Trace creation of Vector nodes") \
354
\
355
product_pd(bool, OptoBundling, \
356
"Generate nops to fill i-cache lines") \
357
\
358
product_pd(intx, ConditionalMoveLimit, \
359
"Limit of ops to make speculative when using CMOVE") \
360
range(0, max_jint) \
361
\
362
notproduct(bool, PrintIdealGraph, false, \
363
"Print ideal graph to XML file / network interface. " \
364
"By default attempts to connect to the visualizer on a socket.") \
365
\
366
notproduct(intx, PrintIdealGraphLevel, 0, \
367
"Level of detail of the ideal graph printout. " \
368
"System-wide value, -1=printing is disabled, " \
369
"0=print nothing except IGVPrintLevel directives, " \
370
"4=all details printed. " \
371
"Level of detail of printouts can be set on a per-method level " \
372
"as well by using CompileCommand=option.") \
373
range(-1, 4) \
374
\
375
notproduct(intx, PrintIdealGraphPort, 4444, \
376
"Ideal graph printer to network port") \
377
range(0, SHRT_MAX) \
378
\
379
notproduct(ccstr, PrintIdealGraphAddress, "127.0.0.1", \
380
"IP address to connect to visualizer") \
381
\
382
notproduct(ccstr, PrintIdealGraphFile, NULL, \
383
"File to dump ideal graph to. If set overrides the " \
384
"use of the network") \
385
\
386
product(bool, UseBimorphicInlining, true, \
387
"Profiling based inlining for two receivers") \
388
\
389
product(bool, UseOnlyInlinedBimorphic, true, \
390
"Don't use BimorphicInlining if can't inline a second method") \
391
\
392
develop(bool, SubsumeLoads, true, \
393
"Attempt to compile while subsuming loads into machine " \
394
"instructions.") \
395
\
396
develop(bool, StressRecompilation, false, \
397
"Recompile each compiled method without subsuming loads " \
398
"or escape analysis.") \
399
\
400
develop(intx, ImplicitNullCheckThreshold, 3, \
401
"Don't do implicit null checks if NPE's in a method exceeds " \
402
"limit") \
403
range(0, max_jint) \
404
\
405
product(intx, LoopOptsCount, 43, \
406
"Set level of loop optimization for tier 1 compiles") \
407
range(5, 43) \
408
\
409
/* controls for heat-based inlining */ \
410
\
411
develop(intx, NodeCountInliningCutoff, 18000, \
412
"If parser node generation exceeds limit stop inlining") \
413
range(0, max_jint) \
414
\
415
product(intx, MaxNodeLimit, 80000, \
416
"Maximum number of nodes") \
417
range(1000, max_jint / 3) \
418
\
419
product(intx, NodeLimitFudgeFactor, 2000, \
420
"Fudge Factor for certain optimizations") \
421
constraint(NodeLimitFudgeFactorConstraintFunc, AfterErgo) \
422
\
423
product(bool, UseJumpTables, true, \
424
"Use JumpTables instead of a binary search tree for switches") \
425
\
426
product(bool, UseDivMod, true, \
427
"Use combined DivMod instruction if available") \
428
\
429
product_pd(intx, MinJumpTableSize, \
430
"Minimum number of targets in a generated jump table") \
431
range(0, max_intx) \
432
\
433
product(intx, MaxJumpTableSize, 65000, \
434
"Maximum number of targets in a generated jump table") \
435
range(0, max_intx) \
436
\
437
product(intx, MaxJumpTableSparseness, 5, \
438
"Maximum sparseness for jumptables") \
439
range(0, max_intx / 4) \
440
\
441
product(bool, EliminateLocks, true, \
442
"Coarsen locks when possible") \
443
\
444
product(bool, EliminateNestedLocks, true, \
445
"Eliminate nested locks of the same object when possible") \
446
\
447
notproduct(bool, PrintLockStatistics, false, \
448
"Print precise statistics on the dynamic lock usage") \
449
\
450
product(bool, PrintPreciseBiasedLockingStatistics, false, DIAGNOSTIC, \
451
"(Deprecated) Print per-lock-site statistics of biased locking " \
452
"in JVM") \
453
\
454
product(bool, PrintPreciseRTMLockingStatistics, false, DIAGNOSTIC, \
455
"Print per-lock-site statistics of rtm locking in JVM") \
456
\
457
notproduct(bool, PrintEliminateLocks, false, \
458
"Print out when locks are eliminated") \
459
\
460
product(bool, EliminateAutoBox, true, \
461
"Control optimizations for autobox elimination") \
462
\
463
product(intx, AutoBoxCacheMax, 128, \
464
"Sets max value cached by the java.lang.Integer autobox cache") \
465
range(0, max_jint) \
466
\
467
product(bool, AggressiveUnboxing, true, DIAGNOSTIC, \
468
"Control optimizations for aggressive boxing elimination") \
469
\
470
develop(bool, TracePostallocExpand, false, "Trace expanding nodes after" \
471
" register allocation.") \
472
\
473
product(bool, DoEscapeAnalysis, true, \
474
"Perform escape analysis") \
475
\
476
product(double, EscapeAnalysisTimeout, 20. DEBUG_ONLY(+40.), \
477
"Abort EA when it reaches time limit (in sec)") \
478
range(0, DBL_MAX) \
479
\
480
develop(bool, ExitEscapeAnalysisOnTimeout, true, \
481
"Exit or throw assert in EA when it reaches time limit") \
482
\
483
notproduct(bool, PrintEscapeAnalysis, false, \
484
"Print the results of escape analysis") \
485
\
486
product(bool, EliminateAllocations, true, \
487
"Use escape analysis to eliminate allocations") \
488
\
489
notproduct(bool, PrintEliminateAllocations, false, \
490
"Print out when allocations are eliminated") \
491
\
492
product(intx, EliminateAllocationArraySizeLimit, 64, \
493
"Array size (number of elements) limit for scalar replacement") \
494
range(0, max_jint) \
495
\
496
product(intx, EliminateAllocationFieldsLimit, 512, DIAGNOSTIC, \
497
"Number of fields in instance limit for scalar replacement") \
498
range(0, max_jint) \
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
"(Deprecated) 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
range(0, max_jint) \
521
\
522
product(intx, MaxLabelRootDepth, 1100, \
523
"Maximum times call Label_Root to prevent stack overflow") \
524
range(100, max_jint) \
525
\
526
product(intx, DominatorSearchLimit, 1000, DIAGNOSTIC, \
527
"Iterations limit in Node::dominates") \
528
range(0, max_jint) \
529
\
530
product(bool, BlockLayoutByFrequency, true, \
531
"Use edge frequencies to drive block ordering") \
532
\
533
product(intx, BlockLayoutMinDiamondPercentage, 20, \
534
"Miniumum %% of a successor (predecessor) for which block " \
535
"layout a will allow a fork (join) in a single chain") \
536
range(0, 100) \
537
\
538
product(bool, BlockLayoutRotateLoops, true, \
539
"Allow back branches to be fall throughs in the block layout") \
540
\
541
product(bool, InlineReflectionGetCallerClass, true, DIAGNOSTIC, \
542
"inline sun.reflect.Reflection.getCallerClass(), known to be " \
543
"part of base library DLL") \
544
\
545
product(bool, InlineObjectCopy, true, DIAGNOSTIC, \
546
"inline Object.clone and Arrays.copyOf[Range] intrinsics") \
547
\
548
product(bool, SpecialStringCompareTo, true, DIAGNOSTIC, \
549
"special version of string compareTo") \
550
\
551
product(bool, SpecialStringIndexOf, true, DIAGNOSTIC, \
552
"special version of string indexOf") \
553
\
554
product(bool, SpecialStringEquals, true, DIAGNOSTIC, \
555
"special version of string equals") \
556
\
557
product(bool, SpecialArraysEquals, true, DIAGNOSTIC, \
558
"special version of Arrays.equals(char[],char[])") \
559
\
560
product(bool, SpecialEncodeISOArray, true, DIAGNOSTIC, \
561
"special version of ISO_8859_1$Encoder.encodeISOArray") \
562
\
563
develop(bool, BailoutToInterpreterForThrows, false, \
564
"Compiled methods which throws/catches exceptions will be " \
565
"deopt and intp.") \
566
\
567
develop(bool, ConvertCmpD2CmpF, true, \
568
"Convert cmpD to cmpF when one input is constant in float range") \
569
\
570
develop(bool, ConvertFloat2IntClipping, true, \
571
"Convert float2int clipping idiom to integer clipping") \
572
\
573
develop(bool, MonomorphicArrayCheck, true, \
574
"Uncommon-trap array store checks that require full type check") \
575
\
576
notproduct(bool, TracePhaseCCP, false, \
577
"Print progress during Conditional Constant Propagation") \
578
\
579
develop(bool, PrintDominators, false, \
580
"Print out dominator trees for GVN") \
581
\
582
product(bool, TraceSpilling, false, DIAGNOSTIC, \
583
"Trace spilling") \
584
\
585
product(bool, TraceTypeProfile, false, DIAGNOSTIC, \
586
"Trace type profile") \
587
\
588
develop(bool, PoisonOSREntry, true, \
589
"Detect abnormal calls to OSR code") \
590
\
591
develop(bool, SoftMatchFailure, trueInProduct, \
592
"If the DFA fails to match a node, print a message and bail out") \
593
\
594
develop(bool, InlineAccessors, true, \
595
"inline accessor methods (get/set)") \
596
\
597
product(intx, TypeProfileMajorReceiverPercent, 90, \
598
"% of major receiver type to all profiled receivers") \
599
range(0, 100) \
600
\
601
product(bool, PrintIntrinsics, false, DIAGNOSTIC, \
602
"prints attempted and successful inlining of intrinsics") \
603
\
604
develop(bool, StressReflectiveCode, false, \
605
"Use inexact types at allocations, etc., to test reflection") \
606
\
607
product(bool, DebugInlinedCalls, true, DIAGNOSTIC, \
608
"If false, restricts profiled locations to the root method only") \
609
\
610
notproduct(bool, VerifyLoopOptimizations, false, \
611
"verify major loop optimizations") \
612
\
613
product(bool, ProfileDynamicTypes, true, DIAGNOSTIC, \
614
"do extra type profiling and use it more aggressively") \
615
\
616
develop(bool, TraceIterativeGVN, false, \
617
"Print progress during Iterative Global Value Numbering") \
618
\
619
develop(bool, VerifyIterativeGVN, false, \
620
"Verify Def-Use modifications during sparse Iterative Global " \
621
"Value Numbering") \
622
\
623
notproduct(bool, TraceCISCSpill, false, \
624
"Trace allocators use of cisc spillable instructions") \
625
\
626
product(bool, SplitIfBlocks, true, \
627
"Clone compares and control flow through merge points to fold " \
628
"some branches") \
629
\
630
develop(intx, FreqCountInvocations, 1, \
631
"Scaling factor for branch frequencies (deprecated)") \
632
range(1, max_intx) \
633
\
634
product(intx, AliasLevel, 3, \
635
"0 for no aliasing, 1 for oop/field/static/array split, " \
636
"2 for class split, 3 for unique instances") \
637
range(0, 3) \
638
constraint(AliasLevelConstraintFunc,AfterErgo) \
639
\
640
develop(bool, VerifyAliases, false, \
641
"perform extra checks on the results of alias analysis") \
642
\
643
product(intx, MaxInlineLevel, 15, \
644
"maximum number of nested calls that are inlined by high tier " \
645
"compiler") \
646
range(0, max_jint) \
647
\
648
product(intx, MaxRecursiveInlineLevel, 1, \
649
"maximum number of nested recursive calls that are inlined by " \
650
"high tier compiler") \
651
range(0, max_jint) \
652
\
653
product_pd(intx, InlineSmallCode, \
654
"Only inline already compiled methods if their code size is " \
655
"less than this") \
656
range(0, max_jint) \
657
\
658
product(intx, MaxInlineSize, 35, \
659
"The maximum bytecode size of a method to be inlined by high " \
660
"tier compiler") \
661
range(0, max_jint) \
662
\
663
product_pd(intx, FreqInlineSize, \
664
"The maximum bytecode size of a frequent method to be inlined") \
665
range(0, max_jint) \
666
\
667
product(intx, MaxTrivialSize, 6, \
668
"The maximum bytecode size of a trivial method to be inlined by " \
669
"high tier compiler") \
670
range(0, max_jint) \
671
\
672
product(bool, IncrementalInline, true, \
673
"do post parse inlining") \
674
\
675
product(bool, IncrementalInlineMH, true, DIAGNOSTIC, \
676
"do post parse inlining of method handle calls") \
677
\
678
product(bool, IncrementalInlineVirtual, true, DIAGNOSTIC, \
679
"do post parse inlining of virtual calls") \
680
\
681
develop(bool, AlwaysIncrementalInline, false, \
682
"do all inlining incrementally") \
683
\
684
product(bool, IncrementalInlineForceCleanup, false, DIAGNOSTIC, \
685
"do cleanup after every iteration of incremental inlining") \
686
\
687
product(intx, LiveNodeCountInliningCutoff, 40000, \
688
"max number of live nodes in a method") \
689
range(0, max_juint / 8) \
690
\
691
product(bool, OptimizeExpensiveOps, true, DIAGNOSTIC, \
692
"Find best control for expensive operations") \
693
\
694
product(bool, UseMathExactIntrinsics, true, DIAGNOSTIC, \
695
"Enables intrinsification of various java.lang.Math functions") \
696
\
697
product(bool, UseCharacterCompareIntrinsics, false, DIAGNOSTIC, \
698
"Enables intrinsification of java.lang.Character functions") \
699
\
700
product(bool, UseMultiplyToLenIntrinsic, false, DIAGNOSTIC, \
701
"Enables intrinsification of BigInteger.multiplyToLen()") \
702
\
703
product(bool, UseSquareToLenIntrinsic, false, DIAGNOSTIC, \
704
"Enables intrinsification of BigInteger.squareToLen()") \
705
\
706
product(bool, UseMulAddIntrinsic, false, DIAGNOSTIC, \
707
"Enables intrinsification of BigInteger.mulAdd()") \
708
\
709
product(bool, UseMontgomeryMultiplyIntrinsic, false, DIAGNOSTIC, \
710
"Enables intrinsification of BigInteger.montgomeryMultiply()") \
711
\
712
product(bool, UseMontgomerySquareIntrinsic, false, DIAGNOSTIC, \
713
"Enables intrinsification of BigInteger.montgomerySquare()") \
714
\
715
product(bool, EnableVectorSupport, false, EXPERIMENTAL, \
716
"Enables VectorSupport intrinsics") \
717
\
718
product(bool, EnableVectorReboxing, false, EXPERIMENTAL, \
719
"Enables reboxing of vectors") \
720
\
721
product(bool, EnableVectorAggressiveReboxing, false, EXPERIMENTAL, \
722
"Enables aggressive reboxing of vectors") \
723
\
724
product(bool, UseVectorStubs, false, EXPERIMENTAL, \
725
"Use stubs for vector transcendental operations") \
726
\
727
product(bool, UseTypeSpeculation, true, \
728
"Speculatively propagate types from profiles") \
729
\
730
product(bool, UseInlineDepthForSpeculativeTypes, true, DIAGNOSTIC, \
731
"Carry inline depth of profile point with speculative type " \
732
"and give priority to profiling from lower inline depth") \
733
\
734
product_pd(bool, TrapBasedRangeChecks, \
735
"Generate code for range checks that uses a cmp and trap " \
736
"instruction raising SIGTRAP. Used on PPC64.") \
737
\
738
product(intx, ArrayCopyLoadStoreMaxElem, 8, \
739
"Maximum number of arraycopy elements inlined as a sequence of" \
740
"loads/stores") \
741
range(0, max_intx) \
742
\
743
develop(bool, StressArrayCopyMacroNode, false, \
744
"Perform ArrayCopy load/store replacement during IGVN only") \
745
\
746
develop(bool, RenumberLiveNodes, true, \
747
"Renumber live nodes") \
748
\
749
product(uintx, LoopStripMiningIter, 0, \
750
"Number of iterations in strip mined loop") \
751
range(0, max_juint) \
752
constraint(LoopStripMiningIterConstraintFunc, AfterErgo) \
753
\
754
product(uintx, LoopStripMiningIterShortLoop, 0, \
755
"Loop with fewer iterations are not strip mined") \
756
range(0, max_juint) \
757
\
758
product(bool, UseProfiledLoopPredicate, true, \
759
"Move predicates out of loops based on profiling data") \
760
\
761
product(bool, ExpandSubTypeCheckAtParseTime, false, DIAGNOSTIC, \
762
"Do not use subtype check macro node") \
763
\
764
develop(uintx, StressLongCountedLoop, 0, \
765
"if > 0, convert int counted loops to long counted loops" \
766
"to stress handling of long counted loops: run inner loop" \
767
"for at most jint_max / StressLongCountedLoop") \
768
range(0, max_juint) \
769
770
// end of C2_FLAGS
771
772
DECLARE_FLAGS(C2_FLAGS)
773
774
#endif // SHARE_OPTO_C2_GLOBALS_HPP
775
776