OpenADFortTk (including Open64 and OpenAnalysis references)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
config_wopt.cxx
Go to the documentation of this file.
1 /*
2 
3  Copyright (C) 2000, 2001 Silicon Graphics, Inc. All Rights Reserved.
4 
5  This program is free software; you can redistribute it and/or modify it
6  under the terms of version 2 of the GNU General Public License as
7  published by the Free Software Foundation.
8 
9  This program is distributed in the hope that it would be useful, but
10  WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 
13  Further, this software is distributed without any warranty that it is
14  free of the rightful claim of any third person regarding infringement
15  or the like. Any license provided herein, whether implied or
16  otherwise, applies only to this software file. Patent licenses, if
17  any, provided herein do not apply to combinations of this program with
18  other software, or any other product whatsoever.
19 
20  You should have received a copy of the GNU General Public License along
21  with this program; if not, write the Free Software Foundation, Inc., 59
22  Temple Place - Suite 330, Boston MA 02111-1307, USA.
23 
24  Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pky,
25  Mountain View, CA 94043, or:
26 
27  http://www.sgi.com
28 
29  For further information regarding this notice, see:
30 
31  http://oss.sgi.com/projects/GenInfo/NoticeExplan
32 
33 */
34 
35 
36 /* ====================================================================
37  * ====================================================================
38  *
39  *
40  * Revision history:
41  * 08-Sep-94 - Original Version (wodriver.c)
42  * 05-May-96 - config_wopt.c extracted from wodriver.c
43  *
44  * Description:
45  *
46  * Configure the -WOPT group (included in config.c).
47  * Used from ipl, inline, ipa (ld), and be.
48  *
49  * ====================================================================
50  * ====================================================================
51  */
52 
53 // This file is included in config.cxx, so it doesn't need its own set of
54 // standard includes -- only the following:
55 #include "config_wopt.h"
56 
57 
58 /* ====================================================================
59  *
60  * Global flag variables which reflect the -WOPT group options.
61  *
62  * ====================================================================
63  */
64 
65 /* List of global variables to turn on and off various optimizations */
85 BOOL WOPT_Enable_Avoid_Rehash = FALSE; /* SSAPRE to minimize rehashing */
93 BOOL WOPT_Enable_Compare_Simp = TRUE; /* simplify comparisons */
97 BOOL WOPT_Enable_Copy_Prop_Bad_Ops = FALSE; /* copy prop ops that strength-reduction can't handle */
99 BOOL WOPT_Enable_Copy_Prop_LNO_Ops = FALSE; /* copy prop ops that LNO can't handle */
100 /* copy prop certain ops into ARRAY subscripts (enabled for mainopt) */
104 BOOL WOPT_Enable_DIVREM = TRUE; /* allow divrem opcode */
141 INT32 WOPT_Enable_IVR_Expand_Limit = 1000; /* expand 1000 statements */
147 #ifdef TARG_MIPS
149 #else
151 #endif
158 BOOL WOPT_Enable_MINMAX = TRUE; /* allow minmax opcode */
171 BOOL WOPT_Enable_Prop_CSE = FALSE; /* propagate CSE expressions */
172 INT32 WOPT_Enable_Prop_Limit = 14; /* this is a guess, PV 468862 */
173 BOOL WOPT_Enable_Prune = TRUE; /* temporary, PV 370066 */
177 INT32 WOPT_Enable_Rsv_Bits = 16; /* reserve bit count in itable */
178 BOOL WOPT_Enable_RVI = TRUE; /* perform both rvi1 and rvi2 */
179 BOOL WOPT_Enable_RVI1 = TRUE; /* phase 1 of rvi */
180 BOOL WOPT_Enable_RVI2 = TRUE; /* phase 2 of rvi */
181 BOOL WOPT_Enable_Rviistore = TRUE; /* agg. chi-handling on istore*/
182 char *WOPT_Enable_Rviskip = NULL; /* skip this var during RVI */
183 BOOL WOPT_Enable_Rvisplit = FALSE; /* split bbs at every stmt */
184 BOOL WOPT_Enable_Rvivsym = TRUE; /* ignore vsym in chi lists */
187 char *WOPT_Enable_Skip = NULL; /* Name of function to skip */
188 OPTION_LIST *WOPT_Skip = NULL; /* Skip option list */
189 SKIPLIST *WOPT_Skip_List = NULL; /* Processed skiplist */
191 BOOL WOPT_Enable_Small_Br_Target = FALSE; /* propagation into branch BBs */
192 BOOL WOPT_Enable_Simple_If_Conv = TRUE; /* simple if-conversion at CFG build time */
194 BOOL WOPT_Enable_SSA_Minimization = TRUE; /* SSA minimization in SSAPRE */
202 INT32 WOPT_Enable_Value_Numbering = 1; /* 0=OFF, 1=after_pre, 2=befr_n_aftr */
203 INT32 WOPT_Enable_Vn_Ivc = 1; /* 0=OFF, see be/opt/opt_vn_ivc.h */
204 UINT32 WOPT_Enable_Vnfre_After = 0; /* Disable vnfre after given valnum */
205 UINT32 WOPT_Enable_Vnfre_Before = UINT32_MAX; /* Disable before given valnum */
216 BOOL WOPT_Enable_VN_Full = TRUE; /* full value number (for ivars) */
217 BOOL WOPT_Enable_Simp_Iload = TRUE; /* simplifier folding iload */
218 BOOL WOPT_Enable_Canon_Uplevel=FALSE; /* canonicalize the up level ref */
219 BOOL WOPT_Enable_Tail_Recur = FALSE; /* tail recursion */
220 BOOL WOPT_Enable_Edge_Placement = TRUE;/* insert BB on critical edge */
221 BOOL WOPT_Enable_Backedge_Placement = FALSE; /* insert BB on critical backedge */
222 BOOL WOPT_Enable_Source_Order = FALSE; /* Dump CFG in source order */
223 BOOL WOPT_Enable_Cvt_Folding = TRUE; /* enable cvt folding in emitter */
224 BOOL WOPT_Enable_Local_Rvi = TRUE; /* enable fast rvi of locals */
237 BOOL WOPT_Enable_CFG_Opt = TRUE; /* control flow optimization main switch */
240 INT32 WOPT_Enable_CFG_Opt2_Limit = 80; /* Loop butterfly should produce a min of 80% coverage */
245 BOOL WOPT_Enable_Bits_Load_Store = TRUE; // accept LDBITS, STBITS, etc.
246 BOOL WOPT_Enable_Epre_Before_Ivr = FALSE; // For running epre early
247 BOOL WOPT_Enable_Lpre_Before_Ivr = FALSE; // For running lpre early
248 BOOL WOPT_Enable_Spre_Before_Ivr = FALSE; // For running spre early
249 BOOL WOPT_Enable_Bdce_Before_Ivr = FALSE; // For running bdce early
250 BOOL WOPT_Enable_New_Phase_Ordering = TRUE; // Enables some phases before ivr
251 
252 
253 /* ====================================================================
254  *
255  * Descriptor for the -WOPT option group.
256  *
257  * ====================================================================
258  */
259 
260 /* scalar optimizer options:
261  see common/util/flags.h, typedef struct option_desc for documentation */
263  { OVK_UINT32, OV_INTERNAL, TRUE, "ac_limit", "",
265  { OVK_UINT32, OV_INTERNAL, TRUE, "ip_ac_limit", "",
267  { OVK_BOOL, OV_INTERNAL, TRUE, "add_do_loop_info", "add_do",
268  0, 0, 0, &WOPT_Enable_Add_Do_Loop_Info, NULL },
269  { OVK_BOOL, OV_INTERNAL, TRUE, "add_label_loop_info", "add_label",
271  { OVK_BOOL, OV_INTERNAL, TRUE, "aggcm", "aggcm",
273  { OVK_INT32, OV_INTERNAL, TRUE, "aggcm_limit", "",
275  { OVK_INT32, OV_INTERNAL, TRUE, "aggcm_threshold", "aggcm_thres",
277  { OVK_BOOL, OV_INTERNAL, TRUE, "agglftr", "agglftr",
278  0, 0, 0, &WOPT_Enable_Aggressive_Lftr, NULL },
279  { OVK_BOOL, OV_INTERNAL, TRUE, "aggphi_simp", "aggphi",
281  { OVK_BOOL, OV_INTERNAL, TRUE, "aggdo", "aggdo",
283  { OVK_BOOL, OV_INTERNAL, TRUE, "agg_ivr", "agg_ivr",
284  0, 0, 0, &WOPT_Enable_Aggressive_IVR, NULL },
285  { OVK_BOOL, OV_INTERNAL, TRUE, "aggstr_reduction", "aggstr",
286  0, 0, 0, &WOPT_Enable_Aggstr_Reduction, NULL },
287  { OVK_BOOL, OV_INTERNAL, TRUE, "alias_classification", "alias_class",
289  { OVK_BOOL, OV_INTERNAL, TRUE, "ac_fortran", "",
291  { OVK_BOOL, OV_INTERNAL, TRUE, "avoid_rehash", "",
292  0, 0, 0, &WOPT_Enable_Avoid_Rehash, NULL },
293  { OVK_BOOL, OV_INTERNAL, TRUE, "bdce", "",
294  0, 0, 0, &WOPT_Enable_Bitwise_DCE, NULL },
295  { OVK_BOOL, OV_INTERNAL, TRUE, "cse_fcmp", "",
296  0, 0, 0, &WOPT_Enable_CSE_FP_comparison, NULL },
297  { OVK_BOOL, OV_INTERNAL, TRUE, "canon_uplevel", "canon",
298  0, 0, 0, &WOPT_Enable_Canon_Uplevel, NULL },
299  { OVK_BOOL, OV_INTERNAL, TRUE, "call_flag", "call_flag",
300  0, 0, 0, &WOPT_Enable_Call_Flag, NULL },
301  { OVK_BOOL, OV_INTERNAL, FALSE, "calls_break_bb", "",
303  { OVK_BOOL, OV_INTERNAL, TRUE, "canon_expr", "canon_expr",
304  0, 0, 0, &WOPT_Enable_Canon_Expr, NULL },
305  { OVK_BOOL, OV_INTERNAL, TRUE, "cg_alias", "cg_alias",
306  0, 0, 0, &WOPT_Enable_CG_Alias, NULL },
307  { OVK_BOOL, OV_INTERNAL, TRUE, "class2", "class2",
309  { OVK_BOOL, OV_INTERNAL, TRUE, "combine_operations", "combine",
311  { OVK_BOOL, OV_INTERNAL, TRUE, "compare_simp", "compare",
312  0, 0, 0, &WOPT_Enable_Compare_Simp, NULL },
313  { OVK_BOOL, OV_INTERNAL, TRUE, "const_pre", "const_pre",
314  0, 0, 0, &WOPT_Enable_Const_PRE, NULL },
315  { OVK_INT32, OV_INTERNAL, TRUE, "const_pre_limit", "const_pre_limit",
317  { OVK_BOOL, OV_INTERNAL, TRUE, "divrem", "divrem",
318  0, 0, 0, &WOPT_Enable_DIVREM, NULL },
319  { OVK_BOOL, OV_INTERNAL, TRUE, "copy_propagate", "copy",
320  0, 0, 0, &WOPT_Enable_Copy_Propagate, NULL },
321  { OVK_BOOL, OV_INTERNAL, TRUE, "copy_ops", "copy_ops",
322  0, 0, 0, &WOPT_Enable_Copy_Prop_Bad_Ops, NULL },
323  { OVK_BOOL, OV_INTERNAL, TRUE, "copy_lno_ops", "copy_lno",
324  0, 0, 0, &WOPT_Enable_Copy_Prop_LNO_Ops, NULL },
325  { OVK_BOOL, OV_INTERNAL, TRUE, "copy_into_array", "",
328  { OVK_BOOL, OV_INTERNAL, TRUE, "lno_copy_propagation", "lno_copy",
330  { OVK_BOOL, OV_INTERNAL, TRUE, "cr_simp", "cr",
331  0, 0, 0, &WOPT_Enable_CRSIMP, NULL },
332  { OVK_BOOL, OV_INTERNAL, TRUE, "fastsimp", "",
333  0, 0, 0, &WOPT_Enable_Fast_Simp, NULL },
334  { OVK_BOOL, OV_INTERNAL, TRUE, "fold2const", "fold",
335  0, 0, 0, &WOPT_Enable_Fold2const, NULL },
336  { OVK_BOOL, OV_INTERNAL, TRUE, "fold_lda_iload_istore", "fold_lda_iload",
338  { OVK_BOOL, OV_INTERNAL, TRUE, "dead_code_elim", "dead",
339  0, 0, 0, &WOPT_Enable_DCE, NULL },
340  { OVK_BOOL, OV_INTERNAL, TRUE, "dce_aggressive", "dce",
341  0, 0, 0, &WOPT_Enable_Aggressive_dce, NULL },
342  { OVK_BOOL, OV_INTERNAL, TRUE, "dce_alias", "",
343  0, 0, 0, &WOPT_Enable_DCE_Alias, NULL },
344  { OVK_BOOL, OV_INTERNAL, TRUE, "dce_branch", "",
345  0, 0, 0, &WOPT_Enable_DCE_Branch, NULL },
346  { OVK_INT32, OV_INTERNAL, TRUE, "dce_branch_pred_limit", "",
348  { OVK_BOOL, OV_INTERNAL, TRUE, "dce_global", "",
349  0, 0, 0, &WOPT_Enable_DCE_Global, NULL },
350  { OVK_BOOL, OV_INTERNAL, TRUE, "dce_label", "",
351  0, 0, 0, &WOPT_Enable_DCE_Label, NULL },
352  { OVK_BOOL, OV_INTERNAL, TRUE, "du_full", "",
353  0, 0, 0, &WOPT_Enable_DU_Full, NULL },
354  { OVK_BOOL, OV_INTERNAL, TRUE, "du_union", "",
355  0, 0, 0, &WOPT_Enable_DU_Union, NULL },
356  { OVK_BOOL, OV_INTERNAL, TRUE, "dead_cr", "",
357  0, 0, 0, &WOPT_Enable_Dead_CR_Fix, NULL },
358  { OVK_BOOL, OV_INTERNAL, TRUE, "debug_class", "",
360  { OVK_BOOL, OV_INTERNAL, TRUE, "epre", "epre",
361  0, 0, 0, &WOPT_Enable_Exp_PRE, NULL },
362  { OVK_INT32, OV_INTERNAL, TRUE, "epre_limit", "",
364  { OVK_BOOL, OV_INTERNAL, TRUE, "estr_fb_injury", "",
366  { OVK_BOOL, OV_INTERNAL, TRUE, "goto_conversion", "goto",
367  0, 0, 0, &WOPT_Enable_Goto, NULL },
368  { OVK_BOOL, OV_INTERNAL, TRUE, "hoisting", "hoist",
369  0, 0, 0, &WOPT_Enable_Hoisting, NULL },
370  { OVK_BOOL, OV_INTERNAL, TRUE, "hoist_ivar", "hoist_ivar",
371  0, 0, 0, &WOPT_Enable_Ivar_Hoisting, NULL },
372  { OVK_BOOL, OV_INTERNAL, TRUE, "i8_iv", "i8_iv",
373  0, 0, 0, &WOPT_Enable_I8_Primary_IV, NULL },
374  { OVK_BOOL, OV_INTERNAL, TRUE, "addr", "addr",
376  { OVK_BOOL, OV_INTERNAL, TRUE, "icopy_propagate", "icopy",
377  0, 0, 0, &WOPT_Enable_Input_Prop, NULL },
378  { OVK_BOOL, OV_INTERNAL, TRUE, "itself_prop", "itself",
379  0, 0, 0, &WOPT_Enable_Itself_Prop, NULL },
380  { OVK_BOOL, OV_INTERNAL, TRUE, "ipaa", "ipaa",
381  0, 0, 0, &WOPT_Enable_IPAA, NULL },
382  { OVK_NAME, OV_INTERNAL, TRUE, "ipaa_file", "ipaa_f",
383  0, 0, 0, &Ipa_File_Name, NULL },
384  { OVK_BOOL, OV_INTERNAL, TRUE, "iv_elimination", "iv_elim",
385  0, 0, 0, &WOPT_Enable_IVE, NULL },
386  { OVK_BOOL, OV_INTERNAL, TRUE, "ive_old", "ive_old",
387  0, 0, 0, &WOPT_Enable_IVE_Old, NULL },
388  { OVK_BOOL, OV_INTERNAL, TRUE, "iv_recognition", "iv_recog",
389  0, 0, 0, &WOPT_Enable_IVR, NULL },
390  { OVK_INT32, OV_INTERNAL, TRUE, "ivr_expand_limit", "",
392  { OVK_BOOL, OV_INTERNAL, TRUE, "iv_outer_parallel", "",
394  { OVK_BOOL, OV_INTERNAL, TRUE, "ivar_common", "ivar",
395  0, 0, 0, &WOPT_Enable_Ivar_Common, NULL },
396  { OVK_BOOL, OV_INTERNAL, TRUE, "ivar_pre", "ivar_pre",
397  0, 0, 0, &WOPT_Enable_Ivar_PRE, NULL },
398  { OVK_BOOL, OV_INTERNAL, TRUE, "ivincr_cand", "ivincr",
399  0, 0, 0, &WOPT_Enable_Ivincr_Cand, NULL },
400  { OVK_INT32, OV_INTERNAL, TRUE, "ldx_ratio_regins", "ldx_ratio",
401  0, 0, 4096, &WOPT_Ldx_Ratio_RegIns, NULL },
402  { OVK_BOOL, OV_INTERNAL, TRUE, "ldx", "ldx",
403  0, 0, 0, &WOPT_Enable_Ldx, NULL },
404  { OVK_BOOL, OV_INTERNAL, TRUE, "lego_opt", "lego",
405  0, 0, 0, &WOPT_Enable_Lego_Opt, NULL },
406  { OVK_BOOL, OV_INTERNAL, TRUE, "lftr", "lftr",
407  0, 0, 0, &WOPT_Enable_LFTR, NULL },
408  { OVK_BOOL, OV_INTERNAL, TRUE, "lftr_ivar", "lftr_ivar",
409  0, 0, 0, &WOPT_Enable_LFTR_Ivar, NULL },
410  { OVK_BOOL, OV_INTERNAL, TRUE, "lftr2", "lftr2",
411  0, 0, 0, &WOPT_Enable_LFTR2, NULL },
412  { OVK_INT32, OV_INTERNAL, TRUE, "lftr2_limit", "lftr2_limit",
414  { OVK_BOOL, OV_INTERNAL, TRUE, "lpre", "lpre",
415  0, 0, 0, &WOPT_Enable_Load_PRE, NULL },
416  { OVK_INT32, OV_INTERNAL, TRUE, "lpre_limit", "",
418  { OVK_BOOL, OV_INTERNAL, TRUE, "loop_invarexp", "loop_invar",
420  { OVK_BOOL, OV_INTERNAL, FALSE, "lower_short_circuit", "",
422  { OVK_BOOL, OV_INTERNAL, TRUE, "minmax", "minmax",
423  0, 0, 0, &WOPT_Enable_MINMAX, NULL },
424  { OVK_BOOL, OV_INTERNAL, TRUE, "min_type", "min_type",
425  0, 0, 0, &WOPT_Enable_Min_Type, NULL },
426  { OVK_BOOL, OV_INTERNAL, TRUE, "intrinsic", "intrinsic",
427  0, 0, 0, &WOPT_Enable_Move_Intrinsicop, NULL },
428  { OVK_BOOL, OV_INTERNAL, TRUE, "mp_varref", "mp_varref",
429  0, 0, 0, &WOPT_Enable_MP_varref, NULL },
430 #ifdef CHANGE_MIND_AGAIN
431  { OVK_BOOL, OV_INTERNAL, TRUE, "mp_const_prop", "mp_const_prop",
432  0, 0, 0, &WOPT_Enable_MP_Const_Prop, NULL },
433 #endif
434  { OVK_BOOL, OV_INTERNAL, TRUE, "spec_nix_lftr", "",
436  { OVK_BOOL, OV_INTERNAL, TRUE, "ssapre", "ssapre",
437  0, 0, 0, &WOPT_Enable_SSA_PRE, NULL },
438  { OVK_BOOL, OV_INTERNAL, TRUE, "new_sr", "",
439  0, 0, 0, &WOPT_Enable_New_SR, NULL },
440  { OVK_INT32, OV_INTERNAL, TRUE, "new_sr_limit", "new_sr_limit",
442  { OVK_BOOL, OV_INTERNAL, TRUE, "ocopy", "ocopy",
443  0, 0, 0, &WOPT_Enable_Output_Copy, NULL },
444  { OVK_INT32, OV_INTERNAL, TRUE, "ocopy_lookup_stmtcnt", "ocopy_lookup",
445  0, 0, 4096, &WOPT_Enable_Ocopy_Lookupstmt, NULL },
446  { OVK_BOOL, OV_INTERNAL, TRUE, "parm", "parm",
447  0, 0, 0, &WOPT_Enable_Parm, NULL },
448  { OVK_NAME, OV_INTERNAL, TRUE, "process", "process",
449  0, 0, 0, &WOPT_Enable_Process, NULL },
450  { OVK_BOOL, OV_INTERNAL, TRUE, "phi_simp", "phi",
451  0, 0, 0, &WOPT_Enable_Phi_Simp, NULL },
452  { OVK_BOOL, OV_INTERNAL, TRUE, "prop_ivar", "",
453  0, 0, 0, &WOPT_Enable_Prop_Ivar, NULL },
454  { OVK_BOOL, OV_INTERNAL, FALSE, "prop_cse", "",
455  0, 0, 0, &WOPT_Enable_Prop_CSE, NULL },
456  { OVK_INT32, OV_INTERNAL, TRUE, "prop_limit", "",
457  14, 0, INT32_MAX, &WOPT_Enable_Prop_Limit, NULL }, /* PV 468862 */
458  { OVK_BOOL, OV_INTERNAL, TRUE, "prune", "",
459  0, 0, 0, &WOPT_Enable_Prune, NULL },
460  { OVK_BOOL, OV_INTERNAL, TRUE, "replace_second_iv", "",
461  0, 0, 0, &WOPT_Enable_Replace_Second_IV, NULL },
462  { OVK_BOOL, OV_INTERNAL, TRUE, "replace_while_loop_second_iv", "",
464  { OVK_BOOL, OV_INTERNAL, TRUE, "restricted_map", "",
465  0, 0, 0, &WOPT_Enable_Restricted_Map, NULL },
466  { OVK_INT32, OV_INTERNAL, TRUE, "rsv_bits", "rsv",
467  0, 0, 4096, &WOPT_Enable_Rsv_Bits, NULL },
468  { OVK_BOOL, OV_INTERNAL, TRUE, "rvi_enable", "rvi",
469  0, 0, 0, &WOPT_Enable_RVI, NULL },
470  { OVK_BOOL, OV_INTERNAL, TRUE, "rvi1", "",
471  0, 0, 0, &WOPT_Enable_RVI1, NULL },
472  { OVK_BOOL, OV_INTERNAL, TRUE, "rvi2", "",
473  0, 0, 0, &WOPT_Enable_RVI2, NULL },
474  { OVK_BOOL, OV_INTERNAL, TRUE, "rviistore", "",
475  0, 0, 0, &WOPT_Enable_Rviistore, NULL },
476  { OVK_NAME, OV_INTERNAL, TRUE, "rviskip", "",
477  0, 0, 0, &WOPT_Enable_Rviskip, NULL },
478  { OVK_BOOL, OV_INTERNAL, TRUE, "rvisplit", "",
479  0, 0, 0, &WOPT_Enable_Rvisplit, NULL },
480  { OVK_BOOL, OV_INTERNAL, TRUE, "rvivsym", "",
481  0, 0, 0, &WOPT_Enable_Rvivsym, NULL },
482  { OVK_BOOL, OV_INTERNAL, TRUE, "second_order", "second",
483  0, 0, 0, &WOPT_Enable_Second_Order, NULL },
484  { OVK_NAME, OV_INTERNAL, TRUE, "skip", "skip",
485  0, 0, 0, &WOPT_Enable_Skip, NULL },
486  { OVK_LIST, OV_INTERNAL, TRUE, "skip_after", "skip_a",
487  0, 0, 0, &WOPT_Skip, NULL },
488  { OVK_LIST, OV_INTERNAL, TRUE, "skip_before", "skip_b",
489  0, 0, 0, &WOPT_Skip, NULL },
490  { OVK_LIST, OV_INTERNAL, TRUE, "skip_equal", "skip_e",
491  0, 0, 0, &WOPT_Skip, NULL },
492  { OVK_BOOL, OV_INTERNAL, TRUE, "ssa_minimization", "ssa_min",
493  0, 0, 0, &WOPT_Enable_SSA_Minimization, NULL },
494  { OVK_BOOL, OV_INTERNAL, TRUE, "spre", "spre",
495  0, 0, 0, &WOPT_Enable_Store_PRE, NULL },
496  { OVK_INT32, OV_INTERNAL, TRUE, "spre_limit", "",
498  { OVK_BOOL, OV_INTERNAL, TRUE, "strength_reduction", "str",
500  { OVK_BOOL, OV_INTERNAL, TRUE, "slt", "slt",
501  0, 0, 0, &WOPT_Enable_SLT, NULL },
502  { OVK_BOOL, OV_INTERNAL, TRUE, "small_br_target", "small_br",
503  0, 0, 0, &WOPT_Enable_Small_Br_Target, NULL },
504  { OVK_INT32, OV_INTERNAL, TRUE, "trip_count", "trip",
506  { OVK_BOOL, OV_INTERNAL, TRUE, "update_vsym", "update_vsym",
507  0, 0, 0, &WOPT_Enable_Update_Vsym, NULL },
508  { OVK_BOOL, OV_INTERNAL, TRUE, "unique_pt_vsym", "",
509  0, 0, 0, &WOPT_Enable_Unique_Pt_Vsym, NULL },
510  { OVK_INT32, OV_INTERNAL, TRUE, "value_numbering", "val",
511  1, 0, 4, &WOPT_Enable_Value_Numbering, NULL },
512  { OVK_BOOL, OV_INTERNAL, TRUE, "verbose", "v",
513  0, 0, 0, &WOPT_Enable_Verbose, NULL },
514  { OVK_INT32, OV_INTERNAL, TRUE, "verify", "verify",
515  1, 0, 4, &WOPT_Enable_Verify, NULL },
516  { OVK_BOOL, OV_INTERNAL, TRUE, "while_loop", "while",
517  0, 0, 0, &WOPT_Enable_While_Loop, NULL },
518  { OVK_BOOL, OV_INTERNAL, TRUE, "worklist_prune", "worklist_prune",
519  0, 0, 0, &WOPT_Enable_Worklist_Pruning, NULL },
520  { OVK_BOOL, OV_INTERNAL, TRUE, "zero_version", "zero",
521  0, 0, 0, &WOPT_Enable_Zero_Version, NULL },
522  { OVK_BOOL, OV_INTERNAL, TRUE, "call_zero_version", "call_zero",
523  0, 0, 0, &WOPT_Enable_Call_Zero_Version, NULL },
524  { OVK_BOOL, OV_INTERNAL, TRUE, "vsym_unique", "vsym",
525  0, 0, 0, &WOPT_Enable_Vsym_Unique, NULL },
526  { OVK_BOOL, OV_INTERNAL, TRUE, "dse_aggressive", "dse",
527  0, 0, 0, &WOPT_Enable_Dse_Aggressive, NULL },
528  { OVK_BOOL, OV_INTERNAL, TRUE, "prop_aggressive", "prop",
529  0, 0, 0, &WOPT_Enable_Prop_Aggressive, NULL },
530  { OVK_BOOL, OV_INTERNAL, TRUE, "iload_prop", "iload",
531  0, 0, 0, &WOPT_Enable_Iload_Prop, NULL },
532  { OVK_BOOL, OV_INTERNAL, TRUE, "vn_full", "vn",
533  0, 0, 0, &WOPT_Enable_VN_Full, NULL },
534  { OVK_BOOL, OV_INTERNAL, TRUE, "simp_iload", "",
535  0, 0, 0, &WOPT_Enable_Simp_Iload, NULL },
536  { OVK_BOOL, OV_INTERNAL, TRUE, "if_conv", "",
537  0, 0, 0, &WOPT_Enable_Simple_If_Conv, NULL },
538  { OVK_BOOL, OV_INTERNAL, TRUE, "tail_recursion", "tail",
539  0, 0, 0, &WOPT_Enable_Tail_Recur, NULL },
540  { OVK_BOOL, OV_INTERNAL, TRUE, "edge_placement", "edge",
541  0, 0, 0, &WOPT_Enable_Edge_Placement, NULL },
542  { OVK_BOOL, OV_INTERNAL, TRUE, "backedge_placement", "backedge_p",
544  { OVK_BOOL, OV_INTERNAL, TRUE, "src_order", "",
545  0, 0, 0, &WOPT_Enable_Source_Order, NULL },
546  { OVK_NAME, OV_INTERNAL, TRUE, "set_unique_pt", "",
547  0, 0, 0, &WOPT_Set_Unique_Pt, NULL },
548  { OVK_BOOL, OV_INTERNAL, TRUE, "fold_cvt", "",
549  0, 0, 0, &WOPT_Enable_Cvt_Folding, NULL },
550  { OVK_BOOL, OV_INTERNAL, TRUE, "local_rvi", "",
551  0, 0, 0, &WOPT_Enable_Local_Rvi, NULL },
552  { OVK_BOOL, OV_INTERNAL, TRUE, "strong_barrier", "",
553  0, 0, 0, &WOPT_Enable_Strong_Barrier, NULL },
554  { OVK_BOOL, OV_INTERNAL, TRUE, "aggr_invariant", "",
555  0, 0, 0, &WOPT_Enable_Aggr_Invariant, NULL },
556  { OVK_INT32, OV_INTERNAL, TRUE, "lrvi_limit", "",
558  { OVK_BOOL, OV_INTERNAL, TRUE, "shrink", "",
559  0, 0, 0, &WOPT_Enable_Shrink, NULL },
560  { OVK_INT32, OV_INTERNAL, TRUE, "extra_rename", "",
562  { OVK_UINT32, OV_INTERNAL, TRUE, "extra_preopt", "extra_p",
564  { OVK_BOOL, OV_INTERNAL, TRUE, "bool_simp", "",
565  0, 0, 0, &WOPT_Enable_Bool_Simp, NULL },
566  { OVK_BOOL, OV_INTERNAL, FALSE, "fb_lpre", "",
567  0, 0, 0, &WOPT_Enable_Feedback_LPRE, NULL },
568  { OVK_BOOL, OV_INTERNAL, FALSE, "fb_epre", "",
569  0, 0, 0, &WOPT_Enable_Feedback_EPRE, NULL },
570  { OVK_BOOL, OV_INTERNAL, FALSE, "cfo_display", "",
571  0, 0, 0, &WOPT_Enable_CFG_Display, NULL },
572  { OVK_BOOL, OV_INTERNAL, TRUE, "merge_multi_zone", "",
574  { OVK_BOOL, OV_INTERNAL, FALSE, "cfo_main", "",
575  0, 0, 0, &WOPT_Enable_CFG_Opt, NULL },
576  { OVK_BOOL, OV_INTERNAL, FALSE, "cfo1", "",
577  0, 0, 0, &WOPT_Enable_CFG_Opt1, NULL },
578  { OVK_BOOL, OV_INTERNAL, FALSE, "cfo2", "",
579  0, 0, 0, &WOPT_Enable_CFG_Opt2, NULL },
580  { OVK_INT32, OV_INTERNAL, TRUE, "min_cfo2_coverage", "",
582  { OVK_BOOL, OV_INTERNAL, FALSE, "cfo3", "",
583  0, 0, 0, &WOPT_Enable_CFG_Opt3, NULL },
584  { OVK_BOOL, OV_INTERNAL, FALSE, "cfo4", "",
585  0, 0, 0, &WOPT_Enable_CFG_Opt4, NULL },
586  { OVK_INT32, OV_INTERNAL, FALSE, "cfo_limit", "",
588  { OVK_INT32, OV_INTERNAL, TRUE, "vn_ivc", "",
589  1, 0, 8, &WOPT_Enable_Vn_Ivc, NULL },
590  { OVK_UINT32, OV_INTERNAL, TRUE, "vnfre_after", "vnfre_a",
592  { OVK_UINT32, OV_INTERNAL, TRUE, "vnfre_before", "vnfre_b",
594  { OVK_BOOL, OV_INTERNAL, TRUE, "bit_field", "",
595  0, 0, 0, &WOPT_Enable_Bits_Load_Store, NULL },
596  { OVK_BOOL, OV_INTERNAL, TRUE, "epre4ivr", "epre4ivr",
597  0, 0, 0, &WOPT_Enable_Epre_Before_Ivr, NULL },
598  { OVK_BOOL, OV_INTERNAL, TRUE, "lpre4ivr", "lpre4ivr",
599  0, 0, 0, &WOPT_Enable_Lpre_Before_Ivr, NULL },
600  { OVK_BOOL, OV_INTERNAL, TRUE, "spre4ivr", "spre4ivr",
601  0, 0, 0, &WOPT_Enable_Spre_Before_Ivr, NULL },
602  { OVK_BOOL, OV_INTERNAL, TRUE, "bdce4ivr", "bdce4ivr",
603  0, 0, 0, &WOPT_Enable_Bdce_Before_Ivr, NULL },
604  { OVK_BOOL, OV_INTERNAL, TRUE, "new_phase_order", "new_phase_order",
606  { OVK_COUNT } /* List terminator -- must be last */
607 };