001 /*
002 * This file is part of the Jikes RVM project (http://jikesrvm.org).
003 *
004 * This file is licensed to You under the Eclipse Public License (EPL);
005 * You may not use this file except in compliance with the License. You
006 * may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/eclipse-1.0.php
009 *
010 * See the COPYRIGHT.txt file distributed with this work for information
011 * regarding copyright ownership.
012 */
013 package org.jikesrvm.compilers.opt;
014
015 import org.jikesrvm.*;
016
017 /**
018 * Class to handle command-line arguments and options for the
019 * optimizng compiler.
020 * <p>
021 * Note: This file is mechanically generated from OptOptions.template
022 * and MasterOptions.template
023 * <p>
024 * Note: Boolean options are defined in /home/dgrove/rvm-trunk/rvm/src-generated/options/BooleanOptions.opt.dat /home/dgrove/rvm-trunk/rvm/src-generated/options/SharedBooleanOptions.dat
025 * All other options are defined in /home/dgrove/rvm-trunk/rvm/src-generated/options/ValueOptions.opt.dat /home/dgrove/rvm-trunk/rvm/src-generated/options/SharedValueOptions.dat
026 * (value, enumeration, bitmask)
027 *
028 **/
029 public class OptOptions implements Cloneable {
030
031 // Non-template instance fields that we don't want
032 // available on the command-line)
033 private int OPTIMIZATION_LEVEL = 1; // The OPT level
034
035 private void printOptionsHeader() {
036 VM.sysWrite("Current value of options at optimization level ",OPTIMIZATION_LEVEL, ":\n");
037 }
038
039 // BEGIN CODE GENERATED FROM MasterOptions.template
040 /*
041 * This file is part of the Jikes RVM project (http://jikesrvm.org).
042 *
043 * This file is licensed to You under the Eclipse Public License (EPL);
044 * You may not use this file except in compliance with the License. You
045 * may obtain a copy of the License at
046 *
047 * http://www.opensource.org/licenses/eclipse-1.0.php
048 *
049 * See the COPYRIGHT.txt file distributed with this work for information
050 * regarding copyright ownership.
051 */
052 // Begin template-specified options
053 /** Focus compilation effort based on frequency profile data */
054 public boolean FREQ_FOCUS_EFFORT = false;
055 /** Should we constrain optimizations by enforcing reads-kill? */
056 public boolean READS_KILL = false;
057 /** Eagerly compute method summaries for flow-insensitive field analysis */
058 public boolean FIELD_ANALYSIS = true;
059 /** Inline statically resolvable calls */
060 public boolean INLINE = true;
061 /** Guarded inlining of non-final virtual calls */
062 public boolean INLINE_GUARDED = true;
063 /** Speculatively inline non-final interface calls */
064 public boolean INLINE_GUARDED_INTERFACES = true;
065 /** Pre-existence based inlining */
066 public boolean INLINE_PREEX = true;
067 /** Simplify operations on integers */
068 public boolean SIMPLIFY_INTEGER_OPS = true;
069 /** Simplify operations on longs */
070 public boolean SIMPLIFY_LONG_OPS = true;
071 /** Simplify operations on floats */
072 public boolean SIMPLIFY_FLOAT_OPS = true;
073 /** Simplify operations on floats */
074 public boolean SIMPLIFY_DOUBLE_OPS = true;
075 /** Simplify operations on references */
076 public boolean SIMPLIFY_REF_OPS = true;
077 /** Simplify operations on TIBs */
078 public boolean SIMPLIFY_TIB_OPS = true;
079 /** Simplify operations on fields */
080 public boolean SIMPLIFY_FIELD_OPS = true;
081 /** Chase final fields avoiding loads at runtime */
082 public boolean SIMPLIFY_CHASE_FINAL_FIELDS = true;
083 /** Perform local constant propagation */
084 public boolean LOCAL_CONSTANT_PROP = true;
085 /** Perform local copy propagation */
086 public boolean LOCAL_COPY_PROP = true;
087 /** Perform local common subexpression elimination */
088 public boolean LOCAL_CSE = true;
089 /** Should we try to fold expressions with constants locally? */
090 public boolean LOCAL_EXPRESSION_FOLDING = false;
091 /** CFG splitting to create hot traces based on static heuristics */
092 public boolean CONTROL_STATIC_SPLITTING = true;
093 /** Turn whiles into untils */
094 public boolean CONTROL_TURN_WHILES_INTO_UNTILS= false;
095 /** Eagerly compute method summaries for simple escape analysis */
096 public boolean ESCAPE_SIMPLE_IPA = false;
097 /** If possible turn aggregates (objects) into variable definition/uses */
098 public boolean ESCAPE_SCALAR_REPLACE_AGGREGATES= true;
099 /** Try to remove unnecessary monitor operations */
100 public boolean ESCAPE_MONITOR_REMOVAL = true;
101 /** Compile the method assuming the invokee is thread-local. Cannot be properly set on command line. */
102 public boolean ESCAPE_INVOKEE_THREAD_LOCAL = false;
103 /** Should SSA form be constructed on the HIR? */
104 public boolean SSA = false;
105 /** Should we try to fold expressions with constants in SSA form? */
106 public boolean SSA_EXPRESSION_FOLDING = false;
107 /** Eliminate redundant conditional branches */
108 public boolean SSA_REDUNDANT_BRANCH_ELIMINATION= true;
109 /** Assume PEIs do not throw or state is not observable */
110 public boolean SSA_LICM_IGNORE_PEI = false;
111 /** Should we perform redundant load elimination during SSA pass? */
112 public boolean SSA_LOAD_ELIMINATION = false;
113 /** Should we coalesce move instructions after leaving SSA? */
114 public boolean SSA_COALESCE_AFTER = false;
115 /** Create copies of loops where runtime exceptions are checked prior to entry */
116 public boolean SSA_LOOP_VERSIONING = false;
117 /** Split live ranges using LIR SSA pass? */
118 public boolean SSA_LIVE_RANGE_SPLITTING = false;
119 /** Perform global code placement */
120 public boolean SSA_GCP = false;
121 /** Perform global code placement */
122 public boolean SSA_GCSE = false;
123 /** Perform (incomplete/unsafe) global Array Bound Check elimination on Demand */
124 public boolean SSA_GLOBAL_BOUNDS_CHECK = false;
125 /** When leaving SSA create blocks to avoid renaming variables */
126 public boolean SSA_SPLITBLOCK_TO_AVOID_RENAME= false;
127 /** When leaving SSA create blocks for local liveness */
128 public boolean SSA_SPLITBLOCK_FOR_LOCAL_LIVE = true;
129 /** When leaving SSA create blocks to avoid adding code to frequently executed blocks */
130 public boolean SSA_SPLITBLOCK_INTO_INFREQUENT= true;
131 /** Reorder basic blocks for improved locality and branch prediction */
132 public boolean REORDER_CODE = true;
133 /** Reorder basic blocks using Pettis and Hansen Algo2 */
134 public boolean REORDER_CODE_PH = true;
135 /** Inline allocation of scalars and arrays */
136 public boolean H2L_INLINE_NEW = true;
137 /** Inline write barriers for generational collectors */
138 public boolean H2L_INLINE_WRITE_BARRIER = true;
139 /** Inline primitive write barriers for certain collectors */
140 public boolean H2L_INLINE_PRIMITIVE_WRITE_BARRIER= true;
141 /** Assert that any callee of this compiled method will not throw exceptions. Cannot be properly set on command line. */
142 public boolean H2L_NO_CALLEE_EXCEPTIONS = false;
143 /** Plant virtual calls via the JTOC rather than from the tib of anobject when possible */
144 public boolean H2L_CALL_VIA_JTOC = false;
145 /** Store liveness for handlers to improve dependence graph at PEIs */
146 public boolean L2M_HANDLER_LIVENESS = false;
147 /** Perform prepass instruction scheduling */
148 public boolean L2M_SCHEDULE_PREPASS = false;
149 /** Attempt to coalesce to eliminate register moves? */
150 public boolean REGALLOC_COALESCE_MOVES = true;
151 /** Attempt to coalesce stack locations? */
152 public boolean REGALLOC_COALESCE_SPILLS = true;
153 /** Perform code transformation to sample instrumentation code. */
154 public boolean ADAPTIVE_INSTRUMENTATION_SAMPLING= false;
155 /** When performing inst. sampling, should it be done without duplicating code? */
156 public boolean ADAPTIVE_NO_DUPLICATION = false;
157 /** Should there be one CBS counter per processor for SMP performance? */
158 public boolean ADAPTIVE_PROCESSOR_SPECIFIC_COUNTER= true;
159 /** Should yieldpoints be removed from the checking code (requires finite sample interval) */
160 public boolean ADAPTIVE_REMOVE_YP_FROM_CHECKING= false;
161 /** Insert OSR point at off branch of guarded inlining? */
162 public boolean OSR_GUARDED_INLINING = true;
163 /** Use OSR knowledge to drive more aggressive inlining? */
164 public boolean OSR_INLINE_POLICY = true;
165 /** Print out compile-time statistics for basic blocks? */
166 public boolean PRINT_STATIC_STATS = false;
167 /** Print short message for each compilation phase */
168 public boolean PRINT_PHASES = false;
169 /** Dump the IR after each compiler phase */
170 public boolean PRINT_ALL_IR = false;
171 /** Print detailed report of compile-time inlining decisions */
172 public boolean PRINT_DETAILED_INLINE_REPORT = false;
173 /** Print detailed report of compile-time inlining decisions */
174 public boolean PRINT_INLINE_REPORT = false;
175 /** Print dominators */
176 public boolean PRINT_DOMINATORS = false;
177 /** Print post-dominators */
178 public boolean PRINT_POST_DOMINATORS = false;
179 /** Print SSA form */
180 public boolean PRINT_SSA = false;
181 /** Print dependence graph before burs */
182 public boolean PRINT_DG_BURS = false;
183 /** Print dependence graph before prepass scheduling */
184 public boolean PRINT_DG_SCHED_PRE = false;
185 /** Print dependence graph before postpass scheduling */
186 public boolean PRINT_DG_SCHED_POST = false;
187 /** Print coalescing output */
188 public boolean PRINT_COALESCING = false;
189 /** Print IR after initial generation */
190 public boolean PRINT_HIGH = false;
191 /** Print IR just before conversion to LIR */
192 public boolean PRINT_FINAL_HIR = false;
193 /** Print IR after conversion to LIR */
194 public boolean PRINT_LOW = false;
195 /** Print IR just before conversion to MIR */
196 public boolean PRINT_FINAL_LIR = false;
197 /** Print IR after conversion to MIR */
198 public boolean PRINT_MIR = false;
199 /** Print IR just before conversion to machine code */
200 public boolean PRINT_FINAL_MIR = false;
201 /** Print control flow graph too when IR is printed */
202 public boolean PRINT_CFG = false;
203 /** Print IR after prepass scheduling */
204 public boolean PRINT_SCHEDULE_PRE = false;
205 /** Print IR after postpass scheduling */
206 public boolean PRINT_SCHEDULE_POST = false;
207 /** Print IR before and after register allocation */
208 public boolean PRINT_REGALLOC = false;
209 /** Print IR after expanding calling conventions */
210 public boolean PRINT_CALLING_CONVENTIONS = false;
211 /** Print the garbage collection maps */
212 public boolean PRINT_GC_MAPS = false;
213 /** Enable debugging support for final assembly */
214 public boolean DEBUG_CODEGEN = false;
215 /** Enable debugging statements for instrumentation sampling */
216 public boolean DEBUG_INSTRU_SAMPLING = false;
217 /** Enable detailed debugging statements for instrumentation sampling */
218 public boolean DEBUG_INSTRU_SAMPLING_DETAIL = false;
219 /** Perform noisy global code placement */
220 public boolean DEBUG_GCP = false;
221 /** Print method name at start of compilation */
222 public boolean PRINT_METHOD = false;
223 /** Print final machine code */
224 public boolean PRINT_MACHINECODE = false;
225 /** Exclude methods from being opt compiled */
226 private java.util.HashSet<String> DRIVER_EXCLUDE = null;
227 /** Only print IR compiled above this level */
228 public int PRINT_IR_LEVEL = 0;
229 /** Input file of edge counter profile data */
230 public String PROFILE_EDGE_COUNT_INPUT_FILE = null;
231 /** How to compute block and edge frequencies? */
232 public byte PROFILE_FREQUENCY_STRATEGY = PROFILE_COUNTERS_FREQ;
233 /** Cumulative threshold which defines the set of infrequent basic blocks */
234 public float PROFILE_INFREQUENT_THRESHOLD = 0.01f;
235 /** Threshold at which a conditional branch is considered to be skewed */
236 public double PROFILE_CBS_HOTNESS = 0.98;
237 /** Maximum size of array to replaced with registers by simple escape analysis */
238 public int ESCAPE_MAX_ARRAY_SIZE = 5;
239 /** How many rounds of redundant load elimination will we attempt? */
240 public int SSA_LOAD_ELIMINATION_ROUNDS = 3;
241 /** Maximum size of block for BURS, larger blocks are split */
242 public int L2M_MAX_BLOCK_SIZE = 300;
243 /** Selection of spilling heuristic */
244 public byte REGALLOC_SPILL_COST_ESTIMATE = REGALLOC_BLOCK_COUNT_SPILL_COST;
245 /** spill penalty for move instructions */
246 public double REGALLOC_SIMPLE_SPILL_COST_MOVE_FACTOR= 1.0;
247 /** spill penalty for registers used in memory operands */
248 public double REGALLOC_SIMPLE_SPILL_COST_MEMORY_OPERAND_FACTOR= 5.0;
249 /** If a tableswitch comprises this many or fewer comparisons convert it into multiple if-then-else style branches */
250 public int CONTROL_TABLESWITCH_CUTOFF = 8;
251 /** How many extra instructions will we insert in order to remove a conditional branch? */
252 public int CONTROL_COND_MOVE_CUTOFF = 5;
253 /** Unroll loops. Duplicates the loop body 2^n times. */
254 public int CONTROL_UNROLL_LOG = 2;
255 /** Upper bound on the number of instructions duplicated per block when trying to create hot traces with static splitting */
256 public int CONTROL_STATIC_SPLITTING_MAX_COST = 10;
257 /** Don't replace branches with conditional moves if they are outside of the range of 0.5 +- this value */
258 public double CONTROL_WELL_PREDICTED_CUTOFF = 1/6;
259 /** Static inlining heuristic: Upper bound on callee size */
260 public int INLINE_MAX_TARGET_SIZE = (4*org.jikesrvm.classloader.NormalMethod.CALL_COST-org.jikesrvm.classloader.NormalMethod.SIMPLE_OPERATION_COST);
261 /** Static inlining heuristic: Upper bound on depth of inlining */
262 public int INLINE_MAX_INLINE_DEPTH = 5;
263 /** Static inlining heuristic: Always inline callees of this size or smaller */
264 public int INLINE_MAX_ALWAYS_INLINE_TARGET_SIZE= (2*org.jikesrvm.classloader.NormalMethod.CALL_COST-org.jikesrvm.classloader.NormalMethod.SIMPLE_OPERATION_COST);
265 /** Static inlining heuristic: If root method is already this big, then only inline trivial methods */
266 public int INLINE_MASSIVE_METHOD_SIZE = 2048;
267 /** Maximum bonus for reducing the perceived size of a method during inlining. */
268 public double INLINE_MAX_ARG_BONUS = 0.40;
269 /** Bonus given to inlining methods that are passed a register of a known precise type. */
270 public double INLINE_PRECISE_REG_ARRAY_ARG_BONUS= 0.05;
271 /** Bonus given when there's potential to optimize checkstore portion of aastore bytecode on parameter */
272 public double INLINE_DECLARED_AASTORED_ARRAY_ARG_BONUS= 0.02;
273 /** Bonus given to inlining methods that are passed a register of a known precise type. */
274 public double INLINE_PRECISE_REG_CLASS_ARG_BONUS= 0.15;
275 /** Bonus given to inlining methods that are passed a register that's known not to be null. */
276 public double INLINE_EXTANT_REG_CLASS_ARG_BONUS= 0.05;
277 /** Bonus given to inlining methods that are passed an int constant argument */
278 public double INLINE_INT_CONST_ARG_BONUS = 0.05;
279 /** Bonus given to inlining methods that are passed a null constant argument */
280 public double INLINE_NULL_CONST_ARG_BONUS = 0.10;
281 /** Bonus given to inlining methods that are passed an object constant argument */
282 public double INLINE_OBJECT_CONST_ARG_BONUS = 0.10;
283 /** As we inline deeper nested methods what cost (or bonus) do we wish to give to deter (or encourage) nesting of deeper methods? */
284 public double INLINE_CALL_DEPTH_COST = 0.00;
285 /** Adaptive inlining heuristic: Upper bound on callee size */
286 public int INLINE_AI_MAX_TARGET_SIZE = (20*org.jikesrvm.classloader.NormalMethod.CALL_COST-org.jikesrvm.classloader.NormalMethod.SIMPLE_OPERATION_COST);
287 /** Adaptive inlining heuristc: Minimum fraction of callsite distribution for guarded inlining of a callee */
288 public double INLINE_AI_MIN_CALLSITE_FRACTION= 0.4;
289 /** Selection of guard mechanism for inlined virtual calls that cannot be statically bound */
290 public byte INLINE_GUARD_KIND = INLINE_GUARD_CODE_PATCH;
291 /** Only apply print options against methods whose name contains this string */
292 private java.util.HashSet<String> METHOD_TO_PRINT = null;
293 // End template-specified options
294
295 // Begin generated support for "Enumeration" options
296 // PROFILE_FREQUENCY_STRATEGY
297 public static final byte PROFILE_COUNTERS_FREQ = 0;
298 /**
299 * Is PROFILE_FREQUENCY_STRATEGY set to PROFILE_COUNTERS_FREQ?
300 */
301 public final boolean frequencyCounters() {
302 return PROFILE_FREQUENCY_STRATEGY == PROFILE_COUNTERS_FREQ;
303 }
304 public static final byte PROFILE_STATIC_FREQ = 1;
305 /**
306 * Is PROFILE_FREQUENCY_STRATEGY set to PROFILE_STATIC_FREQ?
307 */
308 public final boolean staticFrequencyEstimates() {
309 return PROFILE_FREQUENCY_STRATEGY == PROFILE_STATIC_FREQ;
310 }
311 public static final byte PROFILE_DUMB_FREQ = 2;
312 /**
313 * Is PROFILE_FREQUENCY_STRATEGY set to PROFILE_DUMB_FREQ?
314 */
315 public final boolean dumbFrequency() {
316 return PROFILE_FREQUENCY_STRATEGY == PROFILE_DUMB_FREQ;
317 }
318 public static final byte PROFILE_INVERSE_COUNTERS_FREQ = 3;
319 /**
320 * Is PROFILE_FREQUENCY_STRATEGY set to PROFILE_INVERSE_COUNTERS_FREQ?
321 */
322 public final boolean inverseFrequencyCounters() {
323 return PROFILE_FREQUENCY_STRATEGY == PROFILE_INVERSE_COUNTERS_FREQ;
324 }
325
326 // REGALLOC_SPILL_COST_ESTIMATE
327 public static final byte REGALLOC_SIMPLE_SPILL_COST = 0;
328 /**
329 * Is REGALLOC_SPILL_COST_ESTIMATE set to REGALLOC_SIMPLE_SPILL_COST?
330 */
331 public final boolean simpleSpillCost() {
332 return REGALLOC_SPILL_COST_ESTIMATE == REGALLOC_SIMPLE_SPILL_COST;
333 }
334 public static final byte REGALLOC_BRAINDEAD_SPILL_COST = 1;
335 /**
336 * Is REGALLOC_SPILL_COST_ESTIMATE set to REGALLOC_BRAINDEAD_SPILL_COST?
337 */
338 public final boolean brainDeadSpillCost() {
339 return REGALLOC_SPILL_COST_ESTIMATE == REGALLOC_BRAINDEAD_SPILL_COST;
340 }
341 public static final byte REGALLOC_BLOCK_COUNT_SPILL_COST = 2;
342 /**
343 * Is REGALLOC_SPILL_COST_ESTIMATE set to REGALLOC_BLOCK_COUNT_SPILL_COST?
344 */
345 public final boolean blockCountSpillCost() {
346 return REGALLOC_SPILL_COST_ESTIMATE == REGALLOC_BLOCK_COUNT_SPILL_COST;
347 }
348
349 // INLINE_GUARD_KIND
350 public static final byte INLINE_GUARD_METHOD_TEST = 0;
351 /**
352 * Is INLINE_GUARD_KIND set to INLINE_GUARD_METHOD_TEST?
353 */
354 public final boolean guardWithMethodTest() {
355 return INLINE_GUARD_KIND == INLINE_GUARD_METHOD_TEST;
356 }
357 public static final byte INLINE_GUARD_CLASS_TEST = 1;
358 /**
359 * Is INLINE_GUARD_KIND set to INLINE_GUARD_CLASS_TEST?
360 */
361 public final boolean guardWithClassTest() {
362 return INLINE_GUARD_KIND == INLINE_GUARD_CLASS_TEST;
363 }
364 public static final byte INLINE_GUARD_CODE_PATCH = 2;
365 /**
366 * Is INLINE_GUARD_KIND set to INLINE_GUARD_CODE_PATCH?
367 */
368 public final boolean guardWithCodePatch() {
369 return INLINE_GUARD_KIND == INLINE_GUARD_CODE_PATCH;
370 }
371
372 // End generated support for "Enumeration" options
373
374 // Begin generated support for "Set" options
375 // DRIVER_EXCLUDE
376 /**
377 * Has the given parameter been added to DRIVER_EXCLUDE set of options?
378 */
379 public boolean isDRIVER_EXCLUDE(String q) {
380 return DRIVER_EXCLUDE != null && DRIVER_EXCLUDE.contains(q);
381 }
382 /**
383 * Does the given parameter appear within a set the String of one of the options?
384 */
385 public boolean fuzzyMatchDRIVER_EXCLUDE(String q) {
386 if (DRIVER_EXCLUDE != null) {
387 for (final String s : DRIVER_EXCLUDE) {
388 if (q.indexOf(s) > -1)
389 return true;
390 }
391 }
392 return false;
393 }
394 /**
395 * Have any items been placed in the set DRIVER_EXCLUDE?
396 */
397 public boolean hasDRIVER_EXCLUDE() {
398 return DRIVER_EXCLUDE != null && !DRIVER_EXCLUDE.isEmpty();
399 }
400 /**
401 * Return an iterator over the items in DRIVER_EXCLUDE
402 */
403 public java.util.Iterator<String> getDRIVER_EXCLUDEs() {
404 if (DRIVER_EXCLUDE == null) {
405 return new org.jikesrvm.util.EmptyIterator<String>();
406 } else {
407 return DRIVER_EXCLUDE.iterator();
408 }
409 }
410 // METHOD_TO_PRINT
411 /**
412 * Has the given parameter been added to METHOD_TO_PRINT set of options?
413 */
414 public boolean isMETHOD_TO_PRINT(String q) {
415 return METHOD_TO_PRINT != null && METHOD_TO_PRINT.contains(q);
416 }
417 /**
418 * Does the given parameter appear within a set the String of one of the options?
419 */
420 public boolean fuzzyMatchMETHOD_TO_PRINT(String q) {
421 if (METHOD_TO_PRINT != null) {
422 for (final String s : METHOD_TO_PRINT) {
423 if (q.indexOf(s) > -1)
424 return true;
425 }
426 }
427 return false;
428 }
429 /**
430 * Have any items been placed in the set METHOD_TO_PRINT?
431 */
432 public boolean hasMETHOD_TO_PRINT() {
433 return METHOD_TO_PRINT != null && !METHOD_TO_PRINT.isEmpty();
434 }
435 /**
436 * Return an iterator over the items in METHOD_TO_PRINT
437 */
438 public java.util.Iterator<String> getMETHOD_TO_PRINTs() {
439 if (METHOD_TO_PRINT == null) {
440 return new org.jikesrvm.util.EmptyIterator<String>();
441 } else {
442 return METHOD_TO_PRINT.iterator();
443 }
444 }
445 // End generated support for "Set" options
446
447
448 @SuppressWarnings("unchecked")
449 public Object clone() throws CloneNotSupportedException {
450 OptOptions clone = (OptOptions)super.clone();
451 if (DRIVER_EXCLUDE != null) {
452 clone.DRIVER_EXCLUDE = (java.util.HashSet<String>)this.DRIVER_EXCLUDE.clone();
453 }
454 if (METHOD_TO_PRINT != null) {
455 clone.METHOD_TO_PRINT = (java.util.HashSet<String>)this.METHOD_TO_PRINT.clone();
456 }
457 return clone;
458 }
459
460 public OptOptions dup() {
461 try {
462 return (OptOptions) clone();
463 }
464 catch (CloneNotSupportedException e) {
465 final InternalError error = new InternalError("Unexpected CloneNotSupportedException.");
466 error.initCause(e);
467 throw error;
468 }
469 }
470
471 /**
472 * Take a string (most likely a command-line argument) and try to proccess it
473 * as an option command. Return true if the string was understood, false
474 * otherwise.
475 *
476 * @param prefix a Sring to use as a command prefix when printing help.
477 * @param arg a String to try to process as an option command
478 * @return true if successful, false otherwise
479 */
480 @org.vmmagic.pragma.NoOptCompile
481 public boolean processAsOption(String prefix, String arg) {
482
483 // First handle the "option commands"
484 if (arg.equals("help")) {
485 printHelp(prefix);
486 return true;
487 }
488 if (arg.equals("printOptions")) {
489 printOptions();
490 return true;
491 }
492 if (arg.length() == 0) {
493 printHelp(prefix);
494 return true;
495 }
496 // Make sure only process O? option if initial runtime compiler!
497 if ((prefix.indexOf("irc")!=-1 ||
498 prefix.indexOf("bc")!=-1 ||
499 prefix.indexOf("eoc")!=-1) &&
500 instanceProcessAsOption(arg)) {
501 return true;
502 }
503
504 // Required format of arg is 'name=value'
505 // Split into 'name' and 'value' strings
506 int split = arg.indexOf('=');
507 if (split == -1) {
508 if (!(arg.equals("O0") || arg.equals("O1") || arg.equals("O2") || arg.equals("O3"))) {
509 VM.sysWrite(" Illegal option specification!\n \""+arg+
510 "\" must be specified as a name-value pair in the form of option=value\n");
511 }
512 return false;
513 }
514 String name = arg.substring(0,split);
515 String value = arg.substring(split+1);
516
517 //Begin generated command-line processing
518 if (name.equals("focus_effort")) {
519 if (value.equals("true")) {
520 FREQ_FOCUS_EFFORT = true;
521 return true;
522 } else if (value.equals("false")) {
523 FREQ_FOCUS_EFFORT = false;
524 return true;
525 } else
526 return false;
527 }
528 if (name.equals("reads_kill")) {
529 if (value.equals("true")) {
530 READS_KILL = true;
531 return true;
532 } else if (value.equals("false")) {
533 READS_KILL = false;
534 return true;
535 } else
536 return false;
537 }
538 if (name.equals("field_analysis")) {
539 if (value.equals("true")) {
540 FIELD_ANALYSIS = true;
541 return true;
542 } else if (value.equals("false")) {
543 FIELD_ANALYSIS = false;
544 return true;
545 } else
546 return false;
547 }
548 if (name.equals("inline")) {
549 if (value.equals("true")) {
550 INLINE = true;
551 return true;
552 } else if (value.equals("false")) {
553 INLINE = false;
554 return true;
555 } else
556 return false;
557 }
558 if (name.equals("inline_guarded")) {
559 if (value.equals("true")) {
560 INLINE_GUARDED = true;
561 return true;
562 } else if (value.equals("false")) {
563 INLINE_GUARDED = false;
564 return true;
565 } else
566 return false;
567 }
568 if (name.equals("inline_guarded_interfaces")) {
569 if (value.equals("true")) {
570 INLINE_GUARDED_INTERFACES = true;
571 return true;
572 } else if (value.equals("false")) {
573 INLINE_GUARDED_INTERFACES = false;
574 return true;
575 } else
576 return false;
577 }
578 if (name.equals("inline_preex")) {
579 if (value.equals("true")) {
580 INLINE_PREEX = true;
581 return true;
582 } else if (value.equals("false")) {
583 INLINE_PREEX = false;
584 return true;
585 } else
586 return false;
587 }
588 if (name.equals("simplify_integer_ops")) {
589 if (value.equals("true")) {
590 SIMPLIFY_INTEGER_OPS = true;
591 return true;
592 } else if (value.equals("false")) {
593 SIMPLIFY_INTEGER_OPS = false;
594 return true;
595 } else
596 return false;
597 }
598 if (name.equals("simplify_long_ops")) {
599 if (value.equals("true")) {
600 SIMPLIFY_LONG_OPS = true;
601 return true;
602 } else if (value.equals("false")) {
603 SIMPLIFY_LONG_OPS = false;
604 return true;
605 } else
606 return false;
607 }
608 if (name.equals("simplify_float_ops")) {
609 if (value.equals("true")) {
610 SIMPLIFY_FLOAT_OPS = true;
611 return true;
612 } else if (value.equals("false")) {
613 SIMPLIFY_FLOAT_OPS = false;
614 return true;
615 } else
616 return false;
617 }
618 if (name.equals("simplify_double_ops")) {
619 if (value.equals("true")) {
620 SIMPLIFY_DOUBLE_OPS = true;
621 return true;
622 } else if (value.equals("false")) {
623 SIMPLIFY_DOUBLE_OPS = false;
624 return true;
625 } else
626 return false;
627 }
628 if (name.equals("simplify_ref_ops")) {
629 if (value.equals("true")) {
630 SIMPLIFY_REF_OPS = true;
631 return true;
632 } else if (value.equals("false")) {
633 SIMPLIFY_REF_OPS = false;
634 return true;
635 } else
636 return false;
637 }
638 if (name.equals("simplify_tib_ops")) {
639 if (value.equals("true")) {
640 SIMPLIFY_TIB_OPS = true;
641 return true;
642 } else if (value.equals("false")) {
643 SIMPLIFY_TIB_OPS = false;
644 return true;
645 } else
646 return false;
647 }
648 if (name.equals("simplify_field_ops")) {
649 if (value.equals("true")) {
650 SIMPLIFY_FIELD_OPS = true;
651 return true;
652 } else if (value.equals("false")) {
653 SIMPLIFY_FIELD_OPS = false;
654 return true;
655 } else
656 return false;
657 }
658 if (name.equals("simplify_chase_final_fields")) {
659 if (value.equals("true")) {
660 SIMPLIFY_CHASE_FINAL_FIELDS = true;
661 return true;
662 } else if (value.equals("false")) {
663 SIMPLIFY_CHASE_FINAL_FIELDS = false;
664 return true;
665 } else
666 return false;
667 }
668 if (name.equals("local_constant_prop")) {
669 if (value.equals("true")) {
670 LOCAL_CONSTANT_PROP = true;
671 return true;
672 } else if (value.equals("false")) {
673 LOCAL_CONSTANT_PROP = false;
674 return true;
675 } else
676 return false;
677 }
678 if (name.equals("local_copy_prop")) {
679 if (value.equals("true")) {
680 LOCAL_COPY_PROP = true;
681 return true;
682 } else if (value.equals("false")) {
683 LOCAL_COPY_PROP = false;
684 return true;
685 } else
686 return false;
687 }
688 if (name.equals("local_cse")) {
689 if (value.equals("true")) {
690 LOCAL_CSE = true;
691 return true;
692 } else if (value.equals("false")) {
693 LOCAL_CSE = false;
694 return true;
695 } else
696 return false;
697 }
698 if (name.equals("local_expression_folding")) {
699 if (value.equals("true")) {
700 LOCAL_EXPRESSION_FOLDING = true;
701 return true;
702 } else if (value.equals("false")) {
703 LOCAL_EXPRESSION_FOLDING = false;
704 return true;
705 } else
706 return false;
707 }
708 if (name.equals("control_static_splitting")) {
709 if (value.equals("true")) {
710 CONTROL_STATIC_SPLITTING = true;
711 return true;
712 } else if (value.equals("false")) {
713 CONTROL_STATIC_SPLITTING = false;
714 return true;
715 } else
716 return false;
717 }
718 if (name.equals("control_unwhile")) {
719 if (value.equals("true")) {
720 CONTROL_TURN_WHILES_INTO_UNTILS = true;
721 return true;
722 } else if (value.equals("false")) {
723 CONTROL_TURN_WHILES_INTO_UNTILS = false;
724 return true;
725 } else
726 return false;
727 }
728 if (name.equals("escape_simple_ipa")) {
729 if (value.equals("true")) {
730 ESCAPE_SIMPLE_IPA = true;
731 return true;
732 } else if (value.equals("false")) {
733 ESCAPE_SIMPLE_IPA = false;
734 return true;
735 } else
736 return false;
737 }
738 if (name.equals("escape_scalar_replace_aggregates")) {
739 if (value.equals("true")) {
740 ESCAPE_SCALAR_REPLACE_AGGREGATES = true;
741 return true;
742 } else if (value.equals("false")) {
743 ESCAPE_SCALAR_REPLACE_AGGREGATES = false;
744 return true;
745 } else
746 return false;
747 }
748 if (name.equals("escape_monitor_removal")) {
749 if (value.equals("true")) {
750 ESCAPE_MONITOR_REMOVAL = true;
751 return true;
752 } else if (value.equals("false")) {
753 ESCAPE_MONITOR_REMOVAL = false;
754 return true;
755 } else
756 return false;
757 }
758 if (name.equals("escape_invokee_thread_local")) {
759 if (value.equals("true")) {
760 ESCAPE_INVOKEE_THREAD_LOCAL = true;
761 return true;
762 } else if (value.equals("false")) {
763 ESCAPE_INVOKEE_THREAD_LOCAL = false;
764 return true;
765 } else
766 return false;
767 }
768 if (name.equals("ssa")) {
769 if (value.equals("true")) {
770 SSA = true;
771 return true;
772 } else if (value.equals("false")) {
773 SSA = false;
774 return true;
775 } else
776 return false;
777 }
778 if (name.equals("ssa_expression_folding")) {
779 if (value.equals("true")) {
780 SSA_EXPRESSION_FOLDING = true;
781 return true;
782 } else if (value.equals("false")) {
783 SSA_EXPRESSION_FOLDING = false;
784 return true;
785 } else
786 return false;
787 }
788 if (name.equals("ssa_redundant_branch_elimination")) {
789 if (value.equals("true")) {
790 SSA_REDUNDANT_BRANCH_ELIMINATION = true;
791 return true;
792 } else if (value.equals("false")) {
793 SSA_REDUNDANT_BRANCH_ELIMINATION = false;
794 return true;
795 } else
796 return false;
797 }
798 if (name.equals("ssa_licm_ignore_pei")) {
799 if (value.equals("true")) {
800 SSA_LICM_IGNORE_PEI = true;
801 return true;
802 } else if (value.equals("false")) {
803 SSA_LICM_IGNORE_PEI = false;
804 return true;
805 } else
806 return false;
807 }
808 if (name.equals("ssa_load_elimination")) {
809 if (value.equals("true")) {
810 SSA_LOAD_ELIMINATION = true;
811 return true;
812 } else if (value.equals("false")) {
813 SSA_LOAD_ELIMINATION = false;
814 return true;
815 } else
816 return false;
817 }
818 if (name.equals("ssa_coalesce_after")) {
819 if (value.equals("true")) {
820 SSA_COALESCE_AFTER = true;
821 return true;
822 } else if (value.equals("false")) {
823 SSA_COALESCE_AFTER = false;
824 return true;
825 } else
826 return false;
827 }
828 if (name.equals("ssa_loop_versioning")) {
829 if (value.equals("true")) {
830 SSA_LOOP_VERSIONING = true;
831 return true;
832 } else if (value.equals("false")) {
833 SSA_LOOP_VERSIONING = false;
834 return true;
835 } else
836 return false;
837 }
838 if (name.equals("ssa_live_range_splitting")) {
839 if (value.equals("true")) {
840 SSA_LIVE_RANGE_SPLITTING = true;
841 return true;
842 } else if (value.equals("false")) {
843 SSA_LIVE_RANGE_SPLITTING = false;
844 return true;
845 } else
846 return false;
847 }
848 if (name.equals("ssa_gcp")) {
849 if (value.equals("true")) {
850 SSA_GCP = true;
851 return true;
852 } else if (value.equals("false")) {
853 SSA_GCP = false;
854 return true;
855 } else
856 return false;
857 }
858 if (name.equals("ssa_gcse")) {
859 if (value.equals("true")) {
860 SSA_GCSE = true;
861 return true;
862 } else if (value.equals("false")) {
863 SSA_GCSE = false;
864 return true;
865 } else
866 return false;
867 }
868 if (name.equals("ssa_global_bounds")) {
869 if (value.equals("true")) {
870 SSA_GLOBAL_BOUNDS_CHECK = true;
871 return true;
872 } else if (value.equals("false")) {
873 SSA_GLOBAL_BOUNDS_CHECK = false;
874 return true;
875 } else
876 return false;
877 }
878 if (name.equals("ssa_splitblock_to_avoid_rename")) {
879 if (value.equals("true")) {
880 SSA_SPLITBLOCK_TO_AVOID_RENAME = true;
881 return true;
882 } else if (value.equals("false")) {
883 SSA_SPLITBLOCK_TO_AVOID_RENAME = false;
884 return true;
885 } else
886 return false;
887 }
888 if (name.equals("ssa_splitblock_for_local_live")) {
889 if (value.equals("true")) {
890 SSA_SPLITBLOCK_FOR_LOCAL_LIVE = true;
891 return true;
892 } else if (value.equals("false")) {
893 SSA_SPLITBLOCK_FOR_LOCAL_LIVE = false;
894 return true;
895 } else
896 return false;
897 }
898 if (name.equals("ssa_splitblock_into_infrequent")) {
899 if (value.equals("true")) {
900 SSA_SPLITBLOCK_INTO_INFREQUENT = true;
901 return true;
902 } else if (value.equals("false")) {
903 SSA_SPLITBLOCK_INTO_INFREQUENT = false;
904 return true;
905 } else
906 return false;
907 }
908 if (name.equals("reorder_code")) {
909 if (value.equals("true")) {
910 REORDER_CODE = true;
911 return true;
912 } else if (value.equals("false")) {
913 REORDER_CODE = false;
914 return true;
915 } else
916 return false;
917 }
918 if (name.equals("reorder_code_ph")) {
919 if (value.equals("true")) {
920 REORDER_CODE_PH = true;
921 return true;
922 } else if (value.equals("false")) {
923 REORDER_CODE_PH = false;
924 return true;
925 } else
926 return false;
927 }
928 if (name.equals("h2l_inline_new")) {
929 if (value.equals("true")) {
930 H2L_INLINE_NEW = true;
931 return true;
932 } else if (value.equals("false")) {
933 H2L_INLINE_NEW = false;
934 return true;
935 } else
936 return false;
937 }
938 if (name.equals("h2l_inline_write_barrier")) {
939 if (value.equals("true")) {
940 H2L_INLINE_WRITE_BARRIER = true;
941 return true;
942 } else if (value.equals("false")) {
943 H2L_INLINE_WRITE_BARRIER = false;
944 return true;
945 } else
946 return false;
947 }
948 if (name.equals("h2l_inline_primitive_write_barrier")) {
949 if (value.equals("true")) {
950 H2L_INLINE_PRIMITIVE_WRITE_BARRIER = true;
951 return true;
952 } else if (value.equals("false")) {
953 H2L_INLINE_PRIMITIVE_WRITE_BARRIER = false;
954 return true;
955 } else
956 return false;
957 }
958 if (name.equals("h2l_no_callee_exceptions")) {
959 if (value.equals("true")) {
960 H2L_NO_CALLEE_EXCEPTIONS = true;
961 return true;
962 } else if (value.equals("false")) {
963 H2L_NO_CALLEE_EXCEPTIONS = false;
964 return true;
965 } else
966 return false;
967 }
968 if (name.equals("h2l_call_via_jtoc")) {
969 if (value.equals("true")) {
970 H2L_CALL_VIA_JTOC = true;
971 return true;
972 } else if (value.equals("false")) {
973 H2L_CALL_VIA_JTOC = false;
974 return true;
975 } else
976 return false;
977 }
978 if (name.equals("l2m_handler_liveness")) {
979 if (value.equals("true")) {
980 L2M_HANDLER_LIVENESS = true;
981 return true;
982 } else if (value.equals("false")) {
983 L2M_HANDLER_LIVENESS = false;
984 return true;
985 } else
986 return false;
987 }
988 if (name.equals("l2m_schedule_prepass")) {
989 if (value.equals("true")) {
990 L2M_SCHEDULE_PREPASS = true;
991 return true;
992 } else if (value.equals("false")) {
993 L2M_SCHEDULE_PREPASS = false;
994 return true;
995 } else
996 return false;
997 }
998 if (name.equals("regalloc_coalesce_moves")) {
999 if (value.equals("true")) {
1000 REGALLOC_COALESCE_MOVES = true;
1001 return true;
1002 } else if (value.equals("false")) {
1003 REGALLOC_COALESCE_MOVES = false;
1004 return true;
1005 } else
1006 return false;
1007 }
1008 if (name.equals("regalloc_coalesce_spills")) {
1009 if (value.equals("true")) {
1010 REGALLOC_COALESCE_SPILLS = true;
1011 return true;
1012 } else if (value.equals("false")) {
1013 REGALLOC_COALESCE_SPILLS = false;
1014 return true;
1015 } else
1016 return false;
1017 }
1018 if (name.equals("adaptive_instrumentation_sampling")) {
1019 if (value.equals("true")) {
1020 ADAPTIVE_INSTRUMENTATION_SAMPLING = true;
1021 return true;
1022 } else if (value.equals("false")) {
1023 ADAPTIVE_INSTRUMENTATION_SAMPLING = false;
1024 return true;
1025 } else
1026 return false;
1027 }
1028 if (name.equals("adaptive_no_duplication")) {
1029 if (value.equals("true")) {
1030 ADAPTIVE_NO_DUPLICATION = true;
1031 return true;
1032 } else if (value.equals("false")) {
1033 ADAPTIVE_NO_DUPLICATION = false;
1034 return true;
1035 } else
1036 return false;
1037 }
1038 if (name.equals("adaptive_processor_specific_counter")) {
1039 if (value.equals("true")) {
1040 ADAPTIVE_PROCESSOR_SPECIFIC_COUNTER = true;
1041 return true;
1042 } else if (value.equals("false")) {
1043 ADAPTIVE_PROCESSOR_SPECIFIC_COUNTER = false;
1044 return true;
1045 } else
1046 return false;
1047 }
1048 if (name.equals("adaptive_remove_yp_from_checking")) {
1049 if (value.equals("true")) {
1050 ADAPTIVE_REMOVE_YP_FROM_CHECKING = true;
1051 return true;
1052 } else if (value.equals("false")) {
1053 ADAPTIVE_REMOVE_YP_FROM_CHECKING = false;
1054 return true;
1055 } else
1056 return false;
1057 }
1058 if (name.equals("osr_guarded_inlining")) {
1059 if (value.equals("true")) {
1060 OSR_GUARDED_INLINING = true;
1061 return true;
1062 } else if (value.equals("false")) {
1063 OSR_GUARDED_INLINING = false;
1064 return true;
1065 } else
1066 return false;
1067 }
1068 if (name.equals("osr_inline_policy")) {
1069 if (value.equals("true")) {
1070 OSR_INLINE_POLICY = true;
1071 return true;
1072 } else if (value.equals("false")) {
1073 OSR_INLINE_POLICY = false;
1074 return true;
1075 } else
1076 return false;
1077 }
1078 if (name.equals("print_static_stats")) {
1079 if (value.equals("true")) {
1080 PRINT_STATIC_STATS = true;
1081 return true;
1082 } else if (value.equals("false")) {
1083 PRINT_STATIC_STATS = false;
1084 return true;
1085 } else
1086 return false;
1087 }
1088 if (name.equals("print_phases")) {
1089 if (value.equals("true")) {
1090 PRINT_PHASES = true;
1091 return true;
1092 } else if (value.equals("false")) {
1093 PRINT_PHASES = false;
1094 return true;
1095 } else
1096 return false;
1097 }
1098 if (name.equals("print_all_ir")) {
1099 if (value.equals("true")) {
1100 PRINT_ALL_IR = true;
1101 return true;
1102 } else if (value.equals("false")) {
1103 PRINT_ALL_IR = false;
1104 return true;
1105 } else
1106 return false;
1107 }
1108 if (name.equals("print_detailed_inline_report")) {
1109 if (value.equals("true")) {
1110 PRINT_DETAILED_INLINE_REPORT = true;
1111 return true;
1112 } else if (value.equals("false")) {
1113 PRINT_DETAILED_INLINE_REPORT = false;
1114 return true;
1115 } else
1116 return false;
1117 }
1118 if (name.equals("print_inline_report")) {
1119 if (value.equals("true")) {
1120 PRINT_INLINE_REPORT = true;
1121 return true;
1122 } else if (value.equals("false")) {
1123 PRINT_INLINE_REPORT = false;
1124 return true;
1125 } else
1126 return false;
1127 }
1128 if (name.equals("print_dom")) {
1129 if (value.equals("true")) {
1130 PRINT_DOMINATORS = true;
1131 return true;
1132 } else if (value.equals("false")) {
1133 PRINT_DOMINATORS = false;
1134 return true;
1135 } else
1136 return false;
1137 }
1138 if (name.equals("print_pdom")) {
1139 if (value.equals("true")) {
1140 PRINT_POST_DOMINATORS = true;
1141 return true;
1142 } else if (value.equals("false")) {
1143 PRINT_POST_DOMINATORS = false;
1144 return true;
1145 } else
1146 return false;
1147 }
1148 if (name.equals("print_ssa")) {
1149 if (value.equals("true")) {
1150 PRINT_SSA = true;
1151 return true;
1152 } else if (value.equals("false")) {
1153 PRINT_SSA = false;
1154 return true;
1155 } else
1156 return false;
1157 }
1158 if (name.equals("print_dg_burs")) {
1159 if (value.equals("true")) {
1160 PRINT_DG_BURS = true;
1161 return true;
1162 } else if (value.equals("false")) {
1163 PRINT_DG_BURS = false;
1164 return true;
1165 } else
1166 return false;
1167 }
1168 if (name.equals("print_dg_sched_pre")) {
1169 if (value.equals("true")) {
1170 PRINT_DG_SCHED_PRE = true;
1171 return true;
1172 } else if (value.equals("false")) {
1173 PRINT_DG_SCHED_PRE = false;
1174 return true;
1175 } else
1176 return false;
1177 }
1178 if (name.equals("print_dg_sched_post")) {
1179 if (value.equals("true")) {
1180 PRINT_DG_SCHED_POST = true;
1181 return true;
1182 } else if (value.equals("false")) {
1183 PRINT_DG_SCHED_POST = false;
1184 return true;
1185 } else
1186 return false;
1187 }
1188 if (name.equals("print_coal")) {
1189 if (value.equals("true")) {
1190 PRINT_COALESCING = true;
1191 return true;
1192 } else if (value.equals("false")) {
1193 PRINT_COALESCING = false;
1194 return true;
1195 } else
1196 return false;
1197 }
1198 if (name.equals("print_high")) {
1199 if (value.equals("true")) {
1200 PRINT_HIGH = true;
1201 return true;
1202 } else if (value.equals("false")) {
1203 PRINT_HIGH = false;
1204 return true;
1205 } else
1206 return false;
1207 }
1208 if (name.equals("print_final_hir")) {
1209 if (value.equals("true")) {
1210 PRINT_FINAL_HIR = true;
1211 return true;
1212 } else if (value.equals("false")) {
1213 PRINT_FINAL_HIR = false;
1214 return true;
1215 } else
1216 return false;
1217 }
1218 if (name.equals("print_low")) {
1219 if (value.equals("true")) {
1220 PRINT_LOW = true;
1221 return true;
1222 } else if (value.equals("false")) {
1223 PRINT_LOW = false;
1224 return true;
1225 } else
1226 return false;
1227 }
1228 if (name.equals("print_final_lir")) {
1229 if (value.equals("true")) {
1230 PRINT_FINAL_LIR = true;
1231 return true;
1232 } else if (value.equals("false")) {
1233 PRINT_FINAL_LIR = false;
1234 return true;
1235 } else
1236 return false;
1237 }
1238 if (name.equals("print_mir")) {
1239 if (value.equals("true")) {
1240 PRINT_MIR = true;
1241 return true;
1242 } else if (value.equals("false")) {
1243 PRINT_MIR = false;
1244 return true;
1245 } else
1246 return false;
1247 }
1248 if (name.equals("print_final_mir")) {
1249 if (value.equals("true")) {
1250 PRINT_FINAL_MIR = true;
1251 return true;
1252 } else if (value.equals("false")) {
1253 PRINT_FINAL_MIR = false;
1254 return true;
1255 } else
1256 return false;
1257 }
1258 if (name.equals("print_cfg")) {
1259 if (value.equals("true")) {
1260 PRINT_CFG = true;
1261 return true;
1262 } else if (value.equals("false")) {
1263 PRINT_CFG = false;
1264 return true;
1265 } else
1266 return false;
1267 }
1268 if (name.equals("print_schedule_pre")) {
1269 if (value.equals("true")) {
1270 PRINT_SCHEDULE_PRE = true;
1271 return true;
1272 } else if (value.equals("false")) {
1273 PRINT_SCHEDULE_PRE = false;
1274 return true;
1275 } else
1276 return false;
1277 }
1278 if (name.equals("print_schedule_post")) {
1279 if (value.equals("true")) {
1280 PRINT_SCHEDULE_POST = true;
1281 return true;
1282 } else if (value.equals("false")) {
1283 PRINT_SCHEDULE_POST = false;
1284 return true;
1285 } else
1286 return false;
1287 }
1288 if (name.equals("print_regalloc")) {
1289 if (value.equals("true")) {
1290 PRINT_REGALLOC = true;
1291 return true;
1292 } else if (value.equals("false")) {
1293 PRINT_REGALLOC = false;
1294 return true;
1295 } else
1296 return false;
1297 }
1298 if (name.equals("print_calling_conventions")) {
1299 if (value.equals("true")) {
1300 PRINT_CALLING_CONVENTIONS = true;
1301 return true;
1302 } else if (value.equals("false")) {
1303 PRINT_CALLING_CONVENTIONS = false;
1304 return true;
1305 } else
1306 return false;
1307 }
1308 if (name.equals("print_gc_maps")) {
1309 if (value.equals("true")) {
1310 PRINT_GC_MAPS = true;
1311 return true;
1312 } else if (value.equals("false")) {
1313 PRINT_GC_MAPS = false;
1314 return true;
1315 } else
1316 return false;
1317 }
1318 if (name.equals("debug_cgd")) {
1319 if (value.equals("true")) {
1320 DEBUG_CODEGEN = true;
1321 return true;
1322 } else if (value.equals("false")) {
1323 DEBUG_CODEGEN = false;
1324 return true;
1325 } else
1326 return false;
1327 }
1328 if (name.equals("debug_instru_sampling")) {
1329 if (value.equals("true")) {
1330 DEBUG_INSTRU_SAMPLING = true;
1331 return true;
1332 } else if (value.equals("false")) {
1333 DEBUG_INSTRU_SAMPLING = false;
1334 return true;
1335 } else
1336 return false;
1337 }
1338 if (name.equals("debug_instru_sampling_detail")) {
1339 if (value.equals("true")) {
1340 DEBUG_INSTRU_SAMPLING_DETAIL = true;
1341 return true;
1342 } else if (value.equals("false")) {
1343 DEBUG_INSTRU_SAMPLING_DETAIL = false;
1344 return true;
1345 } else
1346 return false;
1347 }
1348 if (name.equals("debug_gcp")) {
1349 if (value.equals("true")) {
1350 DEBUG_GCP = true;
1351 return true;
1352 } else if (value.equals("false")) {
1353 DEBUG_GCP = false;
1354 return true;
1355 } else
1356 return false;
1357 }
1358 if (name.equals("verbose")) {
1359 if (value.equals("true")) {
1360 PRINT_METHOD = true;
1361 return true;
1362 } else if (value.equals("false")) {
1363 PRINT_METHOD = false;
1364 return true;
1365 } else
1366 return false;
1367 }
1368 if (name.equals("mc")) {
1369 if (value.equals("true")) {
1370 PRINT_MACHINECODE = true;
1371 return true;
1372 } else if (value.equals("false")) {
1373 PRINT_MACHINECODE = false;
1374 return true;
1375 } else
1376 return false;
1377 }
1378 if (name.equals("driver_exclude")) {
1379 if (DRIVER_EXCLUDE == null) {
1380 DRIVER_EXCLUDE = new java.util.HashSet<String>();
1381 }
1382 DRIVER_EXCLUDE.add(value);
1383 return true;
1384 }
1385 if (name.equals("print_ir_level")) {
1386 PRINT_IR_LEVEL = CommandLineArgs.primitiveParseInt(value);
1387 return true;
1388 }
1389 if (name.equals("profile_edge_count_input_file")) {
1390 PROFILE_EDGE_COUNT_INPUT_FILE = value;
1391 return true;
1392 }
1393 if (name.equals("profile_frequency_strategy")) {
1394 if (value.equals("counters")) {
1395 PROFILE_FREQUENCY_STRATEGY = PROFILE_COUNTERS_FREQ;
1396 return true;
1397 }
1398 if (value.equals("static")) {
1399 PROFILE_FREQUENCY_STRATEGY = PROFILE_STATIC_FREQ;
1400 return true;
1401 }
1402 if (value.equals("dumb")) {
1403 PROFILE_FREQUENCY_STRATEGY = PROFILE_DUMB_FREQ;
1404 return true;
1405 }
1406 if (value.equals("inverse")) {
1407 PROFILE_FREQUENCY_STRATEGY = PROFILE_INVERSE_COUNTERS_FREQ;
1408 return true;
1409 }
1410 return false;
1411 }
1412 if (name.equals("profile_infrequent_threshold")) {
1413 PROFILE_INFREQUENT_THRESHOLD = CommandLineArgs.primitiveParseFloat(value);
1414 return true;
1415 }
1416 if (name.equals("profile_cbs_hotness")) {
1417 PROFILE_CBS_HOTNESS = CommandLineArgs.primitiveParseFloat(value);
1418 return true;
1419 }
1420 if (name.equals("escape_max_array_size")) {
1421 ESCAPE_MAX_ARRAY_SIZE = CommandLineArgs.primitiveParseInt(value);
1422 return true;
1423 }
1424 if (name.equals("ssa_load_elimination_rounds")) {
1425 SSA_LOAD_ELIMINATION_ROUNDS = CommandLineArgs.primitiveParseInt(value);
1426 return true;
1427 }
1428 if (name.equals("l2m_max_block_size")) {
1429 L2M_MAX_BLOCK_SIZE = CommandLineArgs.primitiveParseInt(value);
1430 return true;
1431 }
1432 if (name.equals("regalloc_spill_cost_estimate")) {
1433 if (value.equals("simple")) {
1434 REGALLOC_SPILL_COST_ESTIMATE = REGALLOC_SIMPLE_SPILL_COST;
1435 return true;
1436 }
1437 if (value.equals("brainDead")) {
1438 REGALLOC_SPILL_COST_ESTIMATE = REGALLOC_BRAINDEAD_SPILL_COST;
1439 return true;
1440 }
1441 if (value.equals("blockCount")) {
1442 REGALLOC_SPILL_COST_ESTIMATE = REGALLOC_BLOCK_COUNT_SPILL_COST;
1443 return true;
1444 }
1445 return false;
1446 }
1447 if (name.equals("regalloc_simple_spill_cost_move_factor")) {
1448 REGALLOC_SIMPLE_SPILL_COST_MOVE_FACTOR = CommandLineArgs.primitiveParseFloat(value);
1449 return true;
1450 }
1451 if (name.equals("regalloc_simple_spill_cost_memory_operand_factor")) {
1452 REGALLOC_SIMPLE_SPILL_COST_MEMORY_OPERAND_FACTOR = CommandLineArgs.primitiveParseFloat(value);
1453 return true;
1454 }
1455 if (name.equals("control_tableswitch_cutoff")) {
1456 CONTROL_TABLESWITCH_CUTOFF = CommandLineArgs.primitiveParseInt(value);
1457 return true;
1458 }
1459 if (name.equals("control_cond_move_cutoff")) {
1460 CONTROL_COND_MOVE_CUTOFF = CommandLineArgs.primitiveParseInt(value);
1461 return true;
1462 }
1463 if (name.equals("control_unroll_log")) {
1464 CONTROL_UNROLL_LOG = CommandLineArgs.primitiveParseInt(value);
1465 return true;
1466 }
1467 if (name.equals("control_static_splitting_max_cost")) {
1468 CONTROL_STATIC_SPLITTING_MAX_COST = CommandLineArgs.primitiveParseInt(value);
1469 return true;
1470 }
1471 if (name.equals("control_well_predicted_cutoff")) {
1472 CONTROL_WELL_PREDICTED_CUTOFF = CommandLineArgs.primitiveParseFloat(value);
1473 return true;
1474 }
1475 if (name.equals("inline_max_target_size")) {
1476 INLINE_MAX_TARGET_SIZE = CommandLineArgs.primitiveParseInt(value);
1477 return true;
1478 }
1479 if (name.equals("inline_max_inline_depth")) {
1480 INLINE_MAX_INLINE_DEPTH = CommandLineArgs.primitiveParseInt(value);
1481 return true;
1482 }
1483 if (name.equals("inline_max_always_inline_target_size")) {
1484 INLINE_MAX_ALWAYS_INLINE_TARGET_SIZE = CommandLineArgs.primitiveParseInt(value);
1485 return true;
1486 }
1487 if (name.equals("inline_massive_method_size")) {
1488 INLINE_MASSIVE_METHOD_SIZE = CommandLineArgs.primitiveParseInt(value);
1489 return true;
1490 }
1491 if (name.equals("inline_max_arg_bonus")) {
1492 INLINE_MAX_ARG_BONUS = CommandLineArgs.primitiveParseFloat(value);
1493 return true;
1494 }
1495 if (name.equals("inline_precise_reg_array_arg_bonus")) {
1496 INLINE_PRECISE_REG_ARRAY_ARG_BONUS = CommandLineArgs.primitiveParseFloat(value);
1497 return true;
1498 }
1499 if (name.equals("inline_declared_aastored_array_arg_bonus")) {
1500 INLINE_DECLARED_AASTORED_ARRAY_ARG_BONUS = CommandLineArgs.primitiveParseFloat(value);
1501 return true;
1502 }
1503 if (name.equals("inline_precise_reg_class_arg_bonus")) {
1504 INLINE_PRECISE_REG_CLASS_ARG_BONUS = CommandLineArgs.primitiveParseFloat(value);
1505 return true;
1506 }
1507 if (name.equals("inline_extant_reg_class_arg_bonus")) {
1508 INLINE_EXTANT_REG_CLASS_ARG_BONUS = CommandLineArgs.primitiveParseFloat(value);
1509 return true;
1510 }
1511 if (name.equals("inline_int_const_arg_bonus")) {
1512 INLINE_INT_CONST_ARG_BONUS = CommandLineArgs.primitiveParseFloat(value);
1513 return true;
1514 }
1515 if (name.equals("inline_null_const_arg_bonus")) {
1516 INLINE_NULL_CONST_ARG_BONUS = CommandLineArgs.primitiveParseFloat(value);
1517 return true;
1518 }
1519 if (name.equals("inline_object_const_arg_bonus")) {
1520 INLINE_OBJECT_CONST_ARG_BONUS = CommandLineArgs.primitiveParseFloat(value);
1521 return true;
1522 }
1523 if (name.equals("inline_call_depth_cost")) {
1524 INLINE_CALL_DEPTH_COST = CommandLineArgs.primitiveParseFloat(value);
1525 return true;
1526 }
1527 if (name.equals("inline_ai_max_target_size")) {
1528 INLINE_AI_MAX_TARGET_SIZE = CommandLineArgs.primitiveParseInt(value);
1529 return true;
1530 }
1531 if (name.equals("inline_ai_min_callsite_fraction")) {
1532 INLINE_AI_MIN_CALLSITE_FRACTION = CommandLineArgs.primitiveParseFloat(value);
1533 return true;
1534 }
1535 if (name.equals("inline_guard_kind")) {
1536 if (value.equals("inline_guard_method_test")) {
1537 INLINE_GUARD_KIND = INLINE_GUARD_METHOD_TEST;
1538 return true;
1539 }
1540 if (value.equals("inline_guard_class_test")) {
1541 INLINE_GUARD_KIND = INLINE_GUARD_CLASS_TEST;
1542 return true;
1543 }
1544 if (value.equals("inline_guard_code_patch")) {
1545 INLINE_GUARD_KIND = INLINE_GUARD_CODE_PATCH;
1546 return true;
1547 }
1548 return false;
1549 }
1550 if (name.equals("method_to_print")) {
1551 if (METHOD_TO_PRINT == null) {
1552 METHOD_TO_PRINT = new java.util.HashSet<String>();
1553 }
1554 METHOD_TO_PRINT.add(value);
1555 return true;
1556 }
1557 //End generated command-line processing
1558
1559 // None of the above tests matched, so this wasn't an option
1560 return false;
1561 }
1562
1563 /** Print a short description of every option */
1564 public static void printHelp(String prefix) {
1565
1566 instancePrintHelpHeader(prefix);
1567
1568 //Begin generated help messages
1569 VM.sysWrite("Boolean Options ("+prefix+"<option>=true or "+prefix+":<option>=false)\n");
1570 VM.sysWrite("Option OptLevel Description\n");
1571 VM.sysWrite("focus_effort Focus compilation effort based on frequency profile data\n");
1572 VM.sysWrite("reads_kill Should we constrain optimizations by enforcing reads-kill?\n");
1573 VM.sysWrite("field_analysis 0 Eagerly compute method summaries for flow-insensitive field analysis\n");
1574 VM.sysWrite("inline 0 Inline statically resolvable calls\n");
1575 VM.sysWrite("inline_guarded 0 Guarded inlining of non-final virtual calls\n");
1576 VM.sysWrite("inline_guarded_interfaces 0 Speculatively inline non-final interface calls\n");
1577 VM.sysWrite("inline_preex 0 Pre-existence based inlining\n");
1578 VM.sysWrite("simplify_integer_ops Simplify operations on integers\n");
1579 VM.sysWrite("simplify_long_ops Simplify operations on longs\n");
1580 VM.sysWrite("simplify_float_ops Simplify operations on floats\n");
1581 VM.sysWrite("simplify_double_ops Simplify operations on floats\n");
1582 VM.sysWrite("simplify_ref_ops Simplify operations on references\n");
1583 VM.sysWrite("simplify_tib_ops Simplify operations on TIBs\n");
1584 VM.sysWrite("simplify_field_ops Simplify operations on fields\n");
1585 VM.sysWrite("simplify_chase_final_fields Chase final fields avoiding loads at runtime\n");
1586 VM.sysWrite("local_constant_prop 0 Perform local constant propagation\n");
1587 VM.sysWrite("local_copy_prop 0 Perform local copy propagation\n");
1588 VM.sysWrite("local_cse 0 Perform local common subexpression elimination\n");
1589 VM.sysWrite("local_expression_folding 3 Should we try to fold expressions with constants locally?\n");
1590 VM.sysWrite("control_static_splitting 1 CFG splitting to create hot traces based on static heuristics\n");
1591 VM.sysWrite("control_unwhile 3 Turn whiles into untils\n");
1592 VM.sysWrite("escape_simple_ipa Eagerly compute method summaries for simple escape analysis\n");
1593 VM.sysWrite("escape_scalar_replace_aggregates 1 If possible turn aggregates (objects) into variable definition/uses\n");
1594 VM.sysWrite("escape_monitor_removal 1 Try to remove unnecessary monitor operations\n");
1595 VM.sysWrite("escape_invokee_thread_local Compile the method assuming the invokee is thread-local. Cannot be properly set on command line.\n");
1596 VM.sysWrite("ssa 3 Should SSA form be constructed on the HIR?\n");
1597 VM.sysWrite("ssa_expression_folding 3 Should we try to fold expressions with constants in SSA form?\n");
1598 VM.sysWrite("ssa_redundant_branch_elimination 3 Eliminate redundant conditional branches\n");
1599 VM.sysWrite("ssa_licm_ignore_pei Assume PEIs do not throw or state is not observable\n");
1600 VM.sysWrite("ssa_load_elimination 3 Should we perform redundant load elimination during SSA pass?\n");
1601 VM.sysWrite("ssa_coalesce_after 3 Should we coalesce move instructions after leaving SSA?\n");
1602 VM.sysWrite("ssa_loop_versioning Create copies of loops where runtime exceptions are checked prior to entry\n");
1603 VM.sysWrite("ssa_live_range_splitting Split live ranges using LIR SSA pass?\n");
1604 VM.sysWrite("ssa_gcp 3 Perform global code placement\n");
1605 VM.sysWrite("ssa_gcse 3 Perform global code placement\n");
1606 VM.sysWrite("ssa_global_bounds Perform (incomplete/unsafe) global Array Bound Check elimination on Demand\n");
1607 VM.sysWrite("ssa_splitblock_to_avoid_rename When leaving SSA create blocks to avoid renaming variables\n");
1608 VM.sysWrite("ssa_splitblock_for_local_live When leaving SSA create blocks for local liveness\n");
1609 VM.sysWrite("ssa_splitblock_into_infrequent When leaving SSA create blocks to avoid adding code to frequently executed blocks\n");
1610 VM.sysWrite("reorder_code 0 Reorder basic blocks for improved locality and branch prediction\n");
1611 VM.sysWrite("reorder_code_ph 1 Reorder basic blocks using Pettis and Hansen Algo2\n");
1612 VM.sysWrite("h2l_inline_new 0 Inline allocation of scalars and arrays\n");
1613 VM.sysWrite("h2l_inline_write_barrier 1 Inline write barriers for generational collectors\n");
1614 VM.sysWrite("h2l_inline_primitive_write_barrier 1 Inline primitive write barriers for certain collectors\n");
1615 VM.sysWrite("h2l_no_callee_exceptions Assert that any callee of this compiled method will not throw exceptions. Cannot be properly set on command line.\n");
1616 VM.sysWrite("h2l_call_via_jtoc Plant virtual calls via the JTOC rather than from the tib of anobject when possible\n");
1617 VM.sysWrite("l2m_handler_liveness 2 Store liveness for handlers to improve dependence graph at PEIs\n");
1618 VM.sysWrite("l2m_schedule_prepass Perform prepass instruction scheduling\n");
1619 VM.sysWrite("regalloc_coalesce_moves 0 Attempt to coalesce to eliminate register moves?\n");
1620 VM.sysWrite("regalloc_coalesce_spills 0 Attempt to coalesce stack locations?\n");
1621 VM.sysWrite("adaptive_instrumentation_sampling Perform code transformation to sample instrumentation code.\n");
1622 VM.sysWrite("adaptive_no_duplication When performing inst. sampling, should it be done without duplicating code?\n");
1623 VM.sysWrite("adaptive_processor_specific_counter Should there be one CBS counter per processor for SMP performance?\n");
1624 VM.sysWrite("adaptive_remove_yp_from_checking Should yieldpoints be removed from the checking code (requires finite sample interval)\n");
1625 VM.sysWrite("osr_guarded_inlining 1 Insert OSR point at off branch of guarded inlining?\n");
1626 VM.sysWrite("osr_inline_policy 1 Use OSR knowledge to drive more aggressive inlining?\n");
1627 VM.sysWrite("print_static_stats Print out compile-time statistics for basic blocks?\n");
1628 VM.sysWrite("print_phases Print short message for each compilation phase\n");
1629 VM.sysWrite("print_all_ir Dump the IR after each compiler phase\n");
1630 VM.sysWrite("print_detailed_inline_report Print detailed report of compile-time inlining decisions\n");
1631 VM.sysWrite("print_inline_report Print detailed report of compile-time inlining decisions\n");
1632 VM.sysWrite("print_dom Print dominators\n");
1633 VM.sysWrite("print_pdom Print post-dominators\n");
1634 VM.sysWrite("print_ssa Print SSA form\n");
1635 VM.sysWrite("print_dg_burs Print dependence graph before burs\n");
1636 VM.sysWrite("print_dg_sched_pre Print dependence graph before prepass scheduling\n");
1637 VM.sysWrite("print_dg_sched_post Print dependence graph before postpass scheduling\n");
1638 VM.sysWrite("print_coal Print coalescing output\n");
1639 VM.sysWrite("print_high Print IR after initial generation\n");
1640 VM.sysWrite("print_final_hir Print IR just before conversion to LIR\n");
1641 VM.sysWrite("print_low Print IR after conversion to LIR\n");
1642 VM.sysWrite("print_final_lir Print IR just before conversion to MIR\n");
1643 VM.sysWrite("print_mir Print IR after conversion to MIR\n");
1644 VM.sysWrite("print_final_mir Print IR just before conversion to machine code\n");
1645 VM.sysWrite("print_cfg Print control flow graph too when IR is printed\n");
1646 VM.sysWrite("print_schedule_pre Print IR after prepass scheduling\n");
1647 VM.sysWrite("print_schedule_post Print IR after postpass scheduling\n");
1648 VM.sysWrite("print_regalloc Print IR before and after register allocation\n");
1649 VM.sysWrite("print_calling_conventions Print IR after expanding calling conventions\n");
1650 VM.sysWrite("print_gc_maps Print the garbage collection maps\n");
1651 VM.sysWrite("debug_cgd Enable debugging support for final assembly\n");
1652 VM.sysWrite("debug_instru_sampling Enable debugging statements for instrumentation sampling\n");
1653 VM.sysWrite("debug_instru_sampling_detail Enable detailed debugging statements for instrumentation sampling\n");
1654 VM.sysWrite("debug_gcp Perform noisy global code placement\n");
1655 VM.sysWrite("verbose Print method name at start of compilation\n");
1656 VM.sysWrite("mc Print final machine code\n");
1657 VM.sysWrite("\nValue Options ("+prefix+"<option>=<value>)\n");
1658 VM.sysWrite("Option Type Description\n");
1659 VM.sysWrite("print_ir_level int Only print IR compiled above this level\n");
1660 VM.sysWrite("profile_edge_count_input_file String Input file of edge counter profile data\n");
1661 VM.sysWrite("profile_infrequent_threshold float Cumulative threshold which defines the set of infrequent basic blocks\n");
1662 VM.sysWrite("profile_cbs_hotness double Threshold at which a conditional branch is considered to be skewed\n");
1663 VM.sysWrite("escape_max_array_size int Maximum size of array to replaced with registers by simple escape analysis\n");
1664 VM.sysWrite("ssa_load_elimination_rounds int How many rounds of redundant load elimination will we attempt?\n");
1665 VM.sysWrite("l2m_max_block_size int Maximum size of block for BURS, larger blocks are split\n");
1666 VM.sysWrite("regalloc_simple_spill_cost_move_factor double spill penalty for move instructions\n");
1667 VM.sysWrite("regalloc_simple_spill_cost_memory_operand_factor double spill penalty for registers used in memory operands\n");
1668 VM.sysWrite("control_tableswitch_cutoff int If a tableswitch comprises this many or fewer comparisons convert it into multiple if-then-else style branches\n");
1669 VM.sysWrite("control_cond_move_cutoff int How many extra instructions will we insert in order to remove a conditional branch?\n");
1670 VM.sysWrite("control_unroll_log int Unroll loops. Duplicates the loop body 2^n times.\n");
1671 VM.sysWrite("control_static_splitting_max_cost int Upper bound on the number of instructions duplicated per block when trying to create hot traces with static splitting\n");
1672 VM.sysWrite("control_well_predicted_cutoff double Don't replace branches with conditional moves if they are outside of the range of 0.5 +- this value\n");
1673 VM.sysWrite("inline_max_target_size int Static inlining heuristic: Upper bound on callee size\n");
1674 VM.sysWrite("inline_max_inline_depth int Static inlining heuristic: Upper bound on depth of inlining\n");
1675 VM.sysWrite("inline_max_always_inline_target_size int Static inlining heuristic: Always inline callees of this size or smaller\n");
1676 VM.sysWrite("inline_massive_method_size int Static inlining heuristic: If root method is already this big, then only inline trivial methods\n");
1677 VM.sysWrite("inline_max_arg_bonus double Maximum bonus for reducing the perceived size of a method during inlining.\n");
1678 VM.sysWrite("inline_precise_reg_array_arg_bonus double Bonus given to inlining methods that are passed a register of a known precise type.\n");
1679 VM.sysWrite("inline_declared_aastored_array_arg_bonus double Bonus given when there's potential to optimize checkstore portion of aastore bytecode on parameter\n");
1680 VM.sysWrite("inline_precise_reg_class_arg_bonus double Bonus given to inlining methods that are passed a register of a known precise type.\n");
1681 VM.sysWrite("inline_extant_reg_class_arg_bonus double Bonus given to inlining methods that are passed a register that's known not to be null.\n");
1682 VM.sysWrite("inline_int_const_arg_bonus double Bonus given to inlining methods that are passed an int constant argument\n");
1683 VM.sysWrite("inline_null_const_arg_bonus double Bonus given to inlining methods that are passed a null constant argument\n");
1684 VM.sysWrite("inline_object_const_arg_bonus double Bonus given to inlining methods that are passed an object constant argument\n");
1685 VM.sysWrite("inline_call_depth_cost double As we inline deeper nested methods what cost (or bonus) do we wish to give to deter (or encourage) nesting of deeper methods?\n");
1686 VM.sysWrite("inline_ai_max_target_size int Adaptive inlining heuristic: Upper bound on callee size\n");
1687 VM.sysWrite("inline_ai_min_callsite_fraction double Adaptive inlining heuristc: Minimum fraction of callsite distribution for guarded inlining of a callee\n");
1688 VM.sysWrite("\nSelection Options (set option to one of an enumeration of possible values)\n");
1689 VM.sysWrite("\t\tHow to compute block and edge frequencies?\n");
1690 VM.sysWrite("profile_frequency_strategy ");
1691 VM.sysWrite("counters ");
1692 VM.sysWrite("static ");
1693 VM.sysWrite("dumb ");
1694 VM.sysWrite("inverse ");
1695 VM.sysWrite("\n");
1696 VM.sysWrite("\t\tSelection of spilling heuristic\n");
1697 VM.sysWrite("regalloc_spill_cost_estimate ");
1698 VM.sysWrite("simple ");
1699 VM.sysWrite("brainDead ");
1700 VM.sysWrite("blockCount ");
1701 VM.sysWrite("\n");
1702 VM.sysWrite("\t\tSelection of guard mechanism for inlined virtual calls that cannot be statically bound\n");
1703 VM.sysWrite("inline_guard_kind ");
1704 VM.sysWrite("inline_guard_method_test ");
1705 VM.sysWrite("inline_guard_class_test ");
1706 VM.sysWrite("inline_guard_code_patch ");
1707 VM.sysWrite("\n");
1708 VM.sysWrite("\nSet Options (option is a set of values)\n");
1709 VM.sysWrite("driver_exclude Exclude methods from being opt compiled\n");
1710 VM.sysWrite("method_to_print Only apply print options against methods whose name contains this string\n");
1711 instancePrintHelpFooter(prefix);
1712
1713 VM.sysExit(VM.EXIT_STATUS_PRINTED_HELP_MESSAGE);
1714 }
1715
1716 /** @return a String representing the options values */
1717 @org.vmmagic.pragma.NoOptCompile
1718 public String toString() {
1719 StringBuilder result = new StringBuilder();
1720
1721 // Begin generated option value printing
1722 result.append("\tfocus_effort = ").append(FREQ_FOCUS_EFFORT).append("\n");
1723 result.append("\treads_kill = ").append(READS_KILL).append("\n");
1724 result.append("\tfield_analysis = ").append(FIELD_ANALYSIS).append("\n");
1725 result.append("\tinline = ").append(INLINE).append("\n");
1726 result.append("\tinline_guarded = ").append(INLINE_GUARDED).append("\n");
1727 result.append("\tinline_guarded_interfaces = ").append(INLINE_GUARDED_INTERFACES).append("\n");
1728 result.append("\tinline_preex = ").append(INLINE_PREEX).append("\n");
1729 result.append("\tsimplify_integer_ops = ").append(SIMPLIFY_INTEGER_OPS).append("\n");
1730 result.append("\tsimplify_long_ops = ").append(SIMPLIFY_LONG_OPS).append("\n");
1731 result.append("\tsimplify_float_ops = ").append(SIMPLIFY_FLOAT_OPS).append("\n");
1732 result.append("\tsimplify_double_ops = ").append(SIMPLIFY_DOUBLE_OPS).append("\n");
1733 result.append("\tsimplify_ref_ops = ").append(SIMPLIFY_REF_OPS).append("\n");
1734 result.append("\tsimplify_tib_ops = ").append(SIMPLIFY_TIB_OPS).append("\n");
1735 result.append("\tsimplify_field_ops = ").append(SIMPLIFY_FIELD_OPS).append("\n");
1736 result.append("\tsimplify_chase_final_fields = ").append(SIMPLIFY_CHASE_FINAL_FIELDS).append("\n");
1737 result.append("\tlocal_constant_prop = ").append(LOCAL_CONSTANT_PROP).append("\n");
1738 result.append("\tlocal_copy_prop = ").append(LOCAL_COPY_PROP).append("\n");
1739 result.append("\tlocal_cse = ").append(LOCAL_CSE).append("\n");
1740 result.append("\tlocal_expression_folding = ").append(LOCAL_EXPRESSION_FOLDING).append("\n");
1741 result.append("\tcontrol_static_splitting = ").append(CONTROL_STATIC_SPLITTING).append("\n");
1742 result.append("\tcontrol_unwhile = ").append(CONTROL_TURN_WHILES_INTO_UNTILS).append("\n");
1743 result.append("\tescape_simple_ipa = ").append(ESCAPE_SIMPLE_IPA).append("\n");
1744 result.append("\tescape_scalar_replace_aggregates = ").append(ESCAPE_SCALAR_REPLACE_AGGREGATES).append("\n");
1745 result.append("\tescape_monitor_removal = ").append(ESCAPE_MONITOR_REMOVAL).append("\n");
1746 result.append("\tescape_invokee_thread_local = ").append(ESCAPE_INVOKEE_THREAD_LOCAL).append("\n");
1747 result.append("\tssa = ").append(SSA).append("\n");
1748 result.append("\tssa_expression_folding = ").append(SSA_EXPRESSION_FOLDING).append("\n");
1749 result.append("\tssa_redundant_branch_elimination = ").append(SSA_REDUNDANT_BRANCH_ELIMINATION).append("\n");
1750 result.append("\tssa_licm_ignore_pei = ").append(SSA_LICM_IGNORE_PEI).append("\n");
1751 result.append("\tssa_load_elimination = ").append(SSA_LOAD_ELIMINATION).append("\n");
1752 result.append("\tssa_coalesce_after = ").append(SSA_COALESCE_AFTER).append("\n");
1753 result.append("\tssa_loop_versioning = ").append(SSA_LOOP_VERSIONING).append("\n");
1754 result.append("\tssa_live_range_splitting = ").append(SSA_LIVE_RANGE_SPLITTING).append("\n");
1755 result.append("\tssa_gcp = ").append(SSA_GCP).append("\n");
1756 result.append("\tssa_gcse = ").append(SSA_GCSE).append("\n");
1757 result.append("\tssa_global_bounds = ").append(SSA_GLOBAL_BOUNDS_CHECK).append("\n");
1758 result.append("\tssa_splitblock_to_avoid_rename = ").append(SSA_SPLITBLOCK_TO_AVOID_RENAME).append("\n");
1759 result.append("\tssa_splitblock_for_local_live = ").append(SSA_SPLITBLOCK_FOR_LOCAL_LIVE).append("\n");
1760 result.append("\tssa_splitblock_into_infrequent = ").append(SSA_SPLITBLOCK_INTO_INFREQUENT).append("\n");
1761 result.append("\treorder_code = ").append(REORDER_CODE).append("\n");
1762 result.append("\treorder_code_ph = ").append(REORDER_CODE_PH).append("\n");
1763 result.append("\th2l_inline_new = ").append(H2L_INLINE_NEW).append("\n");
1764 result.append("\th2l_inline_write_barrier = ").append(H2L_INLINE_WRITE_BARRIER).append("\n");
1765 result.append("\th2l_inline_primitive_write_barrier = ").append(H2L_INLINE_PRIMITIVE_WRITE_BARRIER).append("\n");
1766 result.append("\th2l_no_callee_exceptions = ").append(H2L_NO_CALLEE_EXCEPTIONS).append("\n");
1767 result.append("\th2l_call_via_jtoc = ").append(H2L_CALL_VIA_JTOC).append("\n");
1768 result.append("\tl2m_handler_liveness = ").append(L2M_HANDLER_LIVENESS).append("\n");
1769 result.append("\tl2m_schedule_prepass = ").append(L2M_SCHEDULE_PREPASS).append("\n");
1770 result.append("\tregalloc_coalesce_moves = ").append(REGALLOC_COALESCE_MOVES).append("\n");
1771 result.append("\tregalloc_coalesce_spills = ").append(REGALLOC_COALESCE_SPILLS).append("\n");
1772 result.append("\tadaptive_instrumentation_sampling = ").append(ADAPTIVE_INSTRUMENTATION_SAMPLING).append("\n");
1773 result.append("\tadaptive_no_duplication = ").append(ADAPTIVE_NO_DUPLICATION).append("\n");
1774 result.append("\tadaptive_processor_specific_counter = ").append(ADAPTIVE_PROCESSOR_SPECIFIC_COUNTER).append("\n");
1775 result.append("\tadaptive_remove_yp_from_checking = ").append(ADAPTIVE_REMOVE_YP_FROM_CHECKING).append("\n");
1776 result.append("\tosr_guarded_inlining = ").append(OSR_GUARDED_INLINING).append("\n");
1777 result.append("\tosr_inline_policy = ").append(OSR_INLINE_POLICY).append("\n");
1778 result.append("\tprint_static_stats = ").append(PRINT_STATIC_STATS).append("\n");
1779 result.append("\tprint_phases = ").append(PRINT_PHASES).append("\n");
1780 result.append("\tprint_all_ir = ").append(PRINT_ALL_IR).append("\n");
1781 result.append("\tprint_detailed_inline_report = ").append(PRINT_DETAILED_INLINE_REPORT).append("\n");
1782 result.append("\tprint_inline_report = ").append(PRINT_INLINE_REPORT).append("\n");
1783 result.append("\tprint_dom = ").append(PRINT_DOMINATORS).append("\n");
1784 result.append("\tprint_pdom = ").append(PRINT_POST_DOMINATORS).append("\n");
1785 result.append("\tprint_ssa = ").append(PRINT_SSA).append("\n");
1786 result.append("\tprint_dg_burs = ").append(PRINT_DG_BURS).append("\n");
1787 result.append("\tprint_dg_sched_pre = ").append(PRINT_DG_SCHED_PRE).append("\n");
1788 result.append("\tprint_dg_sched_post = ").append(PRINT_DG_SCHED_POST).append("\n");
1789 result.append("\tprint_coal = ").append(PRINT_COALESCING).append("\n");
1790 result.append("\tprint_high = ").append(PRINT_HIGH).append("\n");
1791 result.append("\tprint_final_hir = ").append(PRINT_FINAL_HIR).append("\n");
1792 result.append("\tprint_low = ").append(PRINT_LOW).append("\n");
1793 result.append("\tprint_final_lir = ").append(PRINT_FINAL_LIR).append("\n");
1794 result.append("\tprint_mir = ").append(PRINT_MIR).append("\n");
1795 result.append("\tprint_final_mir = ").append(PRINT_FINAL_MIR).append("\n");
1796 result.append("\tprint_cfg = ").append(PRINT_CFG).append("\n");
1797 result.append("\tprint_schedule_pre = ").append(PRINT_SCHEDULE_PRE).append("\n");
1798 result.append("\tprint_schedule_post = ").append(PRINT_SCHEDULE_POST).append("\n");
1799 result.append("\tprint_regalloc = ").append(PRINT_REGALLOC).append("\n");
1800 result.append("\tprint_calling_conventions = ").append(PRINT_CALLING_CONVENTIONS).append("\n");
1801 result.append("\tprint_gc_maps = ").append(PRINT_GC_MAPS).append("\n");
1802 result.append("\tdebug_cgd = ").append(DEBUG_CODEGEN).append("\n");
1803 result.append("\tdebug_instru_sampling = ").append(DEBUG_INSTRU_SAMPLING).append("\n");
1804 result.append("\tdebug_instru_sampling_detail = ").append(DEBUG_INSTRU_SAMPLING_DETAIL).append("\n");
1805 result.append("\tdebug_gcp = ").append(DEBUG_GCP).append("\n");
1806 result.append("\tverbose = ").append(PRINT_METHOD).append("\n");
1807 result.append("\tmc = ").append(PRINT_MACHINECODE).append("\n");
1808 result.append("\tprint_ir_level = ").append(PRINT_IR_LEVEL).append("\n");
1809 result.append("\tprofile_edge_count_input_file = ").append(PROFILE_EDGE_COUNT_INPUT_FILE).append("\n");
1810 result.append("\tprofile_infrequent_threshold = ").append(PROFILE_INFREQUENT_THRESHOLD).append("\n");
1811 result.append("\tprofile_cbs_hotness = ").append(PROFILE_CBS_HOTNESS).append("\n");
1812 result.append("\tescape_max_array_size = ").append(ESCAPE_MAX_ARRAY_SIZE).append("\n");
1813 result.append("\tssa_load_elimination_rounds = ").append(SSA_LOAD_ELIMINATION_ROUNDS).append("\n");
1814 result.append("\tl2m_max_block_size = ").append(L2M_MAX_BLOCK_SIZE).append("\n");
1815 result.append("\tregalloc_simple_spill_cost_move_factor = ").append(REGALLOC_SIMPLE_SPILL_COST_MOVE_FACTOR).append("\n");
1816 result.append("\tregalloc_simple_spill_cost_memory_operand_factor = ").append(REGALLOC_SIMPLE_SPILL_COST_MEMORY_OPERAND_FACTOR).append("\n");
1817 result.append("\tcontrol_tableswitch_cutoff = ").append(CONTROL_TABLESWITCH_CUTOFF).append("\n");
1818 result.append("\tcontrol_cond_move_cutoff = ").append(CONTROL_COND_MOVE_CUTOFF).append("\n");
1819 result.append("\tcontrol_unroll_log = ").append(CONTROL_UNROLL_LOG).append("\n");
1820 result.append("\tcontrol_static_splitting_max_cost = ").append(CONTROL_STATIC_SPLITTING_MAX_COST).append("\n");
1821 result.append("\tcontrol_well_predicted_cutoff = ").append(CONTROL_WELL_PREDICTED_CUTOFF).append("\n");
1822 result.append("\tinline_max_target_size = ").append(INLINE_MAX_TARGET_SIZE).append("\n");
1823 result.append("\tinline_max_inline_depth = ").append(INLINE_MAX_INLINE_DEPTH).append("\n");
1824 result.append("\tinline_max_always_inline_target_size = ").append(INLINE_MAX_ALWAYS_INLINE_TARGET_SIZE).append("\n");
1825 result.append("\tinline_massive_method_size = ").append(INLINE_MASSIVE_METHOD_SIZE).append("\n");
1826 result.append("\tinline_max_arg_bonus = ").append(INLINE_MAX_ARG_BONUS).append("\n");
1827 result.append("\tinline_precise_reg_array_arg_bonus = ").append(INLINE_PRECISE_REG_ARRAY_ARG_BONUS).append("\n");
1828 result.append("\tinline_declared_aastored_array_arg_bonus = ").append(INLINE_DECLARED_AASTORED_ARRAY_ARG_BONUS).append("\n");
1829 result.append("\tinline_precise_reg_class_arg_bonus = ").append(INLINE_PRECISE_REG_CLASS_ARG_BONUS).append("\n");
1830 result.append("\tinline_extant_reg_class_arg_bonus = ").append(INLINE_EXTANT_REG_CLASS_ARG_BONUS).append("\n");
1831 result.append("\tinline_int_const_arg_bonus = ").append(INLINE_INT_CONST_ARG_BONUS).append("\n");
1832 result.append("\tinline_null_const_arg_bonus = ").append(INLINE_NULL_CONST_ARG_BONUS).append("\n");
1833 result.append("\tinline_object_const_arg_bonus = ").append(INLINE_OBJECT_CONST_ARG_BONUS).append("\n");
1834 result.append("\tinline_call_depth_cost = ").append(INLINE_CALL_DEPTH_COST).append("\n");
1835 result.append("\tinline_ai_max_target_size = ").append(INLINE_AI_MAX_TARGET_SIZE).append("\n");
1836 result.append("\tinline_ai_min_callsite_fraction = ").append(INLINE_AI_MIN_CALLSITE_FRACTION).append("\n");
1837 if (PROFILE_FREQUENCY_STRATEGY == PROFILE_COUNTERS_FREQ)
1838 result.append("\tprofile_frequency_strategy = PROFILE_COUNTERS_FREQ").append("\n");
1839 if (PROFILE_FREQUENCY_STRATEGY == PROFILE_STATIC_FREQ)
1840 result.append("\tprofile_frequency_strategy = PROFILE_STATIC_FREQ").append("\n");
1841 if (PROFILE_FREQUENCY_STRATEGY == PROFILE_DUMB_FREQ)
1842 result.append("\tprofile_frequency_strategy = PROFILE_DUMB_FREQ").append("\n");
1843 if (PROFILE_FREQUENCY_STRATEGY == PROFILE_INVERSE_COUNTERS_FREQ)
1844 result.append("\tprofile_frequency_strategy = PROFILE_INVERSE_COUNTERS_FREQ").append("\n");
1845 if (REGALLOC_SPILL_COST_ESTIMATE == REGALLOC_SIMPLE_SPILL_COST)
1846 result.append("\tregalloc_spill_cost_estimate = REGALLOC_SIMPLE_SPILL_COST").append("\n");
1847 if (REGALLOC_SPILL_COST_ESTIMATE == REGALLOC_BRAINDEAD_SPILL_COST)
1848 result.append("\tregalloc_spill_cost_estimate = REGALLOC_BRAINDEAD_SPILL_COST").append("\n");
1849 if (REGALLOC_SPILL_COST_ESTIMATE == REGALLOC_BLOCK_COUNT_SPILL_COST)
1850 result.append("\tregalloc_spill_cost_estimate = REGALLOC_BLOCK_COUNT_SPILL_COST").append("\n");
1851 if (INLINE_GUARD_KIND == INLINE_GUARD_METHOD_TEST)
1852 result.append("\tinline_guard_kind = INLINE_GUARD_METHOD_TEST").append("\n");
1853 if (INLINE_GUARD_KIND == INLINE_GUARD_CLASS_TEST)
1854 result.append("\tinline_guard_kind = INLINE_GUARD_CLASS_TEST").append("\n");
1855 if (INLINE_GUARD_KIND == INLINE_GUARD_CODE_PATCH)
1856 result.append("\tinline_guard_kind = INLINE_GUARD_CODE_PATCH").append("\n");
1857 {
1858 String val = (DRIVER_EXCLUDE==null)?"[]":DRIVER_EXCLUDE.toString();
1859 result.append("\tdriver_exclude = ").append(val).append("\n");
1860 }
1861 {
1862 String val = (METHOD_TO_PRINT==null)?"[]":METHOD_TO_PRINT.toString();
1863 result.append("\tmethod_to_print = ").append(val).append("\n");
1864 }
1865 return result.toString();
1866 //End generated toString()
1867 }
1868
1869 /** print a String value of this options object */
1870 @org.vmmagic.pragma.NoOptCompile
1871 public void printOptions() {
1872 printOptionsHeader();
1873
1874 // Begin generated option value printing
1875 VM.sysWriteln("\tfocus_effort = ",FREQ_FOCUS_EFFORT);
1876 VM.sysWriteln("\treads_kill = ",READS_KILL);
1877 VM.sysWriteln("\tfield_analysis = ",FIELD_ANALYSIS);
1878 VM.sysWriteln("\tinline = ",INLINE);
1879 VM.sysWriteln("\tinline_guarded = ",INLINE_GUARDED);
1880 VM.sysWriteln("\tinline_guarded_interfaces = ",INLINE_GUARDED_INTERFACES);
1881 VM.sysWriteln("\tinline_preex = ",INLINE_PREEX);
1882 VM.sysWriteln("\tsimplify_integer_ops = ",SIMPLIFY_INTEGER_OPS);
1883 VM.sysWriteln("\tsimplify_long_ops = ",SIMPLIFY_LONG_OPS);
1884 VM.sysWriteln("\tsimplify_float_ops = ",SIMPLIFY_FLOAT_OPS);
1885 VM.sysWriteln("\tsimplify_double_ops = ",SIMPLIFY_DOUBLE_OPS);
1886 VM.sysWriteln("\tsimplify_ref_ops = ",SIMPLIFY_REF_OPS);
1887 VM.sysWriteln("\tsimplify_tib_ops = ",SIMPLIFY_TIB_OPS);
1888 VM.sysWriteln("\tsimplify_field_ops = ",SIMPLIFY_FIELD_OPS);
1889 VM.sysWriteln("\tsimplify_chase_final_fields = ",SIMPLIFY_CHASE_FINAL_FIELDS);
1890 VM.sysWriteln("\tlocal_constant_prop = ",LOCAL_CONSTANT_PROP);
1891 VM.sysWriteln("\tlocal_copy_prop = ",LOCAL_COPY_PROP);
1892 VM.sysWriteln("\tlocal_cse = ",LOCAL_CSE);
1893 VM.sysWriteln("\tlocal_expression_folding = ",LOCAL_EXPRESSION_FOLDING);
1894 VM.sysWriteln("\tcontrol_static_splitting = ",CONTROL_STATIC_SPLITTING);
1895 VM.sysWriteln("\tcontrol_unwhile = ",CONTROL_TURN_WHILES_INTO_UNTILS);
1896 VM.sysWriteln("\tescape_simple_ipa = ",ESCAPE_SIMPLE_IPA);
1897 VM.sysWriteln("\tescape_scalar_replace_aggregates = ",ESCAPE_SCALAR_REPLACE_AGGREGATES);
1898 VM.sysWriteln("\tescape_monitor_removal = ",ESCAPE_MONITOR_REMOVAL);
1899 VM.sysWriteln("\tescape_invokee_thread_local = ",ESCAPE_INVOKEE_THREAD_LOCAL);
1900 VM.sysWriteln("\tssa = ",SSA);
1901 VM.sysWriteln("\tssa_expression_folding = ",SSA_EXPRESSION_FOLDING);
1902 VM.sysWriteln("\tssa_redundant_branch_elimination = ",SSA_REDUNDANT_BRANCH_ELIMINATION);
1903 VM.sysWriteln("\tssa_licm_ignore_pei = ",SSA_LICM_IGNORE_PEI);
1904 VM.sysWriteln("\tssa_load_elimination = ",SSA_LOAD_ELIMINATION);
1905 VM.sysWriteln("\tssa_coalesce_after = ",SSA_COALESCE_AFTER);
1906 VM.sysWriteln("\tssa_loop_versioning = ",SSA_LOOP_VERSIONING);
1907 VM.sysWriteln("\tssa_live_range_splitting = ",SSA_LIVE_RANGE_SPLITTING);
1908 VM.sysWriteln("\tssa_gcp = ",SSA_GCP);
1909 VM.sysWriteln("\tssa_gcse = ",SSA_GCSE);
1910 VM.sysWriteln("\tssa_global_bounds = ",SSA_GLOBAL_BOUNDS_CHECK);
1911 VM.sysWriteln("\tssa_splitblock_to_avoid_rename = ",SSA_SPLITBLOCK_TO_AVOID_RENAME);
1912 VM.sysWriteln("\tssa_splitblock_for_local_live = ",SSA_SPLITBLOCK_FOR_LOCAL_LIVE);
1913 VM.sysWriteln("\tssa_splitblock_into_infrequent = ",SSA_SPLITBLOCK_INTO_INFREQUENT);
1914 VM.sysWriteln("\treorder_code = ",REORDER_CODE);
1915 VM.sysWriteln("\treorder_code_ph = ",REORDER_CODE_PH);
1916 VM.sysWriteln("\th2l_inline_new = ",H2L_INLINE_NEW);
1917 VM.sysWriteln("\th2l_inline_write_barrier = ",H2L_INLINE_WRITE_BARRIER);
1918 VM.sysWriteln("\th2l_inline_primitive_write_barrier = ",H2L_INLINE_PRIMITIVE_WRITE_BARRIER);
1919 VM.sysWriteln("\th2l_no_callee_exceptions = ",H2L_NO_CALLEE_EXCEPTIONS);
1920 VM.sysWriteln("\th2l_call_via_jtoc = ",H2L_CALL_VIA_JTOC);
1921 VM.sysWriteln("\tl2m_handler_liveness = ",L2M_HANDLER_LIVENESS);
1922 VM.sysWriteln("\tl2m_schedule_prepass = ",L2M_SCHEDULE_PREPASS);
1923 VM.sysWriteln("\tregalloc_coalesce_moves = ",REGALLOC_COALESCE_MOVES);
1924 VM.sysWriteln("\tregalloc_coalesce_spills = ",REGALLOC_COALESCE_SPILLS);
1925 VM.sysWriteln("\tadaptive_instrumentation_sampling = ",ADAPTIVE_INSTRUMENTATION_SAMPLING);
1926 VM.sysWriteln("\tadaptive_no_duplication = ",ADAPTIVE_NO_DUPLICATION);
1927 VM.sysWriteln("\tadaptive_processor_specific_counter = ",ADAPTIVE_PROCESSOR_SPECIFIC_COUNTER);
1928 VM.sysWriteln("\tadaptive_remove_yp_from_checking = ",ADAPTIVE_REMOVE_YP_FROM_CHECKING);
1929 VM.sysWriteln("\tosr_guarded_inlining = ",OSR_GUARDED_INLINING);
1930 VM.sysWriteln("\tosr_inline_policy = ",OSR_INLINE_POLICY);
1931 VM.sysWriteln("\tprint_static_stats = ",PRINT_STATIC_STATS);
1932 VM.sysWriteln("\tprint_phases = ",PRINT_PHASES);
1933 VM.sysWriteln("\tprint_all_ir = ",PRINT_ALL_IR);
1934 VM.sysWriteln("\tprint_detailed_inline_report = ",PRINT_DETAILED_INLINE_REPORT);
1935 VM.sysWriteln("\tprint_inline_report = ",PRINT_INLINE_REPORT);
1936 VM.sysWriteln("\tprint_dom = ",PRINT_DOMINATORS);
1937 VM.sysWriteln("\tprint_pdom = ",PRINT_POST_DOMINATORS);
1938 VM.sysWriteln("\tprint_ssa = ",PRINT_SSA);
1939 VM.sysWriteln("\tprint_dg_burs = ",PRINT_DG_BURS);
1940 VM.sysWriteln("\tprint_dg_sched_pre = ",PRINT_DG_SCHED_PRE);
1941 VM.sysWriteln("\tprint_dg_sched_post = ",PRINT_DG_SCHED_POST);
1942 VM.sysWriteln("\tprint_coal = ",PRINT_COALESCING);
1943 VM.sysWriteln("\tprint_high = ",PRINT_HIGH);
1944 VM.sysWriteln("\tprint_final_hir = ",PRINT_FINAL_HIR);
1945 VM.sysWriteln("\tprint_low = ",PRINT_LOW);
1946 VM.sysWriteln("\tprint_final_lir = ",PRINT_FINAL_LIR);
1947 VM.sysWriteln("\tprint_mir = ",PRINT_MIR);
1948 VM.sysWriteln("\tprint_final_mir = ",PRINT_FINAL_MIR);
1949 VM.sysWriteln("\tprint_cfg = ",PRINT_CFG);
1950 VM.sysWriteln("\tprint_schedule_pre = ",PRINT_SCHEDULE_PRE);
1951 VM.sysWriteln("\tprint_schedule_post = ",PRINT_SCHEDULE_POST);
1952 VM.sysWriteln("\tprint_regalloc = ",PRINT_REGALLOC);
1953 VM.sysWriteln("\tprint_calling_conventions = ",PRINT_CALLING_CONVENTIONS);
1954 VM.sysWriteln("\tprint_gc_maps = ",PRINT_GC_MAPS);
1955 VM.sysWriteln("\tdebug_cgd = ",DEBUG_CODEGEN);
1956 VM.sysWriteln("\tdebug_instru_sampling = ",DEBUG_INSTRU_SAMPLING);
1957 VM.sysWriteln("\tdebug_instru_sampling_detail = ",DEBUG_INSTRU_SAMPLING_DETAIL);
1958 VM.sysWriteln("\tdebug_gcp = ",DEBUG_GCP);
1959 VM.sysWriteln("\tverbose = ",PRINT_METHOD);
1960 VM.sysWriteln("\tmc = ",PRINT_MACHINECODE);
1961 VM.sysWriteln("\tprint_ir_level = ",PRINT_IR_LEVEL);
1962 VM.sysWriteln("\tprofile_edge_count_input_file = ",PROFILE_EDGE_COUNT_INPUT_FILE);
1963 VM.sysWriteln("\tprofile_infrequent_threshold = ",PROFILE_INFREQUENT_THRESHOLD);
1964 VM.sysWriteln("\tprofile_cbs_hotness = ",PROFILE_CBS_HOTNESS);
1965 VM.sysWriteln("\tescape_max_array_size = ",ESCAPE_MAX_ARRAY_SIZE);
1966 VM.sysWriteln("\tssa_load_elimination_rounds = ",SSA_LOAD_ELIMINATION_ROUNDS);
1967 VM.sysWriteln("\tl2m_max_block_size = ",L2M_MAX_BLOCK_SIZE);
1968 VM.sysWriteln("\tregalloc_simple_spill_cost_move_factor = ",REGALLOC_SIMPLE_SPILL_COST_MOVE_FACTOR);
1969 VM.sysWriteln("\tregalloc_simple_spill_cost_memory_operand_factor = ",REGALLOC_SIMPLE_SPILL_COST_MEMORY_OPERAND_FACTOR);
1970 VM.sysWriteln("\tcontrol_tableswitch_cutoff = ",CONTROL_TABLESWITCH_CUTOFF);
1971 VM.sysWriteln("\tcontrol_cond_move_cutoff = ",CONTROL_COND_MOVE_CUTOFF);
1972 VM.sysWriteln("\tcontrol_unroll_log = ",CONTROL_UNROLL_LOG);
1973 VM.sysWriteln("\tcontrol_static_splitting_max_cost = ",CONTROL_STATIC_SPLITTING_MAX_COST);
1974 VM.sysWriteln("\tcontrol_well_predicted_cutoff = ",CONTROL_WELL_PREDICTED_CUTOFF);
1975 VM.sysWriteln("\tinline_max_target_size = ",INLINE_MAX_TARGET_SIZE);
1976 VM.sysWriteln("\tinline_max_inline_depth = ",INLINE_MAX_INLINE_DEPTH);
1977 VM.sysWriteln("\tinline_max_always_inline_target_size = ",INLINE_MAX_ALWAYS_INLINE_TARGET_SIZE);
1978 VM.sysWriteln("\tinline_massive_method_size = ",INLINE_MASSIVE_METHOD_SIZE);
1979 VM.sysWriteln("\tinline_max_arg_bonus = ",INLINE_MAX_ARG_BONUS);
1980 VM.sysWriteln("\tinline_precise_reg_array_arg_bonus = ",INLINE_PRECISE_REG_ARRAY_ARG_BONUS);
1981 VM.sysWriteln("\tinline_declared_aastored_array_arg_bonus = ",INLINE_DECLARED_AASTORED_ARRAY_ARG_BONUS);
1982 VM.sysWriteln("\tinline_precise_reg_class_arg_bonus = ",INLINE_PRECISE_REG_CLASS_ARG_BONUS);
1983 VM.sysWriteln("\tinline_extant_reg_class_arg_bonus = ",INLINE_EXTANT_REG_CLASS_ARG_BONUS);
1984 VM.sysWriteln("\tinline_int_const_arg_bonus = ",INLINE_INT_CONST_ARG_BONUS);
1985 VM.sysWriteln("\tinline_null_const_arg_bonus = ",INLINE_NULL_CONST_ARG_BONUS);
1986 VM.sysWriteln("\tinline_object_const_arg_bonus = ",INLINE_OBJECT_CONST_ARG_BONUS);
1987 VM.sysWriteln("\tinline_call_depth_cost = ",INLINE_CALL_DEPTH_COST);
1988 VM.sysWriteln("\tinline_ai_max_target_size = ",INLINE_AI_MAX_TARGET_SIZE);
1989 VM.sysWriteln("\tinline_ai_min_callsite_fraction = ",INLINE_AI_MIN_CALLSITE_FRACTION);
1990 if (PROFILE_FREQUENCY_STRATEGY == PROFILE_COUNTERS_FREQ)
1991 VM.sysWriteln("\tprofile_frequency_strategy = PROFILE_COUNTERS_FREQ");
1992 if (PROFILE_FREQUENCY_STRATEGY == PROFILE_STATIC_FREQ)
1993 VM.sysWriteln("\tprofile_frequency_strategy = PROFILE_STATIC_FREQ");
1994 if (PROFILE_FREQUENCY_STRATEGY == PROFILE_DUMB_FREQ)
1995 VM.sysWriteln("\tprofile_frequency_strategy = PROFILE_DUMB_FREQ");
1996 if (PROFILE_FREQUENCY_STRATEGY == PROFILE_INVERSE_COUNTERS_FREQ)
1997 VM.sysWriteln("\tprofile_frequency_strategy = PROFILE_INVERSE_COUNTERS_FREQ");
1998 if (REGALLOC_SPILL_COST_ESTIMATE == REGALLOC_SIMPLE_SPILL_COST)
1999 VM.sysWriteln("\tregalloc_spill_cost_estimate = REGALLOC_SIMPLE_SPILL_COST");
2000 if (REGALLOC_SPILL_COST_ESTIMATE == REGALLOC_BRAINDEAD_SPILL_COST)
2001 VM.sysWriteln("\tregalloc_spill_cost_estimate = REGALLOC_BRAINDEAD_SPILL_COST");
2002 if (REGALLOC_SPILL_COST_ESTIMATE == REGALLOC_BLOCK_COUNT_SPILL_COST)
2003 VM.sysWriteln("\tregalloc_spill_cost_estimate = REGALLOC_BLOCK_COUNT_SPILL_COST");
2004 if (INLINE_GUARD_KIND == INLINE_GUARD_METHOD_TEST)
2005 VM.sysWriteln("\tinline_guard_kind = INLINE_GUARD_METHOD_TEST");
2006 if (INLINE_GUARD_KIND == INLINE_GUARD_CLASS_TEST)
2007 VM.sysWriteln("\tinline_guard_kind = INLINE_GUARD_CLASS_TEST");
2008 if (INLINE_GUARD_KIND == INLINE_GUARD_CODE_PATCH)
2009 VM.sysWriteln("\tinline_guard_kind = INLINE_GUARD_CODE_PATCH");
2010 {
2011 String val = (DRIVER_EXCLUDE==null)?"[]":DRIVER_EXCLUDE.toString();
2012 VM.sysWriteln("\tdriver_exclude = ", val);
2013 }
2014 {
2015 String val = (METHOD_TO_PRINT==null)?"[]":METHOD_TO_PRINT.toString();
2016 VM.sysWriteln("\tmethod_to_print = ", val);
2017 }
2018 //End generated option value printing
2019 }
2020 // END CODE GENERATED FROM MasterOptions.template
2021
2022 private boolean instanceProcessAsOption(String arg) {
2023 if (arg.startsWith("O")) {
2024 try {
2025 setOptLevel(Integer.parseInt(arg.substring(1)));
2026 } catch (NumberFormatException e) {
2027 return false;
2028 }
2029 return true;
2030 }
2031 return false;
2032 }
2033
2034 private static void instancePrintHelpHeader(String prefix) {
2035 VM.sysWrite("Commands\n");
2036 VM.sysWrite(prefix+"[help]\t\t\tPrint brief description of opt compiler's command-line arguments\n");
2037 VM.sysWrite(prefix+"printOptions\t\tPrint the current values of opt compiler options\n");
2038 if (prefix.indexOf("irc")!=-1 || prefix.indexOf("bc")!=-1 || prefix.indexOf("eoc")!=-1) {
2039 VM.sysWrite(prefix+"O0\t\t\tSelect optimization level 0, minimal optimizations\n");
2040 VM.sysWrite(prefix+"O1\t\t\tSelect optimization level 1, modest optimizations\n");
2041 VM.sysWrite(prefix+"O2\t\t\tSelect optimization level 2\n");
2042 }
2043 VM.sysWrite("\n");
2044 }
2045
2046
2047 private static void instancePrintHelpFooter(String prefix) {
2048 }
2049
2050
2051 /** accessor to get OPT level */
2052 public int getOptLevel() {
2053 return OPTIMIZATION_LEVEL;
2054 }
2055
2056 /**
2057 * Set the options to encode the optimizations enabled at the given opt label
2058 * and disabled all optimizations that are not enabled at the given opt label
2059 */
2060 public void setOptLevel(int level) {
2061 OPTIMIZATION_LEVEL = level;
2062 // Begin generated opt-level logic
2063 if (level >= 0)
2064 FIELD_ANALYSIS = true;
2065 else
2066 FIELD_ANALYSIS = false;
2067 if (level >= 0)
2068 INLINE = true;
2069 else
2070 INLINE = false;
2071 if (level >= 0)
2072 INLINE_GUARDED = true;
2073 else
2074 INLINE_GUARDED = false;
2075 if (level >= 0)
2076 INLINE_GUARDED_INTERFACES = true;
2077 else
2078 INLINE_GUARDED_INTERFACES = false;
2079 if (level >= 0)
2080 INLINE_PREEX = true;
2081 else
2082 INLINE_PREEX = false;
2083 if (level >= 0)
2084 LOCAL_CONSTANT_PROP = true;
2085 else
2086 LOCAL_CONSTANT_PROP = false;
2087 if (level >= 0)
2088 LOCAL_COPY_PROP = true;
2089 else
2090 LOCAL_COPY_PROP = false;
2091 if (level >= 0)
2092 LOCAL_CSE = true;
2093 else
2094 LOCAL_CSE = false;
2095 if (level >= 3)
2096 LOCAL_EXPRESSION_FOLDING = true;
2097 else
2098 LOCAL_EXPRESSION_FOLDING = false;
2099 if (level >= 1)
2100 CONTROL_STATIC_SPLITTING = true;
2101 else
2102 CONTROL_STATIC_SPLITTING = false;
2103 if (level >= 3)
2104 CONTROL_TURN_WHILES_INTO_UNTILS = true;
2105 else
2106 CONTROL_TURN_WHILES_INTO_UNTILS = false;
2107 if (level >= 1)
2108 ESCAPE_SCALAR_REPLACE_AGGREGATES = true;
2109 else
2110 ESCAPE_SCALAR_REPLACE_AGGREGATES = false;
2111 if (level >= 1)
2112 ESCAPE_MONITOR_REMOVAL = true;
2113 else
2114 ESCAPE_MONITOR_REMOVAL = false;
2115 if (level >= 3)
2116 SSA = true;
2117 else
2118 SSA = false;
2119 if (level >= 3)
2120 SSA_EXPRESSION_FOLDING = true;
2121 else
2122 SSA_EXPRESSION_FOLDING = false;
2123 if (level >= 3)
2124 SSA_REDUNDANT_BRANCH_ELIMINATION = true;
2125 else
2126 SSA_REDUNDANT_BRANCH_ELIMINATION = false;
2127 if (level >= 3)
2128 SSA_LOAD_ELIMINATION = true;
2129 else
2130 SSA_LOAD_ELIMINATION = false;
2131 if (level >= 3)
2132 SSA_COALESCE_AFTER = true;
2133 else
2134 SSA_COALESCE_AFTER = false;
2135 if (level >= 3)
2136 SSA_GCP = true;
2137 else
2138 SSA_GCP = false;
2139 if (level >= 3)
2140 SSA_GCSE = true;
2141 else
2142 SSA_GCSE = false;
2143 if (level >= 0)
2144 REORDER_CODE = true;
2145 else
2146 REORDER_CODE = false;
2147 if (level >= 1)
2148 REORDER_CODE_PH = true;
2149 else
2150 REORDER_CODE_PH = false;
2151 if (level >= 0)
2152 H2L_INLINE_NEW = true;
2153 else
2154 H2L_INLINE_NEW = false;
2155 if (level >= 1)
2156 H2L_INLINE_WRITE_BARRIER = true;
2157 else
2158 H2L_INLINE_WRITE_BARRIER = false;
2159 if (level >= 1)
2160 H2L_INLINE_PRIMITIVE_WRITE_BARRIER = true;
2161 else
2162 H2L_INLINE_PRIMITIVE_WRITE_BARRIER = false;
2163 if (level >= 2)
2164 L2M_HANDLER_LIVENESS = true;
2165 else
2166 L2M_HANDLER_LIVENESS = false;
2167 if (level >= 0)
2168 REGALLOC_COALESCE_MOVES = true;
2169 else
2170 REGALLOC_COALESCE_MOVES = false;
2171 if (level >= 0)
2172 REGALLOC_COALESCE_SPILLS = true;
2173 else
2174 REGALLOC_COALESCE_SPILLS = false;
2175 if (level >= 1)
2176 OSR_GUARDED_INLINING = true;
2177 else
2178 OSR_GUARDED_INLINING = false;
2179 if (level >= 1)
2180 OSR_INLINE_POLICY = true;
2181 else
2182 OSR_INLINE_POLICY = false;
2183 // End generated opt-level logic
2184 }
2185 }