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 *
44 #ifdef TARGET_OS_FAMILY_linux
45 # include "c2_globals_linux.hpp"
46 #endif
47 #ifdef TARGET_OS_FAMILY_solaris
48 # include "c2_globals_solaris.hpp"
49 #endif
50 #ifdef TARGET_OS_FAMILY_windows
51 # include "c2_globals_windows.hpp"
52 #endif
53 #ifdef TARGET_OS_FAMILY_aix
54 # include "c2_globals_aix.hpp"
55 #endif
56 #ifdef TARGET_OS_FAMILY_bsd
57 # include "c2_globals_bsd.hpp"
58 #endif
59
60 //
61 // Defines all globals flags used by the server compiler.
62 //
63
64 #define C2_FLAGS(develop, develop_pd, product, product_pd, diagnostic, experimental, notproduct) \
65 \
66 develop(bool, StressLCM, false, \
67 "Randomize instruction scheduling in LCM") \
68 \
69 develop(bool, StressGCM, false, \
70 "Randomize instruction scheduling in GCM") \
71 \
72 notproduct(intx, CompileZapFirst, 0, \
73 "If +ZapDeadCompiledLocals, " \
74 "skip this many before compiling in zap calls") \
75 \
76 notproduct(intx, CompileZapLast, -1, \
77 "If +ZapDeadCompiledLocals, " \
78 "compile this many after skipping (incl. skip count, -1 = all)") \
79 \
80 notproduct(intx, ZapDeadCompiledLocalsFirst, 0, \
81 "If +ZapDeadCompiledLocals, " \
82 "skip this many before really doing it") \
83 \
84 notproduct(intx, ZapDeadCompiledLocalsLast, -1, \
85 "If +ZapDeadCompiledLocals, " \
86 "do this many after skipping (incl. skip count, -1 = all)") \
87 \
88 develop(intx, OptoPrologueNops, 0, \
89 "Insert this many extra nop instructions " \
90 "in the prologue of every nmethod") \
91 \
92 product_pd(intx, InteriorEntryAlignment, \
93 "Code alignment for interior entry points " \
94 "in generated code (in bytes)") \
95 \
96 product(intx, MaxLoopPad, (OptoLoopAlignment-1), \
97 "Align a loop if padding size in bytes is less or equal to this value") \
98 \
99 product(intx, MaxVectorSize, 64, \
100 "Max vector size in bytes, " \
101 "actual size could be less depending on elements type") \
102 \
103 product(bool, AlignVector, true, \
104 "Perform vector store/load alignment in loop") \
105 \
106 product(intx, NumberOfLoopInstrToAlign, 4, \
107 "Number of first instructions in a loop to align") \
108 \
109 notproduct(intx, IndexSetWatch, 0, \
110 "Trace all operations on this IndexSet (-1 means all, 0 none)") \
111 \
112 develop(intx, OptoNodeListSize, 4, \
113 "Starting allocation size of Node_List data structures") \
114 \
115 develop(intx, OptoBlockListSize, 8, \
116 "Starting allocation size of Block_List data structures") \
117 \
118 develop(intx, OptoPeepholeAt, -1, \
119 "Apply peephole optimizations to this peephole rule") \
120 \
121 notproduct(bool, PrintIdeal, false, \
122 "Print ideal graph before code generation") \
123 \
124 notproduct(bool, PrintOpto, false, \
125 "Print compiler2 attempts") \
126 \
127 notproduct(bool, PrintOptoInlining, false, \
128 "Print compiler2 inlining decisions") \
129 \
130 notproduct(bool, VerifyOpto, false, \
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(bool, PrintIdealGraph, false, \
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, PrintIdealGraphLevel, 0, \
360 "Level of detail of the ideal graph printout. " \
361 "System-wide value, 0=nothing is printed, 3=all details printed. "\
362 "Level of detail of printouts can be set on a per-method level " \
363 "as well by using CompileCommand=option.") \
364 \
365 develop(intx, PrintIdealGraphPort, 4444, \
366 "Ideal graph printer to network port") \
367 \
368 notproduct(ccstr, PrintIdealGraphAddress, "127.0.0.1", \
369 "IP address to connect to visualizer") \
370 \
371 notproduct(ccstr, PrintIdealGraphFile, NULL, \
372 "File to dump ideal graph to. If set overrides the " \
373 "use of the network") \
374 \
375 product(bool, UseBimorphicInlining, true, \
376 "Profiling based inlining for two receivers") \
377 \
378 product(bool, UseOnlyInlinedBimorphic, true, \
379 "Don't use BimorphicInlining if can't inline a second method") \
380 \
381 product(bool, InsertMemBarAfterArraycopy, true, \
382 "Insert memory barrier after arraycopy call") \
383 \
384 develop(bool, SubsumeLoads, true, \
385 "Attempt to compile while subsuming loads into machine instructions.") \
386 \
387 develop(bool, StressRecompilation, false, \
388 "Recompile each compiled method without subsuming loads or escape analysis.") \
389 \
390 develop(intx, ImplicitNullCheckThreshold, 3, \
391 "Don't do implicit null checks if NPE's in a method exceeds limit") \
392 \
393 product(intx, LoopOptsCount, 43, \
394 "Set level of loop optimization for tier 1 compiles") \
395 \
396 /* controls for heat-based inlining */ \
397 \
398 develop(intx, NodeCountInliningCutoff, 18000, \
399 "If parser node generation exceeds limit stop inlining") \
400 \
401 develop(intx, NodeCountInliningStep, 1000, \
402 "Target size of warm calls inlined between optimization passes") \
403 \
404 develop(bool, InlineWarmCalls, false, \
405 "Use a heat-based priority queue to govern inlining") \
406 \
407 develop(intx, HotCallCountThreshold, 999999, \
408 "large numbers of calls (per method invocation) force hotness") \
409 \
410 develop(intx, HotCallProfitThreshold, 999999, \
411 "highly profitable inlining opportunities force hotness") \
517 \
518 product(bool, OptimizeStringConcat, true, \
519 "Optimize the construction of Strings by StringBuilder") \
520 \
521 notproduct(bool, PrintOptimizeStringConcat, false, \
522 "Print information about transformations performed on Strings") \
523 \
524 product(intx, ValueSearchLimit, 1000, \
525 "Recursion limit in PhaseMacroExpand::value_from_mem_phi") \
526 \
527 product(intx, MaxLabelRootDepth, 1100, \
528 "Maximum times call Label_Root to prevent stack overflow") \
529 \
530 diagnostic(intx, DominatorSearchLimit, 1000, \
531 "Iterations limit in Node::dominates") \
532 \
533 product(bool, BlockLayoutByFrequency, true, \
534 "Use edge frequencies to drive block ordering") \
535 \
536 product(intx, BlockLayoutMinDiamondPercentage, 20, \
537 "Miniumum %% of a successor (predecessor) for which block layout "\
538 "a will allow a fork (join) in a single chain") \
539 \
540 product(bool, BlockLayoutRotateLoops, true, \
541 "Allow back branches to be fall throughs in the block layour") \
542 \
543 develop(bool, InlineReflectionGetCallerClass, true, \
544 "inline sun.reflect.Reflection.getCallerClass(), known to be part "\
545 "of base library DLL") \
546 \
547 develop(bool, InlineObjectCopy, true, \
548 "inline Object.clone and Arrays.copyOf[Range] intrinsics") \
549 \
550 develop(bool, SpecialStringCompareTo, true, \
551 "special version of string compareTo") \
552 \
553 develop(bool, SpecialStringIndexOf, true, \
554 "special version of string indexOf") \
555 \
556 develop(bool, SpecialStringEquals, true, \
557 "special version of string equals") \
558 \
559 develop(bool, SpecialArraysEquals, true, \
560 "special version of Arrays.equals(char[],char[])") \
561 \
562 product(bool, SpecialEncodeISOArray, true, \
563 "special version of ISO_8859_1$Encoder.encodeISOArray") \
564 \
565 develop(bool, BailoutToInterpreterForThrows, false, \
587 develop(bool, PrintDominators, false, \
588 "Print out dominator trees for GVN") \
589 \
590 notproduct(bool, TraceSpilling, false, \
591 "Trace spilling") \
592 \
593 diagnostic(bool, TraceTypeProfile, false, \
594 "Trace type profile") \
595 \
596 develop(bool, PoisonOSREntry, true, \
597 "Detect abnormal calls to OSR code") \
598 \
599 develop(bool, SoftMatchFailure, trueInProduct, \
600 "If the DFA fails to match a node, print a message and bail out") \
601 \
602 develop(bool, InlineAccessors, true, \
603 "inline accessor methods (get/set)") \
604 \
605 product(intx, TypeProfileMajorReceiverPercent, 90, \
606 "% of major receiver type to all profiled receivers") \
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, UseTypeSpeculation, true, \
669 "Speculatively propagate types from profiles") \
670 \
671 diagnostic(bool, UseInlineDepthForSpeculativeTypes, true, \
672 "Carry inline depth of profile point with speculative type " \
673 "and give priority to profiling from lower inline depth") \
674 \
675 product_pd(bool, TrapBasedRangeChecks, \
676 "Generate code for range checks that uses a cmp and trap " \
677 "instruction raising SIGTRAP. Used on PPC64.") \
678 \
679 product(intx, ArrayCopyLoadStoreMaxElem, 8, \
680 "Maximum number of arraycopy elements inlined as a sequence of" \
681 "loads/stores") \
682 \
683 develop(bool, StressArrayCopyMacroNode, false, \
684 "Perform ArrayCopy load/store replacement during IGVN only")
685
686 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)
687
688 #endif // SHARE_VM_OPTO_C2_GLOBALS_HPP
|
1 /*
2 * Copyright (c) 2000, 2015, 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 *
44 #ifdef TARGET_OS_FAMILY_linux
45 # include "c2_globals_linux.hpp"
46 #endif
47 #ifdef TARGET_OS_FAMILY_solaris
48 # include "c2_globals_solaris.hpp"
49 #endif
50 #ifdef TARGET_OS_FAMILY_windows
51 # include "c2_globals_windows.hpp"
52 #endif
53 #ifdef TARGET_OS_FAMILY_aix
54 # include "c2_globals_aix.hpp"
55 #endif
56 #ifdef TARGET_OS_FAMILY_bsd
57 # include "c2_globals_bsd.hpp"
58 #endif
59
60 //
61 // Defines all globals flags used by the server compiler.
62 //
63
64 #define C2_FLAGS(develop, develop_pd, product, product_pd, diagnostic, experimental, notproduct, range, constraint) \
65 \
66 develop(bool, StressLCM, false, \
67 "Randomize instruction scheduling in LCM") \
68 \
69 develop(bool, StressGCM, false, \
70 "Randomize instruction scheduling in GCM") \
71 \
72 notproduct(intx, CompileZapFirst, 0, \
73 "If +ZapDeadCompiledLocals, " \
74 "skip this many before compiling in zap calls") \
75 \
76 notproduct(intx, CompileZapLast, -1, \
77 "If +ZapDeadCompiledLocals, " \
78 "compile this many after skipping (incl. skip count, -1 = all)") \
79 \
80 notproduct(intx, ZapDeadCompiledLocalsFirst, 0, \
81 "If +ZapDeadCompiledLocals, " \
82 "skip this many before really doing it") \
83 \
84 notproduct(intx, ZapDeadCompiledLocalsLast, -1, \
85 "If +ZapDeadCompiledLocals, " \
86 "do this many after skipping (incl. skip count, -1 = all)") \
87 \
88 develop(intx, OptoPrologueNops, 0, \
89 "Insert this many extra nop instructions " \
90 "in the prologue of every nmethod") \
91 \
92 product_pd(intx, InteriorEntryAlignment, \
93 "Code alignment for interior entry points " \
94 "in generated code (in bytes)") \
95 \
96 product(intx, MaxLoopPad, (OptoLoopAlignment-1), \
97 "Align a loop if padding size in bytes is less or equal to this " \
98 "value") \
99 \
100 product(intx, MaxVectorSize, 64, \
101 "Max vector size in bytes, " \
102 "actual size could be less depending on elements type") \
103 \
104 product(bool, AlignVector, true, \
105 "Perform vector store/load alignment in loop") \
106 \
107 product(intx, NumberOfLoopInstrToAlign, 4, \
108 "Number of first instructions in a loop to align") \
109 \
110 notproduct(intx, IndexSetWatch, 0, \
111 "Trace all operations on this IndexSet (-1 means all, 0 none)") \
112 range(-1, 0) \
113 \
114 develop(intx, OptoNodeListSize, 4, \
115 "Starting allocation size of Node_List data structures") \
116 \
117 develop(intx, OptoBlockListSize, 8, \
118 "Starting allocation size of Block_List data structures") \
119 \
120 develop(intx, OptoPeepholeAt, -1, \
121 "Apply peephole optimizations to this peephole rule") \
122 \
123 notproduct(bool, PrintIdeal, false, \
124 "Print ideal graph before code generation") \
125 \
126 notproduct(bool, PrintOpto, false, \
127 "Print compiler2 attempts") \
128 \
129 notproduct(bool, PrintOptoInlining, false, \
130 "Print compiler2 inlining decisions") \
131 \
132 notproduct(bool, VerifyOpto, false, \
346 \
347 /* Set BranchOnRegister == false. See 4965987. */ \
348 product(bool, BranchOnRegister, false, \
349 "Use Sparc V9 branch-on-register opcodes") \
350 \
351 develop(bool, SparcV9RegsHiBitsZero, true, \
352 "Assume Sparc V9 I&L registers on V8+ systems are zero-extended") \
353 \
354 product(bool, UseRDPCForConstantTableBase, false, \
355 "Use Sparc RDPC instruction for the constant table base.") \
356 \
357 develop(bool, PrintIdealGraph, false, \
358 "Print ideal graph to XML file / network interface. " \
359 "By default attempts to connect to the visualizer on a socket.") \
360 \
361 develop(intx, PrintIdealGraphLevel, 0, \
362 "Level of detail of the ideal graph printout. " \
363 "System-wide value, 0=nothing is printed, 3=all details printed. "\
364 "Level of detail of printouts can be set on a per-method level " \
365 "as well by using CompileCommand=option.") \
366 range(0, 3) \
367 \
368 develop(intx, PrintIdealGraphPort, 4444, \
369 "Ideal graph printer to network port") \
370 \
371 notproduct(ccstr, PrintIdealGraphAddress, "127.0.0.1", \
372 "IP address to connect to visualizer") \
373 \
374 notproduct(ccstr, PrintIdealGraphFile, NULL, \
375 "File to dump ideal graph to. If set overrides the " \
376 "use of the network") \
377 \
378 product(bool, UseBimorphicInlining, true, \
379 "Profiling based inlining for two receivers") \
380 \
381 product(bool, UseOnlyInlinedBimorphic, true, \
382 "Don't use BimorphicInlining if can't inline a second method") \
383 \
384 product(bool, InsertMemBarAfterArraycopy, true, \
385 "Insert memory barrier after arraycopy call") \
386 \
387 develop(bool, SubsumeLoads, true, \
388 "Attempt to compile while subsuming loads into machine " \
389 "instructions.") \
390 \
391 develop(bool, StressRecompilation, false, \
392 "Recompile each compiled method without subsuming loads " \
393 "or escape analysis.") \
394 \
395 develop(intx, ImplicitNullCheckThreshold, 3, \
396 "Don't do implicit null checks if NPE's in a method exceeds " \
397 "limit") \
398 \
399 product(intx, LoopOptsCount, 43, \
400 "Set level of loop optimization for tier 1 compiles") \
401 \
402 /* controls for heat-based inlining */ \
403 \
404 develop(intx, NodeCountInliningCutoff, 18000, \
405 "If parser node generation exceeds limit stop inlining") \
406 \
407 develop(intx, NodeCountInliningStep, 1000, \
408 "Target size of warm calls inlined between optimization passes") \
409 \
410 develop(bool, InlineWarmCalls, false, \
411 "Use a heat-based priority queue to govern inlining") \
412 \
413 develop(intx, HotCallCountThreshold, 999999, \
414 "large numbers of calls (per method invocation) force hotness") \
415 \
416 develop(intx, HotCallProfitThreshold, 999999, \
417 "highly profitable inlining opportunities force hotness") \
523 \
524 product(bool, OptimizeStringConcat, true, \
525 "Optimize the construction of Strings by StringBuilder") \
526 \
527 notproduct(bool, PrintOptimizeStringConcat, false, \
528 "Print information about transformations performed on Strings") \
529 \
530 product(intx, ValueSearchLimit, 1000, \
531 "Recursion limit in PhaseMacroExpand::value_from_mem_phi") \
532 \
533 product(intx, MaxLabelRootDepth, 1100, \
534 "Maximum times call Label_Root to prevent stack overflow") \
535 \
536 diagnostic(intx, DominatorSearchLimit, 1000, \
537 "Iterations limit in Node::dominates") \
538 \
539 product(bool, BlockLayoutByFrequency, true, \
540 "Use edge frequencies to drive block ordering") \
541 \
542 product(intx, BlockLayoutMinDiamondPercentage, 20, \
543 "Miniumum %% of a successor (predecessor) for which block " \
544 "layout a will allow a fork (join) in a single chain") \
545 range(0, 100) \
546 \
547 product(bool, BlockLayoutRotateLoops, true, \
548 "Allow back branches to be fall throughs in the block layour") \
549 \
550 develop(bool, InlineReflectionGetCallerClass, true, \
551 "inline sun.reflect.Reflection.getCallerClass(), known to be " \
552 "part of base library DLL") \
553 \
554 develop(bool, InlineObjectCopy, true, \
555 "inline Object.clone and Arrays.copyOf[Range] intrinsics") \
556 \
557 develop(bool, SpecialStringCompareTo, true, \
558 "special version of string compareTo") \
559 \
560 develop(bool, SpecialStringIndexOf, true, \
561 "special version of string indexOf") \
562 \
563 develop(bool, SpecialStringEquals, true, \
564 "special version of string equals") \
565 \
566 develop(bool, SpecialArraysEquals, true, \
567 "special version of Arrays.equals(char[],char[])") \
568 \
569 product(bool, SpecialEncodeISOArray, true, \
570 "special version of ISO_8859_1$Encoder.encodeISOArray") \
571 \
572 develop(bool, BailoutToInterpreterForThrows, false, \
594 develop(bool, PrintDominators, false, \
595 "Print out dominator trees for GVN") \
596 \
597 notproduct(bool, TraceSpilling, false, \
598 "Trace spilling") \
599 \
600 diagnostic(bool, TraceTypeProfile, false, \
601 "Trace type profile") \
602 \
603 develop(bool, PoisonOSREntry, true, \
604 "Detect abnormal calls to OSR code") \
605 \
606 develop(bool, SoftMatchFailure, trueInProduct, \
607 "If the DFA fails to match a node, print a message and bail out") \
608 \
609 develop(bool, InlineAccessors, true, \
610 "inline accessor methods (get/set)") \
611 \
612 product(intx, TypeProfileMajorReceiverPercent, 90, \
613 "% of major receiver type to all profiled receivers") \
614 range(0, 100) \
615 \
616 diagnostic(bool, PrintIntrinsics, false, \
617 "prints attempted and successful inlining of intrinsics") \
618 \
619 diagnostic(ccstrlist, DisableIntrinsic, "", \
620 "do not expand intrinsics whose (internal) names appear here") \
621 \
622 develop(bool, StressReflectiveCode, false, \
623 "Use inexact types at allocations, etc., to test reflection") \
624 \
625 diagnostic(bool, DebugInlinedCalls, true, \
626 "If false, restricts profiled locations to the root method only") \
627 \
628 notproduct(bool, VerifyLoopOptimizations, false, \
629 "verify major loop optimizations") \
630 \
631 diagnostic(bool, ProfileDynamicTypes, true, \
632 "do extra type profiling and use it more aggressively") \
633 \
634 develop(bool, TraceIterativeGVN, false, \
635 "Print progress during Iterative Global Value Numbering") \
636 \
637 develop(bool, VerifyIterativeGVN, false, \
638 "Verify Def-Use modifications during sparse Iterative Global " \
639 "Value Numbering") \
640 \
641 notproduct(bool, TraceCISCSpill, false, \
642 "Trace allocators use of cisc spillable instructions") \
643 \
644 product(bool, SplitIfBlocks, true, \
645 "Clone compares and control flow through merge points to fold " \
646 "some branches") \
647 \
648 develop(intx, FreqCountInvocations, 1, \
649 "Scaling factor for branch frequencies (deprecated)") \
650 \
651 product(intx, AliasLevel, 3, \
652 "0 for no aliasing, 1 for oop/field/static/array split, " \
653 "2 for class split, 3 for unique instances") \
654 range(0, 3) \
655 constraint(AliasLevelConstraintFunc) \
656 \
657 develop(bool, VerifyAliases, false, \
658 "perform extra checks on the results of alias analysis") \
659 \
660 product(bool, IncrementalInline, true, \
661 "do post parse inlining") \
662 \
663 develop(bool, AlwaysIncrementalInline, false, \
664 "do all inlining incrementally") \
665 \
666 product(intx, LiveNodeCountInliningCutoff, 40000, \
667 "max number of live nodes in a method") \
668 \
669 diagnostic(bool, OptimizeExpensiveOps, true, \
670 "Find best control for expensive operations") \
671 \
672 product(bool, UseMathExactIntrinsics, true, \
673 "Enables intrinsification of various java.lang.Math functions") \
674 \
675 product(bool, UseMultiplyToLenIntrinsic, false, \
676 "Enables intrinsification of BigInteger.multiplyToLen()") \
677 \
678 product(bool, UseTypeSpeculation, true, \
679 "Speculatively propagate types from profiles") \
680 \
681 diagnostic(bool, UseInlineDepthForSpeculativeTypes, true, \
682 "Carry inline depth of profile point with speculative type " \
683 "and give priority to profiling from lower inline depth") \
684 \
685 product_pd(bool, TrapBasedRangeChecks, \
686 "Generate code for range checks that uses a cmp and trap " \
687 "instruction raising SIGTRAP. Used on PPC64.") \
688 \
689 product(intx, ArrayCopyLoadStoreMaxElem, 8, \
690 "Maximum number of arraycopy elements inlined as a sequence of" \
691 "loads/stores") \
692 \
693 develop(bool, StressArrayCopyMacroNode, false, \
694 "Perform ArrayCopy load/store replacement during IGVN only")
695
696 C2_FLAGS(DECLARE_DEVELOPER_FLAG, \
697 DECLARE_PD_DEVELOPER_FLAG, \
698 DECLARE_PRODUCT_FLAG, \
699 DECLARE_PD_PRODUCT_FLAG, \
700 DECLARE_DIAGNOSTIC_FLAG, \
701 DECLARE_EXPERIMENTAL_FLAG, \
702 DECLARE_NOTPRODUCT_FLAG, \
703 IGNORE_RANGE, \
704 IGNORE_CONSTRAINT)
705
706 #endif // SHARE_VM_OPTO_C2_GLOBALS_HPP
|