1 /*
   2  * Copyright (c) 2020, 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 #include "precompiled.hpp"
  26 #include "runtime/flags/jvmFlagConstraintsCompiler.hpp"
  27 
  28 // -- Define all JVM flags that have been declared in share/opto/c2_globals.hpp
  29 
  30 // Add JVMFlag::C2 to the JVMFlag::attr() for all flags defined in this file
  31 #ifdef FLAG_COMMON_ATTRS
  32 #undef FLAG_COMMON_ATTRS
  33 #endif
  34 #define FLAG_COMMON_ATTRS JVMFlag::C2
  35 
  36 #include "c2_globals.hpp"
  37 #include "runtime/flags/jvmFlag.inline.hpp"
  38 DEFN_PRODUCT_FLAG(StressLCM);
  39 DEFN_PRODUCT_FLAG(StressGCM);
  40 DEFN_DEVELOP_FLAG(StressMethodHandleLinkerInlining);
  41 DEFN_DEVELOP_FLAG(OptoPrologueNops); DEFN_DEVELOP_RANGE(OptoPrologueNops);
  42 DEFN_PRODUCT_FLAG_PD(InteriorEntryAlignment); DEFN_PRODUCT_CONSTRAINT(InteriorEntryAlignment);
  43 DEFN_PRODUCT_FLAG(MaxLoopPad); DEFN_PRODUCT_RANGE(MaxLoopPad);
  44 DEFN_PRODUCT_FLAG(MaxVectorSize); DEFN_PRODUCT_RANGE(MaxVectorSize);
  45 DEFN_PRODUCT_FLAG(AlignVector);
  46 DEFN_PRODUCT_FLAG(NumberOfLoopInstrToAlign); DEFN_PRODUCT_RANGE(NumberOfLoopInstrToAlign);
  47 DEFN_NOTPROD_FLAG(IndexSetWatch); DEFN_NOTPROD_RANGE(IndexSetWatch);
  48 DEFN_DEVELOP_FLAG(OptoNodeListSize); DEFN_DEVELOP_RANGE(OptoNodeListSize);
  49 DEFN_DEVELOP_FLAG(OptoBlockListSize); DEFN_DEVELOP_RANGE(OptoBlockListSize);
  50 DEFN_DEVELOP_FLAG(OptoPeepholeAt);
  51 DEFN_NOTPROD_FLAG(PrintIdeal);
  52 DEFN_DEVELOP_FLAG(PrintOpto);
  53 DEFN_DEVELOP_FLAG(PrintOptoInlining);
  54 DEFN_NOTPROD_FLAG(VerifyIdealNodeCount);
  55 DEFN_NOTPROD_FLAG(PrintIdealNodeCount);
  56 DEFN_NOTPROD_FLAG(VerifyOptoOopOffsets);
  57 DEFN_DEVELOP_FLAG(IdealizedNumerics);
  58 DEFN_PRODUCT_FLAG_PD(IdealizeClearArrayNode);
  59 DEFN_DEVELOP_FLAG(OptoBreakpoint);
  60 DEFN_DEVELOP_FLAG(OptoBreakpointOSR);
  61 DEFN_NOTPROD_FLAG(BreakAtNode);
  62 DEFN_DEVELOP_FLAG(OptoBreakpointC2R);
  63 DEFN_NOTPROD_FLAG(OptoNoExecute);
  64 DEFN_NOTPROD_FLAG(PrintOptoStatistics);
  65 DEFN_PRODUCT_FLAG(PrintOptoAssembly);
  66 DEFN_DEVELOP_FLAG_PD(OptoPeephole);
  67 DEFN_DEVELOP_FLAG(OptoRemoveUseless);
  68 DEFN_NOTPROD_FLAG(PrintFrameConverterAssembly);
  69 DEFN_NOTPROD_FLAG(PrintParseStatistics);
  70 DEFN_NOTPROD_FLAG(PrintOptoPeephole);
  71 DEFN_DEVELOP_FLAG(PrintCFGBlockFreq);
  72 DEFN_DEVELOP_FLAG(TraceOptoParse);
  73 DEFN_PRODUCT_FLAG_PD(LoopUnrollLimit); DEFN_PRODUCT_RANGE(LoopUnrollLimit);
  74 DEFN_PRODUCT_FLAG_PD(LoopPercentProfileLimit); DEFN_PRODUCT_RANGE(LoopPercentProfileLimit);
  75 DEFN_PRODUCT_FLAG(LoopMaxUnroll); DEFN_PRODUCT_RANGE(LoopMaxUnroll);
  76 DEFN_PRODUCT_FLAG_PD(SuperWordLoopUnrollAnalysis);
  77 DEFN_PRODUCT_FLAG(PostLoopMultiversioning);
  78 DEFN_DEVELOP_FLAG(TraceSuperWordLoopUnrollAnalysis);
  79 DEFN_PRODUCT_FLAG(UseVectorMacroLogic);
  80 DEFN_PRODUCT_FLAG(LoopUnrollMin); DEFN_PRODUCT_RANGE(LoopUnrollMin);
  81 DEFN_PRODUCT_FLAG(UseSubwordForMaxVector);
  82 DEFN_PRODUCT_FLAG(UseVectorCmov);
  83 DEFN_DEVELOP_FLAG(UnrollLimitForProfileCheck); DEFN_DEVELOP_RANGE(UnrollLimitForProfileCheck);
  84 DEFN_PRODUCT_FLAG(MultiArrayExpandLimit); DEFN_PRODUCT_RANGE(MultiArrayExpandLimit);
  85 DEFN_NOTPROD_FLAG(TraceProfileTripCount);
  86 DEFN_PRODUCT_FLAG(UseCountedLoopSafepoints);
  87 DEFN_PRODUCT_FLAG(UseLoopPredicate);
  88 DEFN_DEVELOP_FLAG(TraceLoopPredicate);
  89 DEFN_DEVELOP_FLAG(TraceLoopOpts);
  90 DEFN_DEVELOP_FLAG(TraceLoopLimitCheck);
  91 DEFN_DEVELOP_FLAG(TraceRangeLimitCheck);
  92 DEFN_PRODUCT_FLAG(OptimizeFill);
  93 DEFN_DEVELOP_FLAG(TraceOptimizeFill);
  94 DEFN_DEVELOP_FLAG(OptoCoalesce);
  95 DEFN_DEVELOP_FLAG(UseUniqueSubclasses);
  96 DEFN_DEVELOP_FLAG(UseExactTypes);
  97 DEFN_PRODUCT_FLAG(TrackedInitializationLimit); DEFN_PRODUCT_RANGE(TrackedInitializationLimit);
  98 DEFN_PRODUCT_FLAG(ReduceFieldZeroing);
  99 DEFN_PRODUCT_FLAG(ReduceInitialCardMarks);
 100 DEFN_PRODUCT_FLAG(ReduceBulkZeroing);
 101 DEFN_PRODUCT_FLAG(UseFPUForSpilling);
 102 DEFN_DEVELOP_FLAG_PD(RegisterCostAreaRatio);
 103 DEFN_DEVELOP_FLAG_PD(UseCISCSpill);
 104 DEFN_NOTPROD_FLAG(VerifyGraphEdges);
 105 DEFN_NOTPROD_FLAG(VerifyDUIterators);
 106 DEFN_NOTPROD_FLAG(VerifyHashTableKeys);
 107 DEFN_NOTPROD_FLAG(VerifyRegisterAllocator);
 108 DEFN_DEVELOP_FLAG_PD(FLOATPRESSURE); DEFN_DEVELOP_RANGE(FLOATPRESSURE);
 109 DEFN_DEVELOP_FLAG_PD(INTPRESSURE); DEFN_DEVELOP_RANGE(INTPRESSURE);
 110 DEFN_NOTPROD_FLAG(TraceOptoPipelining);
 111 DEFN_NOTPROD_FLAG(TraceOptoOutput);
 112 DEFN_PRODUCT_FLAG_PD(OptoScheduling);
 113 DEFN_PRODUCT_FLAG_PD(OptoRegScheduling);
 114 DEFN_PRODUCT_FLAG(PartialPeelLoop);
 115 DEFN_PRODUCT_FLAG(PartialPeelNewPhiDelta); DEFN_PRODUCT_RANGE(PartialPeelNewPhiDelta);
 116 DEFN_NOTPROD_FLAG(TracePartialPeeling);
 117 DEFN_PRODUCT_FLAG(PartialPeelAtUnsignedTests);
 118 DEFN_PRODUCT_FLAG(ReassociateInvariants);
 119 DEFN_PRODUCT_FLAG(LoopUnswitching);
 120 DEFN_NOTPROD_FLAG(TraceLoopUnswitching);
 121 DEFN_PRODUCT_FLAG(AllowVectorizeOnDemand);
 122 DEFN_PRODUCT_FLAG(UseSuperWord);
 123 DEFN_DEVELOP_FLAG(SuperWordRTDepCheck);
 124 DEFN_PRODUCT_FLAG(SuperWordReductions);
 125 DEFN_PRODUCT_FLAG(UseCMoveUnconditionally);
 126 DEFN_PRODUCT_FLAG(DoReserveCopyInSuperWord);
 127 DEFN_DEVELOP_FLAG(TraceSuperWord);
 128 DEFN_NOTPROD_FLAG(TraceNewVectors);
 129 DEFN_PRODUCT_FLAG_PD(OptoBundling);
 130 DEFN_PRODUCT_FLAG_PD(ConditionalMoveLimit); DEFN_PRODUCT_RANGE(ConditionalMoveLimit);
 131 DEFN_PRODUCT_FLAG(BranchOnRegister);
 132 DEFN_DEVELOP_FLAG(SparcV9RegsHiBitsZero);
 133 DEFN_PRODUCT_FLAG(UseRDPCForConstantTableBase);
 134 DEFN_NOTPROD_FLAG(PrintIdealGraph);
 135 DEFN_NOTPROD_FLAG(PrintIdealGraphLevel); DEFN_NOTPROD_RANGE(PrintIdealGraphLevel);
 136 DEFN_NOTPROD_FLAG(PrintIdealGraphPort); DEFN_NOTPROD_RANGE(PrintIdealGraphPort);
 137 DEFN_NOTPROD_FLAG(PrintIdealGraphAddress);
 138 DEFN_NOTPROD_FLAG(PrintIdealGraphFile);
 139 DEFN_PRODUCT_FLAG(UseBimorphicInlining);
 140 DEFN_PRODUCT_FLAG(UseOnlyInlinedBimorphic);
 141 DEFN_PRODUCT_FLAG(InsertMemBarAfterArraycopy);
 142 DEFN_DEVELOP_FLAG(SubsumeLoads);
 143 DEFN_DEVELOP_FLAG(StressRecompilation);
 144 DEFN_DEVELOP_FLAG(ImplicitNullCheckThreshold); DEFN_DEVELOP_RANGE(ImplicitNullCheckThreshold);
 145 DEFN_PRODUCT_FLAG(LoopOptsCount); DEFN_PRODUCT_RANGE(LoopOptsCount);
 146 DEFN_DEVELOP_FLAG(NodeCountInliningCutoff); DEFN_DEVELOP_RANGE(NodeCountInliningCutoff);
 147 DEFN_DEVELOP_FLAG(NodeCountInliningStep); DEFN_DEVELOP_RANGE(NodeCountInliningStep);
 148 DEFN_DEVELOP_FLAG(InlineWarmCalls);
 149 DEFN_DEVELOP_FLAG(HotCallCountThreshold); DEFN_DEVELOP_RANGE(HotCallCountThreshold);
 150 DEFN_DEVELOP_FLAG(HotCallProfitThreshold); DEFN_DEVELOP_RANGE(HotCallProfitThreshold);
 151 DEFN_DEVELOP_FLAG(HotCallTrivialWork); DEFN_DEVELOP_RANGE(HotCallTrivialWork);
 152 DEFN_DEVELOP_FLAG(HotCallTrivialSize); DEFN_DEVELOP_RANGE(HotCallTrivialSize);
 153 DEFN_DEVELOP_FLAG(WarmCallMinCount); DEFN_DEVELOP_RANGE(WarmCallMinCount);
 154 DEFN_DEVELOP_FLAG(WarmCallMinProfit); DEFN_DEVELOP_RANGE(WarmCallMinProfit);
 155 DEFN_DEVELOP_FLAG(WarmCallMaxWork); DEFN_DEVELOP_RANGE(WarmCallMaxWork);
 156 DEFN_DEVELOP_FLAG(WarmCallMaxSize); DEFN_DEVELOP_RANGE(WarmCallMaxSize);
 157 DEFN_PRODUCT_FLAG(MaxNodeLimit); DEFN_PRODUCT_RANGE(MaxNodeLimit);
 158 DEFN_PRODUCT_FLAG(NodeLimitFudgeFactor); DEFN_PRODUCT_CONSTRAINT(NodeLimitFudgeFactor);
 159 DEFN_PRODUCT_FLAG(UseJumpTables);
 160 DEFN_PRODUCT_FLAG(UseDivMod);
 161 DEFN_PRODUCT_FLAG_PD(MinJumpTableSize); DEFN_PRODUCT_RANGE(MinJumpTableSize);
 162 DEFN_PRODUCT_FLAG(MaxJumpTableSize); DEFN_PRODUCT_RANGE(MaxJumpTableSize);
 163 DEFN_PRODUCT_FLAG(MaxJumpTableSparseness); DEFN_PRODUCT_RANGE(MaxJumpTableSparseness);
 164 DEFN_PRODUCT_FLAG(EliminateLocks);
 165 DEFN_PRODUCT_FLAG(EliminateNestedLocks);
 166 DEFN_NOTPROD_FLAG(PrintLockStatistics);
 167 DEFN_PRODUCT_FLAG(PrintPreciseBiasedLockingStatistics);
 168 DEFN_PRODUCT_FLAG(PrintPreciseRTMLockingStatistics);
 169 DEFN_NOTPROD_FLAG(PrintEliminateLocks);
 170 DEFN_PRODUCT_FLAG(EliminateAutoBox);
 171 DEFN_PRODUCT_FLAG(AutoBoxCacheMax); DEFN_PRODUCT_RANGE(AutoBoxCacheMax);
 172 DEFN_PRODUCT_FLAG(AggressiveUnboxing);
 173 DEFN_DEVELOP_FLAG(TracePostallocExpand);
 174 DEFN_PRODUCT_FLAG(DoEscapeAnalysis);
 175 DEFN_PRODUCT_FLAG(EscapeAnalysisTimeout); DEFN_PRODUCT_RANGE(EscapeAnalysisTimeout);
 176 DEFN_DEVELOP_FLAG(ExitEscapeAnalysisOnTimeout);
 177 DEFN_NOTPROD_FLAG(PrintEscapeAnalysis);
 178 DEFN_PRODUCT_FLAG(EliminateAllocations);
 179 DEFN_NOTPROD_FLAG(PrintEliminateAllocations);
 180 DEFN_PRODUCT_FLAG(EliminateAllocationArraySizeLimit); DEFN_PRODUCT_RANGE(EliminateAllocationArraySizeLimit);
 181 DEFN_PRODUCT_FLAG(OptimizePtrCompare);
 182 DEFN_NOTPROD_FLAG(PrintOptimizePtrCompare);
 183 DEFN_NOTPROD_FLAG(VerifyConnectionGraph);
 184 DEFN_PRODUCT_FLAG(UseOptoBiasInlining);
 185 DEFN_PRODUCT_FLAG(OptimizeStringConcat);
 186 DEFN_NOTPROD_FLAG(PrintOptimizeStringConcat);
 187 DEFN_PRODUCT_FLAG(ValueSearchLimit); DEFN_PRODUCT_RANGE(ValueSearchLimit);
 188 DEFN_PRODUCT_FLAG(MaxLabelRootDepth); DEFN_PRODUCT_RANGE(MaxLabelRootDepth);
 189 DEFN_PRODUCT_FLAG(DominatorSearchLimit); DEFN_PRODUCT_RANGE(DominatorSearchLimit);
 190 DEFN_PRODUCT_FLAG(BlockLayoutByFrequency);
 191 DEFN_PRODUCT_FLAG(BlockLayoutMinDiamondPercentage); DEFN_PRODUCT_RANGE(BlockLayoutMinDiamondPercentage);
 192 DEFN_PRODUCT_FLAG(BlockLayoutRotateLoops);
 193 DEFN_PRODUCT_FLAG(InlineReflectionGetCallerClass);
 194 DEFN_PRODUCT_FLAG(InlineObjectCopy);
 195 DEFN_PRODUCT_FLAG(SpecialStringCompareTo);
 196 DEFN_PRODUCT_FLAG(SpecialStringIndexOf);
 197 DEFN_PRODUCT_FLAG(SpecialStringEquals);
 198 DEFN_PRODUCT_FLAG(SpecialArraysEquals);
 199 DEFN_PRODUCT_FLAG(SpecialEncodeISOArray);
 200 DEFN_DEVELOP_FLAG(BailoutToInterpreterForThrows);
 201 DEFN_DEVELOP_FLAG(ConvertCmpD2CmpF);
 202 DEFN_DEVELOP_FLAG(ConvertFloat2IntClipping);
 203 DEFN_DEVELOP_FLAG(MonomorphicArrayCheck);
 204 DEFN_NOTPROD_FLAG(TracePhaseCCP);
 205 DEFN_DEVELOP_FLAG(PrintDominators);
 206 DEFN_PRODUCT_FLAG(TraceSpilling);
 207 DEFN_PRODUCT_FLAG(TraceTypeProfile);
 208 DEFN_DEVELOP_FLAG(PoisonOSREntry);
 209 DEFN_DEVELOP_FLAG(SoftMatchFailure);
 210 DEFN_DEVELOP_FLAG(InlineAccessors);
 211 DEFN_PRODUCT_FLAG(TypeProfileMajorReceiverPercent); DEFN_PRODUCT_RANGE(TypeProfileMajorReceiverPercent);
 212 DEFN_PRODUCT_FLAG(PrintIntrinsics);
 213 DEFN_DEVELOP_FLAG(StressReflectiveCode);
 214 DEFN_PRODUCT_FLAG(DebugInlinedCalls);
 215 DEFN_DEVELOP_FLAG(VerifyLoopOptimizations);
 216 DEFN_PRODUCT_FLAG(ProfileDynamicTypes);
 217 DEFN_DEVELOP_FLAG(TraceIterativeGVN);
 218 DEFN_DEVELOP_FLAG(VerifyIterativeGVN);
 219 DEFN_NOTPROD_FLAG(TraceCISCSpill);
 220 DEFN_PRODUCT_FLAG(SplitIfBlocks);
 221 DEFN_DEVELOP_FLAG(FreqCountInvocations); DEFN_DEVELOP_RANGE(FreqCountInvocations);
 222 DEFN_PRODUCT_FLAG(AliasLevel); DEFN_PRODUCT_RANGE(AliasLevel); DEFN_PRODUCT_CONSTRAINT(AliasLevel);
 223 DEFN_DEVELOP_FLAG(VerifyAliases);
 224 DEFN_PRODUCT_FLAG(IncrementalInline);
 225 DEFN_DEVELOP_FLAG(AlwaysIncrementalInline);
 226 DEFN_PRODUCT_FLAG(LiveNodeCountInliningCutoff); DEFN_PRODUCT_RANGE(LiveNodeCountInliningCutoff);
 227 DEFN_PRODUCT_FLAG(OptimizeExpensiveOps);
 228 DEFN_PRODUCT_FLAG(UseMathExactIntrinsics);
 229 DEFN_PRODUCT_FLAG(UseCharacterCompareIntrinsics);
 230 DEFN_PRODUCT_FLAG(UseMultiplyToLenIntrinsic);
 231 DEFN_PRODUCT_FLAG(UseSquareToLenIntrinsic);
 232 DEFN_PRODUCT_FLAG(UseMulAddIntrinsic);
 233 DEFN_PRODUCT_FLAG(UseMontgomeryMultiplyIntrinsic);
 234 DEFN_PRODUCT_FLAG(UseMontgomerySquareIntrinsic);
 235 DEFN_PRODUCT_FLAG(UseTypeSpeculation);
 236 DEFN_PRODUCT_FLAG(UseInlineDepthForSpeculativeTypes);
 237 DEFN_PRODUCT_FLAG_PD(TrapBasedRangeChecks);
 238 DEFN_PRODUCT_FLAG(ArrayCopyLoadStoreMaxElem); DEFN_PRODUCT_RANGE(ArrayCopyLoadStoreMaxElem);
 239 DEFN_DEVELOP_FLAG(StressArrayCopyMacroNode);
 240 DEFN_DEVELOP_FLAG(RenumberLiveNodes);
 241 DEFN_PRODUCT_FLAG(LoopStripMiningIter); DEFN_PRODUCT_RANGE(LoopStripMiningIter);
 242 DEFN_PRODUCT_FLAG(LoopStripMiningIterShortLoop); DEFN_PRODUCT_RANGE(LoopStripMiningIterShortLoop);
 243 DEFN_PRODUCT_FLAG(UseProfiledLoopPredicate);
 244 DEFN_PRODUCT_FLAG(ExpandSubTypeCheckAtParseTime);