Mon, 02 Nov 2009 11:17:55 +0100
6769124: various 64-bit fixes for c1
Reviewed-by: never
duke@435 | 1 | /* |
duke@435 | 2 | * Copyright 2000-2007 Sun Microsystems, Inc. All Rights Reserved. |
duke@435 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
duke@435 | 4 | * |
duke@435 | 5 | * This code is free software; you can redistribute it and/or modify it |
duke@435 | 6 | * under the terms of the GNU General Public License version 2 only, as |
duke@435 | 7 | * published by the Free Software Foundation. |
duke@435 | 8 | * |
duke@435 | 9 | * This code is distributed in the hope that it will be useful, but WITHOUT |
duke@435 | 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
duke@435 | 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
duke@435 | 12 | * version 2 for more details (a copy is included in the LICENSE file that |
duke@435 | 13 | * accompanied this code). |
duke@435 | 14 | * |
duke@435 | 15 | * You should have received a copy of the GNU General Public License version |
duke@435 | 16 | * 2 along with this work; if not, write to the Free Software Foundation, |
duke@435 | 17 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
duke@435 | 18 | * |
duke@435 | 19 | * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
duke@435 | 20 | * CA 95054 USA or visit www.sun.com if you need additional information or |
duke@435 | 21 | * have any questions. |
duke@435 | 22 | * |
duke@435 | 23 | */ |
duke@435 | 24 | |
duke@435 | 25 | // |
duke@435 | 26 | // Defines all global flags used by the client compiler. |
duke@435 | 27 | // |
duke@435 | 28 | #ifndef TIERED |
duke@435 | 29 | #define NOT_TIERED(x) x |
duke@435 | 30 | #else |
duke@435 | 31 | #define NOT_TIERED(x) |
duke@435 | 32 | #endif |
duke@435 | 33 | |
duke@435 | 34 | #define C1_FLAGS(develop, develop_pd, product, product_pd, notproduct) \ |
duke@435 | 35 | \ |
duke@435 | 36 | /* Printing */ \ |
duke@435 | 37 | notproduct(bool, PrintC1Statistics, false, \ |
duke@435 | 38 | "Print Compiler1 statistics" ) \ |
duke@435 | 39 | \ |
duke@435 | 40 | notproduct(bool, PrintInitialBlockList, false, \ |
duke@435 | 41 | "Print block list of BlockListBuilder") \ |
duke@435 | 42 | \ |
duke@435 | 43 | notproduct(bool, PrintCFG, false, \ |
duke@435 | 44 | "Print control flow graph after each change") \ |
duke@435 | 45 | \ |
duke@435 | 46 | notproduct(bool, PrintCFG0, false, \ |
duke@435 | 47 | "Print control flow graph after construction") \ |
duke@435 | 48 | \ |
duke@435 | 49 | notproduct(bool, PrintCFG1, false, \ |
duke@435 | 50 | "Print control flow graph after optimizations") \ |
duke@435 | 51 | \ |
duke@435 | 52 | notproduct(bool, PrintCFG2, false, \ |
duke@435 | 53 | "Print control flow graph before code generation") \ |
duke@435 | 54 | \ |
duke@435 | 55 | notproduct(bool, PrintIRDuringConstruction, false, \ |
duke@435 | 56 | "Print IR as it's being constructed (helpful for debugging frontend)")\ |
duke@435 | 57 | \ |
duke@435 | 58 | notproduct(bool, PrintPhiFunctions, false, \ |
duke@435 | 59 | "Print phi functions when they are created and simplified") \ |
duke@435 | 60 | \ |
duke@435 | 61 | notproduct(bool, PrintIR, false, \ |
duke@435 | 62 | "Print full intermediate representation after each change") \ |
duke@435 | 63 | \ |
duke@435 | 64 | notproduct(bool, PrintIR0, false, \ |
duke@435 | 65 | "Print full intermediate representation after construction") \ |
duke@435 | 66 | \ |
duke@435 | 67 | notproduct(bool, PrintIR1, false, \ |
duke@435 | 68 | "Print full intermediate representation after optimizations") \ |
duke@435 | 69 | \ |
duke@435 | 70 | notproduct(bool, PrintIR2, false, \ |
duke@435 | 71 | "Print full intermediate representation before code generation") \ |
duke@435 | 72 | \ |
duke@435 | 73 | notproduct(bool, PrintSimpleStubs, false, \ |
duke@435 | 74 | "Print SimpleStubs") \ |
duke@435 | 75 | \ |
duke@435 | 76 | /* C1 optimizations */ \ |
duke@435 | 77 | \ |
duke@435 | 78 | develop(bool, UseC1Optimizations, true, \ |
duke@435 | 79 | "Turn on C1 optimizations") \ |
duke@435 | 80 | \ |
duke@435 | 81 | develop(bool, SelectivePhiFunctions, true, \ |
duke@435 | 82 | "create phi functions at loop headers only when necessary") \ |
duke@435 | 83 | \ |
duke@435 | 84 | develop(bool, DoCEE, true, \ |
duke@435 | 85 | "Do Conditional Expression Elimination to simplify CFG") \ |
duke@435 | 86 | \ |
duke@435 | 87 | develop(bool, PrintCEE, false, \ |
duke@435 | 88 | "Print Conditional Expression Elimination") \ |
duke@435 | 89 | \ |
duke@435 | 90 | develop(bool, UseLocalValueNumbering, true, \ |
duke@435 | 91 | "Use Local Value Numbering (embedded in GraphBuilder)") \ |
duke@435 | 92 | \ |
duke@435 | 93 | develop(bool, UseGlobalValueNumbering, true, \ |
duke@435 | 94 | "Use Global Value Numbering (separate phase)") \ |
duke@435 | 95 | \ |
duke@435 | 96 | develop(bool, PrintValueNumbering, false, \ |
duke@435 | 97 | "Print Value Numbering") \ |
duke@435 | 98 | \ |
duke@435 | 99 | product(intx, ValueMapInitialSize, 11, \ |
duke@435 | 100 | "Initial size of a value map") \ |
duke@435 | 101 | \ |
duke@435 | 102 | product(intx, ValueMapMaxLoopSize, 8, \ |
duke@435 | 103 | "maximum size of a loop optimized by global value numbering") \ |
duke@435 | 104 | \ |
duke@435 | 105 | develop(bool, EliminateBlocks, true, \ |
duke@435 | 106 | "Eliminate unneccessary basic blocks") \ |
duke@435 | 107 | \ |
duke@435 | 108 | develop(bool, PrintBlockElimination, false, \ |
duke@435 | 109 | "Print basic block elimination") \ |
duke@435 | 110 | \ |
duke@435 | 111 | develop(bool, EliminateNullChecks, true, \ |
duke@435 | 112 | "Eliminate unneccessary null checks") \ |
duke@435 | 113 | \ |
duke@435 | 114 | develop(bool, PrintNullCheckElimination, false, \ |
duke@435 | 115 | "Print null check elimination") \ |
duke@435 | 116 | \ |
duke@435 | 117 | develop(bool, EliminateFieldAccess, true, \ |
duke@435 | 118 | "Optimize field loads and stores") \ |
duke@435 | 119 | \ |
duke@435 | 120 | develop(bool, InlineMethodsWithExceptionHandlers, true, \ |
duke@435 | 121 | "Inline methods containing exception handlers " \ |
duke@435 | 122 | "(NOTE: does not work with current backend)") \ |
duke@435 | 123 | \ |
duke@435 | 124 | develop(bool, InlineSynchronizedMethods, true, \ |
duke@435 | 125 | "Inline synchronized methods") \ |
duke@435 | 126 | \ |
duke@435 | 127 | develop(bool, InlineNIOCheckIndex, true, \ |
duke@435 | 128 | "Intrinsify java.nio.Buffer.checkIndex") \ |
duke@435 | 129 | \ |
duke@435 | 130 | develop(bool, CanonicalizeNodes, true, \ |
duke@435 | 131 | "Canonicalize graph nodes") \ |
duke@435 | 132 | \ |
duke@435 | 133 | develop(bool, CanonicalizeExperimental, false, \ |
duke@435 | 134 | "Canonicalize graph nodes, experimental code") \ |
duke@435 | 135 | \ |
duke@435 | 136 | develop(bool, PrintCanonicalization, false, \ |
duke@435 | 137 | "Print graph node canonicalization") \ |
duke@435 | 138 | \ |
duke@435 | 139 | develop(bool, UseTableRanges, true, \ |
duke@435 | 140 | "Faster versions of lookup table using ranges") \ |
duke@435 | 141 | \ |
duke@435 | 142 | develop(bool, UseFastExceptionHandling, true, \ |
duke@435 | 143 | "Faster handling of exceptions") \ |
duke@435 | 144 | \ |
duke@435 | 145 | develop_pd(bool, RoundFPResults, \ |
duke@435 | 146 | "Indicates whether rounding is needed for floating point results")\ |
duke@435 | 147 | \ |
duke@435 | 148 | develop(intx, NestedInliningSizeRatio, 90, \ |
duke@435 | 149 | "Percentage of prev. allowed inline size in recursive inlining") \ |
duke@435 | 150 | \ |
duke@435 | 151 | notproduct(bool, PrintIRWithLIR, false, \ |
duke@435 | 152 | "Print IR instructions with generated LIR") \ |
duke@435 | 153 | \ |
duke@435 | 154 | notproduct(bool, PrintLIRWithAssembly, false, \ |
duke@435 | 155 | "Show LIR instruction with generated assembly") \ |
duke@435 | 156 | \ |
duke@435 | 157 | develop(bool, CommentedAssembly, trueInDebug, \ |
duke@435 | 158 | "Show extra info in PrintNMethods output") \ |
duke@435 | 159 | \ |
duke@435 | 160 | develop(bool, LIRTracePeephole, false, \ |
duke@435 | 161 | "Trace peephole optimizer") \ |
duke@435 | 162 | \ |
duke@435 | 163 | develop(bool, LIRTraceExecution, false, \ |
duke@435 | 164 | "add LIR code which logs the execution of blocks") \ |
duke@435 | 165 | \ |
duke@435 | 166 | product_pd(bool, LIRFillDelaySlots, \ |
duke@435 | 167 | "fill delays on on SPARC with LIR") \ |
duke@435 | 168 | \ |
duke@435 | 169 | develop_pd(bool, CSEArrayLength, \ |
duke@435 | 170 | "Create separate nodes for length in array accesses") \ |
duke@435 | 171 | \ |
duke@435 | 172 | develop_pd(bool, TwoOperandLIRForm, \ |
duke@435 | 173 | "true if LIR requires src1 and dst to match in binary LIR ops") \ |
duke@435 | 174 | \ |
duke@435 | 175 | develop(intx, TraceLinearScanLevel, 0, \ |
duke@435 | 176 | "Debug levels for the linear scan allocator") \ |
duke@435 | 177 | \ |
duke@435 | 178 | develop(bool, StressLinearScan, false, \ |
duke@435 | 179 | "scramble block order used by LinearScan (stress test)") \ |
duke@435 | 180 | \ |
duke@435 | 181 | product(bool, TimeLinearScan, false, \ |
duke@435 | 182 | "detailed timing of LinearScan phases") \ |
duke@435 | 183 | \ |
duke@435 | 184 | develop(bool, TimeEachLinearScan, false, \ |
duke@435 | 185 | "print detailed timing of each LinearScan run") \ |
duke@435 | 186 | \ |
duke@435 | 187 | develop(bool, CountLinearScan, false, \ |
duke@435 | 188 | "collect statistic counters during LinearScan") \ |
duke@435 | 189 | \ |
duke@435 | 190 | /* C1 variable */ \ |
duke@435 | 191 | \ |
duke@435 | 192 | develop(bool, C1Breakpoint, false, \ |
duke@435 | 193 | "Sets a breakpoint at entry of each compiled method") \ |
duke@435 | 194 | \ |
duke@435 | 195 | develop(bool, ImplicitDiv0Checks, true, \ |
duke@435 | 196 | "Use implicit division by zero checks") \ |
duke@435 | 197 | \ |
duke@435 | 198 | develop(bool, PinAllInstructions, false, \ |
duke@435 | 199 | "All instructions are pinned") \ |
duke@435 | 200 | \ |
duke@435 | 201 | develop(bool, ValueStackPinStackAll, true, \ |
duke@435 | 202 | "Pinning in ValueStack pin everything") \ |
duke@435 | 203 | \ |
duke@435 | 204 | develop(bool, UseFastNewInstance, true, \ |
duke@435 | 205 | "Use fast inlined instance allocation") \ |
duke@435 | 206 | \ |
duke@435 | 207 | develop(bool, UseFastNewTypeArray, true, \ |
duke@435 | 208 | "Use fast inlined type array allocation") \ |
duke@435 | 209 | \ |
duke@435 | 210 | develop(bool, UseFastNewObjectArray, true, \ |
duke@435 | 211 | "Use fast inlined object array allocation") \ |
duke@435 | 212 | \ |
duke@435 | 213 | develop(bool, UseFastLocking, true, \ |
duke@435 | 214 | "Use fast inlined locking code") \ |
duke@435 | 215 | \ |
duke@435 | 216 | develop(bool, UseSlowPath, false, \ |
duke@435 | 217 | "For debugging: test slow cases by always using them") \ |
duke@435 | 218 | \ |
duke@435 | 219 | develop(bool, GenerateArrayStoreCheck, true, \ |
duke@435 | 220 | "Generates code for array store checks") \ |
duke@435 | 221 | \ |
duke@435 | 222 | develop(bool, DeoptC1, true, \ |
duke@435 | 223 | "Use deoptimization in C1") \ |
duke@435 | 224 | \ |
duke@435 | 225 | develop(bool, DeoptOnAsyncException, true, \ |
duke@435 | 226 | "Deoptimize upon Thread.stop(); improves precision of IR") \ |
duke@435 | 227 | \ |
duke@435 | 228 | develop(bool, PrintBailouts, false, \ |
duke@435 | 229 | "Print bailout and its reason") \ |
duke@435 | 230 | \ |
duke@435 | 231 | develop(bool, TracePatching, false, \ |
duke@435 | 232 | "Trace patching of field access on uninitialized classes") \ |
duke@435 | 233 | \ |
duke@435 | 234 | develop(bool, PatchALot, false, \ |
duke@435 | 235 | "Marks all fields as having unloaded classes") \ |
duke@435 | 236 | \ |
duke@435 | 237 | develop(bool, PrintNotLoaded, false, \ |
duke@435 | 238 | "Prints where classes are not loaded during code generation") \ |
duke@435 | 239 | \ |
duke@435 | 240 | notproduct(bool, VerifyOopMaps, false, \ |
duke@435 | 241 | "Adds oopmap verification code to the generated code") \ |
duke@435 | 242 | \ |
duke@435 | 243 | develop(bool, PrintLIR, false, \ |
duke@435 | 244 | "print low-level IR") \ |
duke@435 | 245 | \ |
duke@435 | 246 | develop(bool, BailoutAfterHIR, false, \ |
duke@435 | 247 | "bailout of compilation after building of HIR") \ |
duke@435 | 248 | \ |
duke@435 | 249 | develop(bool, BailoutAfterLIR, false, \ |
duke@435 | 250 | "bailout of compilation after building of LIR") \ |
duke@435 | 251 | \ |
duke@435 | 252 | develop(bool, BailoutOnExceptionHandlers, false, \ |
duke@435 | 253 | "bailout of compilation for methods with exception handlers") \ |
duke@435 | 254 | \ |
duke@435 | 255 | develop(bool, AlwaysEmitDebugInfo, false, \ |
duke@435 | 256 | "always emit debug info") \ |
duke@435 | 257 | \ |
duke@435 | 258 | develop(bool, InstallMethods, true, \ |
duke@435 | 259 | "Install methods at the end of successful compilations") \ |
duke@435 | 260 | \ |
duke@435 | 261 | product(intx, CompilationRepeat, 0, \ |
duke@435 | 262 | "Number of times to recompile method before returning result") \ |
duke@435 | 263 | \ |
duke@435 | 264 | develop(intx, NMethodSizeLimit, (32*K)*wordSize, \ |
duke@435 | 265 | "Maximum size of a compiled method.") \ |
duke@435 | 266 | \ |
duke@435 | 267 | develop(bool, TraceFPUStack, false, \ |
duke@435 | 268 | "Trace emulation of the FPU stack (intel only)") \ |
duke@435 | 269 | \ |
duke@435 | 270 | develop(bool, TraceFPURegisterUsage, false, \ |
duke@435 | 271 | "Trace usage of FPU registers at start of blocks (intel only)") \ |
duke@435 | 272 | \ |
duke@435 | 273 | develop(bool, OptimizeUnsafes, true, \ |
duke@435 | 274 | "Optimize raw unsafe ops") \ |
duke@435 | 275 | \ |
duke@435 | 276 | develop(bool, PrintUnsafeOptimization, false, \ |
duke@435 | 277 | "Print optimization of raw unsafe ops") \ |
duke@435 | 278 | \ |
duke@435 | 279 | develop(intx, InstructionCountCutoff, 37000, \ |
duke@435 | 280 | "If GraphBuilder adds this many instructions, bails out") \ |
duke@435 | 281 | \ |
duke@435 | 282 | product_pd(intx, SafepointPollOffset, \ |
duke@435 | 283 | "Offset added to polling address (Intel only)") \ |
duke@435 | 284 | \ |
duke@435 | 285 | product(bool, UseNewFeature1, false, \ |
duke@435 | 286 | "Enable new feature for testing. This is a dummy flag.") \ |
duke@435 | 287 | \ |
duke@435 | 288 | product(bool, UseNewFeature2, false, \ |
duke@435 | 289 | "Enable new feature for testing. This is a dummy flag.") \ |
duke@435 | 290 | \ |
duke@435 | 291 | product(bool, UseNewFeature3, false, \ |
duke@435 | 292 | "Enable new feature for testing. This is a dummy flag.") \ |
duke@435 | 293 | \ |
duke@435 | 294 | product(bool, UseNewFeature4, false, \ |
duke@435 | 295 | "Enable new feature for testing. This is a dummy flag.") \ |
duke@435 | 296 | \ |
duke@435 | 297 | develop(bool, ComputeExactFPURegisterUsage, true, \ |
duke@435 | 298 | "Compute additional live set for fpu registers to simplify fpu stack merge (Intel only)") \ |
duke@435 | 299 | \ |
duke@435 | 300 | product(bool, Tier1ProfileCalls, true, \ |
duke@435 | 301 | "Profile calls when generating code for updating MDOs") \ |
duke@435 | 302 | \ |
duke@435 | 303 | product(bool, Tier1ProfileVirtualCalls, true, \ |
duke@435 | 304 | "Profile virtual calls when generating code for updating MDOs") \ |
duke@435 | 305 | \ |
duke@435 | 306 | product(bool, Tier1ProfileInlinedCalls, true, \ |
duke@435 | 307 | "Profile inlined calls when generating code for updating MDOs") \ |
duke@435 | 308 | \ |
duke@435 | 309 | product(bool, Tier1ProfileBranches, true, \ |
duke@435 | 310 | "Profile branches when generating code for updating MDOs") \ |
duke@435 | 311 | \ |
duke@435 | 312 | product(bool, Tier1ProfileCheckcasts, true, \ |
duke@435 | 313 | "Profile checkcasts when generating code for updating MDOs") \ |
duke@435 | 314 | \ |
duke@435 | 315 | product(bool, Tier1OptimizeVirtualCallProfiling, true, \ |
duke@435 | 316 | "Use CHA and exact type results at call sites when updating MDOs") \ |
duke@435 | 317 | \ |
duke@435 | 318 | develop(bool, Tier1CountOnly, false, \ |
duke@435 | 319 | "Don't schedule tier 2 compiles. Enter VM only") \ |
duke@435 | 320 | \ |
duke@435 | 321 | develop(bool, PrintCFGToFile, false, \ |
duke@435 | 322 | "print control flow graph to a separate file during compilation") \ |
duke@435 | 323 | \ |
duke@435 | 324 | |
duke@435 | 325 | |
duke@435 | 326 | // Read default values for c1 globals |
duke@435 | 327 | // #include "incls/_c1_globals_pd.hpp.incl" |
duke@435 | 328 | |
duke@435 | 329 | C1_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_NOTPRODUCT_FLAG) |