00001 /* 00002 * Copyright 2002, 2003, 2004, 2005, 2006 PathScale, Inc. All Rights Reserved. 00003 */ 00004 00005 /* 00006 00007 Copyright (C) 2000, 2001 Silicon Graphics, Inc. All Rights Reserved. 00008 00009 This program is free software; you can redistribute it and/or modify it 00010 under the terms of version 2 of the GNU General Public License as 00011 published by the Free Software Foundation. 00012 00013 This program is distributed in the hope that it would be useful, but 00014 WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00016 00017 Further, this software is distributed without any warranty that it is 00018 free of the rightful claim of any third person regarding infringement 00019 or the like. Any license provided herein, whether implied or 00020 otherwise, applies only to this software file. Patent licenses, if 00021 any, provided herein do not apply to combinations of this program with 00022 other software, or any other product whatsoever. 00023 00024 You should have received a copy of the GNU General Public License along 00025 with this program; if not, write the Free Software Foundation, Inc., 59 00026 Temple Place - Suite 330, Boston MA 02111-1307, USA. 00027 00028 Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pky, 00029 Mountain View, CA 94043, or: 00030 00031 http://www.sgi.com 00032 00033 For further information regarding this notice, see: 00034 00035 http://oss.sgi.com/projects/GenInfo/NoticeExplan 00036 00037 */ 00038 00039 00040 /* ======================================================================= 00041 * ======================================================================= 00042 * 00043 * Module: cg_flags.h 00044 * $Revision: 1.57 $ 00045 * $Date: 06/01/19 16:18:29-08:00 $ 00046 * $Author: fchow@fluorspar.internal.keyresearch.com $ 00047 * $Source: /scratch/mee/2.4-65/kpro64-pending/be/cg/SCCS/s.cg_flags.h $ 00048 * 00049 * Description: 00050 * ============ 00051 * 00052 * Exports variables global to all of CG. 00053 * 00054 * Exported variables: 00055 * ==================- 00056 * 00057 * BOOL CG_tail_call 00058 * Enable tail call generation. 00059 * 00060 * BOOL CG_unique_exit 00061 * Generate unique exit blocks. 00062 * 00063 * BOOL CG_warn_bad_freqs 00064 * Whenever a phase notices that freq related data is wrong or 00065 * inconsistent, it can warn when this flag is true. 00066 * 00067 * BOOL CG_enable_loop_optimizations 00068 * Enable the innermost loop optimizations (CGPREP). This includes 00069 * loop unrolling, r/w elimination, recurrence breaking, SWP. 00070 * 00071 * INT32 CG_skip_after 00072 * INT32 CG_skip_before 00073 * INT32 CG_skip_equal 00074 * Controls which PUs we skip optimizing, i.e. we set CG_opt_level=0 00075 * for. 00076 * 00077 * INT32 CG_local_skip_after 00078 * INT32 CG_local_skip_before 00079 * INT32 CG_local_skip_equal 00080 * Options to control the optimization done by any phase in CG. The 00081 * interpretation of the numbers to skip is left totally to the 00082 * local phase. For example, the local scheduler uses these options 00083 * to control which basic blocks to skip scheduling for. 00084 * 00085 * BOOL CG_skip_local_sched 00086 * Enable skipping of scheduling of basic blocks based on the 00087 * -CG:skip_local_[after,before,equal] options. 00088 * 00089 * BOOL CG_skip_local_swp 00090 * Enable skipping of pipelining of inner loops based on the 00091 * -CG:skip_local_[after,before,equal] options. 00092 * 00093 * INT CG_opt_level 00094 * Gives the optimization level to use throughout CG. 00095 * 00096 * BOOL CG_localize_tns 00097 * Make sure we have no global TNs (and thus don't need GRA). 00098 * 00099 * CG_cond_defs_allowed 00100 * Allow generation of conditional definitions (predicated insts) 00101 * 00102 * BOOL CG_enable_reverse_if_conversion 00103 * BOOL CG_enable_reverse_if_conversion_overridden 00104 * Enable reverse if conversion. 00105 * 00106 * BOOL CG_enable_thr 00107 * Enable tree-height reduction phase in CG. 00108 * 00109 * BOOL CG_enable_spec_imul 00110 * allow loops with speculated integer mul 00111 * to be if converted. 00112 * 00113 * BOOL CG_enable_spec_idiv 00114 * allow loops with speculated integer div 00115 * to be if converted. 00116 * 00117 * BOOL CG_enable_spec_fdiv 00118 * allow loops with speculated fdiv 00119 * to be if converted. recips are also included 00120 * with this flag. 00121 * 00122 * BOOL CG_enable_spec_fsqrt 00123 * allow loops with speculated fsqrt 00124 * to be if converted. 00125 * 00126 * INT32 CG_maxinss 00127 * Maximum number of ops in a loop to be if converted. 00128 * This is calculated as: CG_maxinss_default * CG_opt_level 00129 * 00130 * INT32 CG_maxblocks 00131 * Maximum number of bbs in a loop to be if converted. 00132 * 00133 * BOOL GRA_LIVE_Phase_Invoked 00134 * Flag to detect if global liveness (GRA_LIVE) has been invoked. 00135 * 00136 * BOOL CFLOW_Enable 00137 * Master switch. 00138 * 00139 * BOOL CFLOW_opt_before_cgprep 00140 * Perform cflow pass before cgprep. 00141 * 00142 * BOOL CFLOW_opt_after_cgprep 00143 * Perform cflow pass after cgprep. This includes reordering. 00144 * 00145 * BOOL CFLOW_Enable_Unreachable 00146 * Enable unreachable BB removal. 00147 * 00148 * BOOL CFLOW_Enable_Branch 00149 * Enable various branch opts. 00150 * 00151 * BOOL CFLOW_Enable_Merge 00152 * Enable BB merging. 00153 * 00154 * BOOL CFLOW_Enable_Reorder 00155 * Enable BB reordering. 00156 * 00157 * BOOL CFLOW_Enable_Freq_Order 00158 * Enable freq-guided BB reordering. 00159 * 00160 * BOOL CFLOW_Enable_Clone 00161 * Enable BB cloning. 00162 * 00163 * BOOL CFLOW_opt_all_br_to_bcond 00164 * Optimize all branches to conditional branches, ignoring 00165 * code bloat effects. 00166 * 00167 * const char *CFLOW_heuristic_tolerance 00168 * A floating point number between 0 and 1 inclusive, that specifies 00169 * the tolerance in considering the probabilities in a conditional 00170 * branch as equally likely. The tolerance is the percentage of 00171 * the average probability that the actual probability may vary 00172 * above or below the average and still be considered equally likely. 00173 * This tolerance only applies to heuristically determined probablities. 00174 * 00175 * const char *CFLOW_feedback_tolerance 00176 * Same as CFLOW_heuristic_tolerance except it applies only to 00177 * feedback determined probabilities. 00178 * 00179 * UINT32 CFLOW_clone_incr 00180 * UINT32 CFLOW_clone_max_incr 00181 * UINT32 CFLOW_clone_min_incr 00182 * These parameters control the amount of growth that can result 00183 * from cloning. clone_incr is the main control and limits 00184 * growth to a percentage of the PU size. clone_max_incr and 00185 * clone_min_incr set minimum and maximum increments (in instructions). 00186 * 00187 * BOOL FREQ_enable 00188 * Enable BB freqency estimates. 00189 * 00190 * BOOL FREQ_view_cfg 00191 * Indicates if daVanci should be invoked to view the frequency 00192 * annotated CFG at appropriate times. 00193 * 00194 * const char *FREQ_frequent_never_ratio 00195 * The ratio in the probabilities of "frequent" to "never" successors 00196 * tagged with frequency hint pragmas. 00197 * 00198 * const char *FREQ_eh_freq 00199 * The frequency (relative to the entry point) that an exception 00200 * handler is executed. 00201 * 00202 #ifdef KEY 00203 * const char *FREQ_non_local_targ_freq 00204 * The frequency (relative to the entry point) that an non-local target 00205 * is executed. The target has no predecessor BB. 00206 #endif 00207 * CGSPILL_Rematerialize_Constants 00208 * Enable rematerialization of constants instead of spilling them. 00209 * 00210 * CGSPILL_Enable_Force_Rematerialization 00211 * Debugging aid -- force all constants to be rematerialized at 00212 * each point of use. 00213 * 00214 * LOCS_PRE_Enable_Scheduling 00215 * Enable the local scheduler phase before register allocation. 00216 * 00217 * LOCS_POST_Enable_Scheduling 00218 * Enable the local scheduler phase after register allocation. 00219 * 00220 * LOCS_Enable_Scheduling 00221 * Enables the HyperBlock Scheduler (for single BBs). 00222 * 00223 * LOCS_Enable_Bundle_Formation 00224 * Enable the bundle formation phase in LOCS (default TRUE for IA64). 00225 * 00226 * IGLS_Enable_PRE_HB_Scheduling 00227 * Enable the Hyperblock Scheduler phase before register allocation. 00228 * 00229 * IGLS_Enable_POST_HB_Scheduling 00230 * Enable the Hyperblock Scheduler phase after register allocation. 00231 * 00232 * IGLS_Enable_HB_Scheduling 00233 * Enable the Hyperblock Scheduling phase. 00234 * 00235 * GCM_PRE_Enable_Scheduling 00236 * Enable global code motion before register allocation (GRA/LRA) 00237 * 00238 * GCM_POST_Enable_Scheduling 00239 * Enable global code motion after register allocation (GRA/LRA) 00240 * 00241 * GCM_Enable_Scheduling 00242 * Enable global code motion. sets both GCM_PRE_Enable_Scheduling and 00243 * GCM_POST_Enable_Scheduling 00244 * 00245 * GCM_Motion_Across_Calls 00246 * Enable code motion across procedure calls. 00247 * 00248 * GCM_Eager_Ptr_Deref 00249 * Allow speculation among two pointer references varied by a constant 00250 * offset. 00251 * 00252 * GCM_Speculative_Loads 00253 * Convert loads to safe speculative form and allow control speculation. 00254 * 00255 * GCM_Predicated_Loads 00256 * Convert loads to safe speculative form by guarding it using a 00257 * qualifying predicate. 00258 * 00259 * GCM_Min_Reg_Usage 00260 * Allow code movement with emphasis on minimizing register usages. 00261 * 00262 * GCM_Pointer_Spec 00263 * Controls both GCM_Eager_Ptr_Deref and GCM_Null_Ptr_Deref 00264 * 00265 * IGLS_Enable_All_Scheduling 00266 * Enables all the scheduling phases in CG (i.e LOCS, HBS and GCM). 00267 * 00268 * RGN_Enable_All_Scheduling 00269 * Enables all the scheduling phases using region including 00270 * Perform_Global_Schedule and Local_Insn_Schedule 00271 * 00272 * CGTARG_Enable_Brlikely 00273 * Enable the generation of branch-likely instructions.. 00274 * 00275 * Enable_Fill_Delay_Slots 00276 * Enable filling of branch delay slots with an instruction from 00277 * either one of the successor blocks (GCM) or reorder 00278 * instructions within a basic block to fill the delay slot (LOCS) 00279 * 00280 * GCM_Enable_Fill_Delay_Slots 00281 * Enable filling of branch delay slots with an instruction from 00282 * either one of the successor blocks. is controlled by 00283 * Enable_Fill_Delay_Slots 00284 * 00285 * CGEXP_use_copyfcc 00286 * Use copyfcc pseudo-op in EXP_copy rather than generating a sequence. 00287 * 00288 * CGEXP_expandconstant 00289 * Specify maximum number of instruction a constant can generate 00290 * before puting it in .rodata 00291 * 00292 * CGEXP_normalize_logical 00293 * Normalize the input of logical or/and/not to 0/1 (default true) 00294 * 00295 * CGEXP_gp_prolog_call_shared 00296 * Generate a shorter gp-prolog sequence for a CPIC compile. Emit 00297 * a lui/addiu sequence instead of lui/addiu/addu (default false) 00298 * 00299 * CGEXP_cvrt_int_div_to_mult 00300 * Generate a multiply-upper sequence of operations in place of 00301 * integer divide when the divisor is a compile time constant. 00302 * 00303 * CGEXP_cvrt_int_div_to_fdiv 00304 * Generate a floating divide operation in place of a 32 bit 00305 * integer divide. 00306 * 00307 #ifdef KEY 00308 * CGEXP_cvrt_int_mult_to_add_shift 00309 * Generate a sequence of adds and shifts in place of an integer multiply. 00310 #endif 00311 * 00312 * CGEXP_fast_imul 00313 * Generate an alternative sequence for integer multiplies 00314 * where possible instead of the straight forward translation. 00315 * 00316 * CGEXP_float_consts_from_ints 00317 * If an architecture has adequate integer load immediate instructions, 00318 * use them to construct floating point constants and move to the 00319 * floating point unit. Otherwise use the default method, e.g. load 00320 * from memory. 00321 * 00322 * EMIT_pjump_all 00323 * Generate a PJUMP relocation for all calls, not just the 00324 * non-preemptible ones. This allows ld to change jalr to jal 00325 * for calls that it can determine are non-preemptible, even 00326 * though CG cannot tell. This change can be enabled by default 00327 * only when the corresponding ld change is done. Defer making 00328 * it default till 7.3 to prevent problems with 7.2 objects 00329 * being linked with an earlier ld (default false) 00330 * 00331 * LRA_do_reorder 00332 * Allow lra to reorder instructions in order to minimize register 00333 * lifetimes (default false) 00334 * 00335 * INT32 CG_branch_mispredict_penalty; 00336 * The average number of cycles lost when a branch is mispredicted 00337 * 00338 * INT32 CG_branch_mispredict_factor; 00339 * The misprediction rate may not correlate to the branch probability. 00340 * A factor (0-100) will scale the CG_branch_mispredict_penalty; 00341 * 00342 * EMIT_use_cold_section 00343 * Put code region BBs into .text.cold. Turn off for debugging... 00344 * (default true) 00345 * 00346 * HB_formation 00347 * Perform hyperblock formation. 00348 * 00349 * HB_max_blocks 00350 * Maximum number of blocks allowable in a hyperblock (default setting 00351 * is architecturally dependent). 00352 * 00353 * HB_max_sched_growth 00354 * Multiplier used to determine the maximum increase in schedule height 00355 * over that of the priority path that a path can cause when added to 00356 * a hyperblock. 00357 * 00358 * HB_min_path_priority_ratio 00359 * The minimum ratio a path can have relative to the last path added 00360 * and still be added to the hyperblock. 00361 * 00362 * HB_min_priority 00363 * Minimum priority that a hyperblock can have. 00364 * 00365 * HB_call_hazard_multiplier 00366 * The factor by which to reduce the priority of a path that contains 00367 * a call. 00368 * 00369 * HB_memory_hazard_multiplier 00370 * The factor by which to reduce the priority of a path that contains 00371 * an unresolvable memory store. 00372 * 00373 * HB_base_probability_contribution 00374 * Factor to ensure base contribution of path probability to priority. 00375 * 00376 * HB_require_alias 00377 * Require that alias information be present for complex hyperblock 00378 * formation. 00379 * 00380 * HB_loops 00381 * Perform aggressive hyperblock formation for loops. 00382 * 00383 * HB_simple_ifc, HB_simple_ifc_set 00384 * Perform simple, always profitable full if-conversion. 00385 * 00386 * HB_complex_non_loop 00387 * Perform hyperblock formation for complex control flow structures 00388 * outside of loops. 00389 * 00390 * HB_loops_with_exits 00391 * Perform aggressive hyperblock formation for loops with exits. 00392 * 00393 * HB_general_use_pq 00394 * Use priority queue to order processing of side paths when forming 00395 * general candidate regions during hyperblock formation. 00396 * 00397 * HB_general_from_top 00398 * Prefer side paths near the top of the main path when forming 00399 * general candidate regions during hyperblock formation. 00400 * 00401 * HB_min_blocks 00402 * Minimum number of blocks considered for a hyperblock. 00403 * 00404 * HB_allow_tail_duplication 00405 * Allows tail-duplication to be performed on side-entrances 00406 * creating more aggressive hyperblock formation opportunities. 00407 * 00408 * HB_exclude_calls 00409 * Flag to disallow blocks with calls as part of hyperblock 00410 * formation. 00411 * 00412 * HB_exclude_pgtns 00413 * Flag to disallow hyperblocks if it contains any global predicate TNs 00414 * (PGTNS). The PQS framework relies on TNs having a unique definition, 00415 * not live-into and live-out of the hyperblock. However, some global 00416 * PGTNS do exist which satisfy this property. Allow forming HBs under 00417 * this condition. The flag, if turned ON, will diasallow the formation. 00418 * 00419 * GRA_LIVE_Predicate_Aware 00420 * Allow GRA_LIVE computation to take advantage of predicate query data if available 00421 * 00422 * EMIT_interface_section 00423 * Emit interface section (default true). 00424 * 00425 * ======================================================================= 00426 * ======================================================================= 00427 */ 00428 00429 #ifndef cg_flags_INCLUDED 00430 #define cg_flags_INCLUDED 00431 00432 #ifdef KEY 00433 #include "flags.h" 00434 #endif 00435 00436 extern BOOL CG_warn_bad_freqs; 00437 extern BOOL CG_enable_loop_optimizations; 00438 #ifdef TARG_SL 00439 extern BOOL CG_enable_zero_delay_loop; 00440 extern UINT32 CG_zdl_enabled_level; 00441 extern UINT32 CG_zdl_skip_e; 00442 extern UINT32 CG_zdl_skip_a; 00443 extern UINT32 CG_zdl_skip_b; 00444 extern BOOL CG_enable_opt_condmv; 00445 #endif 00446 #ifdef TARG_IA64 00447 extern BOOL CG_tune_do_loop; 00448 #endif 00449 extern INT32 CG_skip_after; 00450 extern INT32 CG_skip_before; 00451 extern INT32 CG_skip_equal; 00452 extern INT32 CG_local_skip_after; 00453 extern INT32 CG_local_skip_before; 00454 extern INT32 CG_local_skip_equal; 00455 #if defined(TARG_SL) 00456 extern INT32 CG_local_sched_bb_max; 00457 extern INT32 CG_bb_sched_op_num_max; 00458 extern INT32 CG_local_sched_pu_skip_before; 00459 extern INT32 CG_local_sched_pu_skip_after; 00460 extern INT32 CG_local_sched_pu_skip_equal; 00461 extern INT32 CG_local_sched_bb_skip_before; 00462 extern INT32 CG_local_sched_bb_skip_after; 00463 extern INT32 CG_local_sched_bb_skip_equal; 00464 extern INT32 CG_local_sched_op_skip_before; 00465 extern INT32 CG_local_sched_op_skip_after; 00466 extern INT32 CG_local_sched_op_skip_equal; 00467 extern INT32 CG_GCM_skip_before; 00468 extern INT32 CG_GCM_skip_after; 00469 extern INT32 CG_GCM_skip_equal; 00470 extern INT32 CG_GCM_loop_skip_before; 00471 extern INT32 CG_GCM_loop_skip_after; 00472 extern INT32 CG_GCM_loop_skip_equal; 00473 extern INT32 CG_GCM_op_skip_before; 00474 extern INT32 CG_GCM_op_skip_after; 00475 extern INT32 CG_GCM_op_skip_equal; 00476 extern INT32 CG_GCM_LICM_loop_skip_before; 00477 extern INT32 CG_GCM_LICM_loop_skip_after; 00478 extern INT32 CG_GCM_LICM_loop_skip_equal; 00479 extern INT32 CG_GCM_LICM_op_skip_before; 00480 extern INT32 CG_GCM_LICM_op_skip_after; 00481 extern INT32 CG_GCM_LICM_op_skip_equal; 00482 extern INT32 CG_LOOP_DCE_loop_skip_before; 00483 extern INT32 CG_LOOP_DCE_loop_skip_after; 00484 extern INT32 CG_LOOP_DCE_loop_skip_equal; 00485 extern INT32 CG_LOOP_DCE_op_skip_before; 00486 extern INT32 CG_LOOP_DCE_op_skip_after; 00487 extern INT32 CG_LOOP_DCE_op_skip_equal; 00488 extern BOOL CG_GCM_enable_critical_edge_motion; 00489 extern BOOL CG_GCM_enable_mvtc_optimization; 00490 extern BOOL CG_GCM_enable_reduce_loop_count; 00491 extern BOOL CG_GCM_enable_licm; 00492 extern BOOL CG_GCM_enable_dce; 00493 extern BOOL CG_GCM_enable_rce; 00494 extern BOOL CG_GCM_enable_break_dependence; 00495 extern BOOL CG_GCM_enable_merge_small_bbs; 00496 00497 // this flag is used to control if candidate list need to reshuffle according to that user give 00498 extern const char* Cand_List_Pattern; 00499 #endif 00500 extern BOOL CG_skip_local_hbf; 00501 extern BOOL CG_skip_local_loop; 00502 extern BOOL CG_skip_local_sched; 00503 extern BOOL CG_skip_local_swp; 00504 extern INT CG_opt_level; 00505 extern BOOL CG_localize_tns; 00506 extern BOOL CG_localize_tns_Set; 00507 #ifdef TARG_X8664 00508 extern BOOL CG_localize_x87_tns; 00509 extern BOOL CG_localize_x87_tns_Set; 00510 extern BOOL CG_x87_store; 00511 #endif 00512 #ifdef TARG_IA64 00513 extern BOOL CG_Enable_Ldxmov_Support; 00514 #endif 00515 extern BOOL LOCALIZE_using_stacked_regs; 00516 extern BOOL CG_tail_call; 00517 extern BOOL CG_unique_exit; 00518 extern BOOL CG_cond_defs_allowed; 00519 extern BOOL CG_enable_feedback; 00520 extern BOOL CG_enable_reverse_if_conversion; 00521 extern BOOL CG_enable_reverse_if_conversion_overridden; 00522 extern BOOL CG_enable_thr; 00523 extern BOOL CG_enable_spec_imul; 00524 extern BOOL CG_enable_spec_idiv; 00525 extern BOOL CG_enable_spec_fdiv; 00526 extern BOOL CG_enable_spec_fsqrt; 00527 extern BOOL CG_enable_spec_imul_overridden; 00528 extern BOOL CG_enable_spec_idiv_overridden; 00529 extern BOOL CG_enable_spec_fdiv_overridden; 00530 extern BOOL CG_enable_spec_fsqrt_overridden; 00531 extern BOOL CG_create_madds; 00532 00533 #define CG_maxinss_default 100 00534 extern INT32 CG_maxinss; 00535 extern INT32 CG_maxblocks; 00536 extern BOOL GRA_LIVE_Phase_Invoked; 00537 00538 /* CFLOW: 00539 */ 00540 extern BOOL CFLOW_Enable; 00541 extern BOOL CFLOW_opt_before_cgprep; 00542 extern BOOL CFLOW_opt_after_cgprep; 00543 extern BOOL CFLOW_Enable_Unreachable; 00544 extern BOOL CFLOW_Enable_Branch; 00545 extern BOOL CFLOW_Enable_Merge; 00546 extern BOOL CFLOW_Enable_Reorder; 00547 extern BOOL CFLOW_Enable_Freq_Order; 00548 extern BOOL CFLOW_Enable_Clone; 00549 extern BOOL CFLOW_opt_all_br_to_bcond; 00550 extern const char *CFLOW_heuristic_tolerance; 00551 extern const char *CFLOW_feedback_tolerance; 00552 extern UINT32 CFLOW_clone_incr; 00553 extern UINT32 CFLOW_clone_max_incr; 00554 extern UINT32 CFLOW_clone_min_incr; 00555 extern const char *CFLOW_cold_threshold; 00556 #if defined (TARG_SL) 00557 extern const char *CFLOW_hot_threshold; 00558 #endif 00559 #ifdef KEY 00560 extern BOOL CFLOW_Enable_Freq_Order_On_Heuristics; 00561 #endif 00562 /* FREQ: 00563 */ 00564 extern BOOL FREQ_enable; 00565 extern BOOL FREQ_view_cfg; 00566 extern const char *FREQ_frequent_never_ratio; 00567 extern const char *FREQ_eh_freq; 00568 #ifdef KEY 00569 extern const char *FREQ_non_local_targ_freq; 00570 #endif 00571 00572 extern BOOL CG_enable_rename; 00573 00574 /* Prefetch and load latency */ 00575 00576 extern BOOL CG_enable_prefetch; 00577 extern BOOL CG_enable_z_conf_prefetch; 00578 extern BOOL CG_enable_nz_conf_prefetch; 00579 extern BOOL CG_enable_pf_L1_ld; 00580 extern BOOL CG_enable_pf_L1_st; 00581 extern BOOL CG_enable_pf_L2_ld; 00582 extern BOOL CG_enable_pf_L2_st; 00583 extern BOOL CG_exclusive_prefetch; 00584 00585 extern INT32 CG_L1_ld_latency; 00586 extern INT32 CG_L2_ld_latency; 00587 extern INT32 CG_z_conf_L1_ld_latency; 00588 extern INT32 CG_z_conf_L2_ld_latency; 00589 extern INT32 CG_ld_latency; 00590 extern INT32 CG_L1_pf_latency; 00591 extern INT32 CG_L2_pf_latency; 00592 00593 extern BOOL CGSPILL_Rematerialize_Constants; 00594 extern BOOL CGSPILL_Enable_Force_Rematerialization; 00595 00596 /* GCM, LOCS and IGLS */ 00597 00598 extern BOOL LOCS_PRE_Enable_Scheduling; 00599 extern BOOL LOCS_POST_Enable_Scheduling; 00600 extern BOOL LOCS_Enable_Bundle_Formation; 00601 extern BOOL LOCS_Enable_Scheduling; 00602 extern BOOL GCM_Enable_Scheduling; 00603 extern BOOL GCM_PRE_Enable_Scheduling; 00604 extern BOOL GCM_POST_Enable_Scheduling; 00605 extern BOOL GCM_Motion_Across_Calls; 00606 extern BOOL GCM_Min_Reg_Usage; 00607 extern BOOL GCM_Pointer_Spec; 00608 extern BOOL GCM_Eager_Ptr_Deref; 00609 extern BOOL GCM_Speculative_Loads; 00610 extern BOOL GCM_Predicated_Loads; 00611 extern BOOL GCM_Test; 00612 extern BOOL CGTARG_Enable_Brlikely; 00613 extern BOOL Enable_Fill_Delay_Slots; 00614 extern BOOL GCM_Enable_Fill_Delay_Slots; 00615 extern BOOL GCM_Enable_Cflow; 00616 extern const char *CGTARG_Branch_Taken_Prob; 00617 extern double CGTARG_Branch_Taken_Probability; 00618 extern BOOL CGTARG_Branch_Taken_Prob_overridden; 00619 extern BOOL IGLS_Enable_PRE_HB_Scheduling; 00620 extern BOOL IGLS_Enable_POST_HB_Scheduling; 00621 extern BOOL IGLS_Enable_HB_Scheduling; 00622 extern BOOL IGLS_Enable_All_Scheduling; 00623 #if defined(TARG_IA64) || defined(TARG_SL) || defined(TARG_MIPS) 00624 extern BOOL RGN_Enable_All_Scheduling; 00625 extern BOOL CG_Enable_Regional_Global_Sched; 00626 extern BOOL CG_Enable_Regional_Local_Sched; 00627 extern BOOL CG_Enable_Include_Memread_Arc; 00628 extern BOOL CG_Enable_REGION_formation; 00629 #endif 00630 #ifdef TARG_SL2 00631 extern const char* App_Name; 00632 #endif 00633 00634 #if defined(TARG_SL) 00635 extern BOOL CG_Gen_16bit ; 00636 extern BOOL CG_Enable_br16; 00637 extern INT32 CG_localsch_pre_size; 00638 extern BOOL CG_dsp_thread; 00639 extern BOOL CG_check_quadword; 00640 extern BOOL CG_rep_unpaired16; 00641 extern BOOL CG_ignore_mem_alias; 00642 extern BOOL CG_stack_layout; 00643 extern INT32 CG_ISR; 00644 extern INT32 CG_Max_Accreg; 00645 extern INT32 CG_Max_Addreg; 00646 extern BOOL CG_round_spreg; 00647 extern BOOL CG_check_packed; 00648 #endif 00649 00650 extern BOOL EMIT_pjump_all; 00651 extern BOOL EMIT_use_cold_section; 00652 extern BOOL EMIT_interface_section; 00653 00654 extern INT32 EMIT_Long_Branch_Limit; /* max distance (in bytes) for branches */ 00655 extern BOOL EMIT_stop_bits_for_asm; 00656 extern BOOL EMIT_stop_bits_for_volatile_asm; 00657 extern BOOL EMIT_explicit_bundles; 00658 00659 extern INT32 CGEXP_expandconstant; /* maximum # instructions to expand constants */ 00660 #define DEFAULT_CGEXP_CONSTANT 3 00661 00662 extern BOOL CGEXP_use_copyfcc; 00663 extern BOOL CGEXP_normalize_logical; 00664 extern BOOL CGEXP_gp_prolog_call_shared; 00665 extern BOOL CGEXP_fast_imul; 00666 extern BOOL CGEXP_float_consts_from_ints; 00667 extern BOOL CGEXP_cvrt_int_div_to_mult; 00668 extern BOOL CGEXP_cvrt_int_div_to_fdiv; 00669 extern BOOL CGEXP_opt_float_div_by_const; 00670 #ifdef KEY 00671 extern BOOL CGEXP_cvrt_int_mult_to_add_shift; 00672 #endif 00673 00674 // 10/17/00: these are temporary for osprey tuning -- remove later 00675 extern const char *CGEXP_lfhint_L1; 00676 extern const char *CGEXP_lfhint_L2; 00677 extern const char *CGEXP_ldhint_L1; 00678 extern const char *CGEXP_ldhint_L2; 00679 extern const char *CGEXP_sthint_L1; 00680 extern const char *CGEXP_sthint_L2; 00681 00682 extern BOOL LRA_do_reorder; 00683 #if defined(TARG_SL) //sl2 specific option 00684 extern BOOL Enable_Checking_Register_Allocation; 00685 extern BOOL CG_sl2; 00686 extern BOOL CG_SL2_enable_combine_condmv; 00687 extern BOOL CG_SL2_enable_peephole; 00688 extern BOOL CG_SL2_enable_v1buf_expansion; 00689 extern BOOL CG_Enable_Macro_Instr_Combine; 00690 #endif 00691 00692 00693 #ifdef TARG_X8664 00694 extern BOOL LRA_prefer_legacy_regs; 00695 #endif 00696 #ifdef KEY 00697 extern BOOL LRA_prefer_lru_reg; 00698 extern BOOL LRA_prefer_lru_reg_Set; 00699 extern INT32 LRA_inflate_reg_request; 00700 extern BOOL LRA_inflate_reg_request_Set; 00701 #endif 00702 00703 extern BOOL GRA_use_old_conflict; 00704 extern BOOL GRA_shrink_wrap; 00705 extern BOOL GRA_loop_splitting; 00706 extern BOOL GRA_home; 00707 extern BOOL GRA_remove_spills; 00708 extern BOOL GRA_preference_globals; 00709 extern BOOL GRA_preference_dedicated; 00710 extern BOOL GRA_preference_glue; 00711 extern BOOL GRA_preference_all; 00712 extern BOOL GRA_ensure_spill_proximity; 00713 extern BOOL GRA_choose_best_split; 00714 extern BOOL GRA_use_stacked_regs; 00715 extern BOOL GRA_redo_liveness; 00716 extern BOOL GRA_recalc_liveness; 00717 extern INT32 GRA_non_home_hi; 00718 extern INT32 GRA_non_home_lo; 00719 extern const char* GRA_call_split_freq_string; 00720 extern const char* GRA_spill_count_factor_string; 00721 #ifdef KEY 00722 extern BOOL GRA_exclude_callee_saved_regs; 00723 extern BOOL GRA_eh_exclude_callee_saved_regs; 00724 extern BOOL GRA_fp_exclude_callee_saved_regs; 00725 #endif 00726 00727 extern BOOL HB_formation; 00728 #ifdef KEY 00729 extern INT32 HB_if_conversion_cut_off; 00730 #endif 00731 extern BOOL HB_static_freq_heuristics; 00732 extern const char* HB_call_hazard_multiplier; 00733 extern const char* HB_memory_hazard_multiplier; 00734 extern const char* HB_min_path_priority_ratio; 00735 extern const char* HB_base_probability_contribution; 00736 extern INT HB_max_blocks; 00737 extern const char* HB_min_priority; 00738 extern const char* HB_max_sched_growth; 00739 extern BOOL HB_require_alias; 00740 extern BOOL HB_loops; 00741 extern BOOL HB_loops_with_exits; 00742 extern BOOL HB_complex_non_loop; 00743 extern BOOL HB_simple_ifc; 00744 extern BOOL HB_simple_ifc_set; 00745 extern BOOL HB_general_use_pq; 00746 extern BOOL HB_general_from_top; 00747 extern INT HB_min_blocks; 00748 extern BOOL HB_allow_tail_duplication; 00749 extern BOOL HB_exclude_calls; 00750 extern BOOL HB_exclude_pgtns; 00751 extern BOOL HB_skip_hammocks; 00752 extern BOOL GRA_LIVE_Predicate_Aware; 00753 00754 extern BOOL Use_Page_Zero; /* set bit in object to allow use of page 0 */ 00755 00756 extern INT32 CG_branch_mispredict_penalty; 00757 extern INT32 CG_branch_mispredict_factor; 00758 00759 // 00760 // Architecturally dependent flags. 00761 // 00762 extern BOOL HB_convert_loops_with_exits; 00763 extern BOOL HB_complex_non_loop_if_conversion; 00764 00765 00766 /* Recurrence breaking flags */ 00767 extern BOOL CG_LOOP_fix_recurrences; 00768 extern BOOL CG_LOOP_fix_recurrences_specified; 00769 extern BOOL CG_LOOP_back_substitution; 00770 extern BOOL CG_LOOP_back_substitution_specified; 00771 extern BOOL CG_LOOP_back_substitution_variant; 00772 extern BOOL CG_LOOP_back_substitution_variant_specified; 00773 extern BOOL CG_LOOP_interleave_reductions; 00774 extern BOOL CG_LOOP_interleave_reductions_specified; 00775 extern BOOL CG_LOOP_interleave_posti; 00776 extern BOOL CG_LOOP_interleave_posti_specified; 00777 extern BOOL CG_LOOP_reassociate; 00778 extern BOOL CG_LOOP_reassociate_specified; 00779 extern INT32 CG_LOOP_recurrence_min_omega; 00780 #ifdef KEY 00781 extern INT32 CG_LOOP_recurrence_max_omega; 00782 extern BOOL LOCS_Best; 00783 extern BOOL LOCS_Best_set; 00784 extern BOOL LOCS_Fwd_Scheduling; 00785 extern BOOL LOCS_Fwd_Scheduling_set; 00786 extern UINT32 LOCS_Scheduling_Algorithm; 00787 extern BOOL LOCS_Scheduling_Algorithm_set; 00788 extern BOOL CG_min_spill_loc_size; 00789 extern BOOL CG_min_stack_size; 00790 extern BOOL flag_test_coverage; 00791 extern OPTION_LIST *Arc_Profile_Region; 00792 extern INT32 CG_cse_regs; 00793 extern INT32 CG_sse_cse_regs; 00794 extern BOOL LOCS_Shallow_Depth; 00795 extern BOOL LOCS_Shallow_Depth_set; 00796 extern BOOL LOCS_Balance_Ready_Types; 00797 extern BOOL LOCS_Balance_Ready_Types_set; 00798 extern BOOL LOCS_Balance_Unsched_Types; 00799 extern BOOL LOCS_Balance_Unsched_Types_set; 00800 extern UINT32 LOCS_Balance_Ready_Int; 00801 extern BOOL LOCS_Balance_Ready_Int_set; 00802 extern UINT32 LOCS_Balance_Ready_Fp; 00803 extern BOOL LOCS_Balance_Ready_Fp_set; 00804 extern UINT32 LOCS_Balance_Unsched_Int; 00805 extern BOOL LOCS_Balance_Unsched_Int_set; 00806 extern UINT32 LOCS_Balance_Unsched_Fp; 00807 extern BOOL LOCS_Balance_Unsched_Fp_set; 00808 extern BOOL LOCS_Reduce_Prefetch; 00809 extern BOOL LOCS_Reduce_Prefetch_set; 00810 #endif 00811 #ifdef TARG_X8664 00812 extern INT32 CG_sse_load_execute; 00813 extern INT32 CG_load_execute; 00814 extern BOOL CG_use_movlpd; 00815 extern BOOL CG_use_setcc; 00816 extern BOOL CG_use_short_form; 00817 extern BOOL CG_loadbw_execute; 00818 extern BOOL CG_p2align; 00819 extern UINT64 CG_p2align_freq; 00820 extern UINT32 CG_p2align_max_skip_bytes; 00821 extern UINT32 CG_movnti; 00822 extern BOOL CG_use_xortozero; 00823 extern BOOL CG_use_xortozero_Set; 00824 extern BOOL CG_use_incdec; 00825 extern BOOL CG_use_test; 00826 extern BOOL CG_fold_shiftadd; 00827 extern BOOL CG_use_prefetchnta; 00828 extern BOOL CG_idivbyconst_opt; 00829 extern BOOL CG_fold_constimul; 00830 extern BOOL CG_LOOP_cloop; 00831 extern BOOL CG_use_lddqu; 00832 extern BOOL CG_push_pop_int_saved_regs; 00833 extern BOOL CG_push_pop_int_saved_regs_Set; 00834 extern BOOL CG_valgrind_friendly; 00835 extern UINT32 CG_ptr_load_use_latency; 00836 #endif 00837 00838 // Cycle Count Flags 00839 extern BOOL CG_Enable_Cycle_Count; 00840 extern BOOL Cycle_PU_Enable; 00841 extern BOOL Cycle_BB_Enable; 00842 extern const char *Cycle_String; 00843 00844 // temporary flags for controlling algorithm selection for fdiv, sqrt, etc 00845 extern const char *CGEXP_fdiv_algorithm; 00846 extern const char *CGEXP_sqrt_algorithm; 00847 #ifdef TARG_NVISA 00848 // treat auto stack variables as statics put in local space 00849 extern BOOL CGEXP_auto_as_static; 00850 // generate condition codes 00851 extern BOOL CGEXP_gen_ccodes; 00852 00853 extern BOOL CG_vector_loadstore; // create vector loads/stores 00854 00855 extern BOOL CG_rematerialize_grf; // rematerialize GRF (shared memory) loads 00856 extern BOOL CG_remove_typeconv; // type conversion removal optimization 00857 extern BOOL CG_optimize_copies; // optimize copies that have later src use 00858 extern BOOL CG_use_16bit_ops; // try to replace 32bit ops with 16bit ops 00859 extern BOOL CG_skip_local_16bit; // to skip individual 16bit optimizations 00860 00861 #endif 00862 00863 #endif /* cg_flags_INCLUDED */
1.5.6