00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097 #ifndef ipfec_options_INCLUDED
00098 #define ipfec_options_INCLUDED
00099
00100 #include <flags.h>
00101
00102
00103 extern BOOL CG_Enable_Ipfec_Phases;
00104 extern BOOL EMIT_count_cycles;
00105 extern INT32 IPFEC_Stacked_Cut_Num;
00106 extern INT32 IPFEC_Stacked_Spill_Num;
00107 extern BOOL IPFEC_Enable_Region_Formation;
00108 extern BOOL IPFEC_Enable_Region_Decomposition;
00109 extern BOOL IPFEC_Enable_Tail_Duplication;
00110 extern BOOL IPFEC_Enable_Exit_Probability;
00111 extern BOOL IPFEC_Enable_If_Conversion;
00112 extern BOOL IPFEC_Force_If_Conv;
00113 extern BOOL IPFEC_Relaxed_If_Conv;
00114 extern BOOL IPFEC_Force_Para_Comp_Gen;
00115 extern BOOL IPFEC_Para_Comp_Gen;
00116 extern BOOL IPFEC_Combine_Exit;
00117 extern BOOL IPFEC_Disable_Merge_BB;
00118 extern BOOL IPFEC_Enable_PRDB;
00119 extern BOOL IPFEC_Enable_BB_Verify;
00120 extern BOOL IPFEC_Enable_Opt_after_schedule;
00121 extern BOOL IPFEC_Enable_Prepass_GLOS;
00122 extern BOOL IPFEC_Enable_Postpass_GLOS;
00123 extern BOOL IPFEC_Enable_Prepass_LOCS;
00124 extern BOOL IPFEC_Enable_Postpass_LOCS;
00125 extern BOOL IPFEC_Enable_Speculation;
00126 extern BOOL IPFEC_Enable_Data_Speculation;
00127 extern BOOL IPFEC_Enable_Cntl_Speculation;
00128 extern BOOL IPFEC_Enable_FP_Ld_Speculation;
00129 extern BOOL IPFEC_Enable_Data_Spec_Res_Aware;
00130 extern BOOL IPFEC_Enable_Edge_Profile;
00131 extern BOOL IPFEC_Enable_Value_Profile;
00132 extern BOOL IPFEC_Enable_Stride_Profile;
00133 extern BOOL IPFEC_Enable_Random_Prob;
00134 extern BOOL IPFEC_Enable_Edge_Profile_Annot;
00135 extern BOOL IPFEC_Enable_Value_Profile_Annot;
00136 extern BOOL IPFEC_Enable_Stride_Profile_Annot;
00137 extern BOOL IPFEC_Glos_Reg_Pressure_Aware;
00138 extern BOOL IPFEC_Glos_Split_Entry_BB;
00139 extern BOOL IPFEC_Glos_Split_Exit_BB;
00140 extern BOOL IPFEC_Glos_Enable_P_Ready_Code_Motion;
00141 extern BOOL IPFEC_Glos_Motion_Across_Calls ;
00142 extern BOOL IPFEC_Glos_Code_Motion_Across_Nested_Rgn;
00143 extern BOOL IPFEC_Glos_Enable_Cntl_Spec_If_Converted_Code;
00144 extern BOOL IPFEC_Glos_Enable_Renaming;
00145 extern BOOL IPFEC_Stress_Spec;
00146 extern BOOL IPFEC_Adjust_Variable_Latency ;
00147 extern BOOL IPFEC_Enable_Multi_Branch ;
00148 extern BOOL IPFEC_Enable_Pre_Multi_Branch ;
00149 extern BOOL IPFEC_Enable_Post_Multi_Branch ;
00150 extern INT32 IPFEC_Enable_Stride_Prefetch;
00151 extern BOOL IPFEC_Enable_LICM;
00152
00153 extern char *Instru_File_Name;
00154 extern char *Fb_File_Name;
00155 extern char *Value_Instru_File_Name;
00156 extern char *Stride_Instru_File_Name;
00157 extern UINT32 Value_Instr_Range;
00158 extern UINT32 Value_Instr_Pu_Id;
00159 extern UINT64 Value_Instr_Pu_Id_Mask;
00160 extern char *Value_Fb_File_Name;
00161 extern char *Stride_Fb_File_Name;
00162
00163
00164
00165 extern BOOL IPFEC_Enable_Compressed_Template;
00166 extern BOOL IPFEC_Enable_Pre_Bundling;
00167 extern BOOL IPFEC_Force_CHK_Fail;
00168 extern BOOL IPFEC_Enable_Cascade;
00169 extern BOOL IPFEC_Hold_Uses;
00170 extern BOOL IPFEC_Profitability;
00171 extern BOOL IPFEC_Chk_Compact;
00172 extern BOOL IPFEC_Enable_Safety_Load;
00173 extern BOOL IPFEC_Enable_Insert_UNAT;
00174
00175 extern char * IPFEC_safe_cntl_spec_prob ;
00176 extern char * IPFEC_unsafe_cntl_spec_prob ;
00177
00178
00179
00180 extern INT32 ORC_Stacked_Cut_Num;
00181 extern INT32 ORC_Stacked_Spill_Num;
00182 extern BOOL ORC_Enable_Region_Formation;
00183 extern BOOL ORC_Enable_Region_Decomposition;
00184 extern BOOL ORC_Enable_Tail_Duplication;
00185 extern BOOL ORC_Enable_Exit_Probability;
00186 extern BOOL ORC_Enable_If_Conversion;
00187 extern BOOL ORC_Force_If_Conv;
00188 extern BOOL ORC_Relaxed_If_Conv;
00189 extern BOOL ORC_Force_Para_Comp_Gen;
00190 extern BOOL ORC_Para_Comp_Gen;
00191 extern BOOL ORC_Combine_Exit;
00192 extern BOOL ORC_Disable_Merge_BB;
00193 extern BOOL ORC_Enable_PRDB;
00194 extern BOOL ORC_Enable_BB_Verify;
00195 extern BOOL ORC_Enable_Opt_after_schedule;
00196 extern BOOL ORC_Enable_Prepass_GLOS;
00197 extern BOOL ORC_Enable_Postpass_GLOS;
00198 extern BOOL ORC_Enable_Prepass_LOCS;
00199 extern BOOL ORC_Enable_Postpass_LOCS;
00200 extern BOOL ORC_Enable_Speculation;
00201 extern BOOL ORC_Enable_Data_Speculation;
00202 extern BOOL ORC_Enable_Cntl_Speculation;
00203 extern BOOL ORC_Enable_FP_Ld_Speculation;
00204 extern BOOL ORC_Enable_Data_Spec_Res_Aware;
00205 extern BOOL ORC_Enable_Edge_Profile;
00206 extern BOOL ORC_Enable_Value_Profile;
00207 extern BOOL ORC_Enable_Stride_Profile;
00208 extern BOOL ORC_Enable_Random_Prob;
00209 extern BOOL ORC_Enable_Edge_Profile_Annot;
00210 extern BOOL ORC_Enable_Value_Profile_Annot;
00211 extern BOOL ORC_Enable_Stride_Profile_Annot;
00212 extern BOOL ORC_Glos_Reg_Pressure_Aware;
00213 extern BOOL ORC_Glos_Split_Entry_BB;
00214 extern BOOL ORC_Glos_Split_Exit_BB;
00215 extern BOOL ORC_Glos_Enable_P_Ready_Code_Motion;
00216 extern BOOL ORC_Glos_Motion_Across_Calls ;
00217 extern BOOL ORC_Glos_Code_Motion_Across_Nested_Rgn;
00218 extern BOOL ORC_Glos_Enable_Cntl_Spec_If_Converted_Code;
00219 extern BOOL ORC_Glos_Enable_Renaming;
00220 extern BOOL ORC_Stress_Spec;
00221 extern BOOL ORC_Adjust_Variable_Latency ;
00222 extern BOOL ORC_Enable_Multi_Branch ;
00223 extern BOOL ORC_Enable_Pre_Multi_Branch ;
00224 extern BOOL ORC_Enable_Post_Multi_Branch ;
00225 extern INT32 ORC_Enable_Stride_Prefetch;
00226 extern BOOL ORC_Enable_Cache_Analysis;
00227
00228
00229 extern BOOL ORC_Enable_Compressed_Template;
00230 extern BOOL ORC_Enable_Pre_Bundling;
00231 extern BOOL ORC_Force_CHK_Fail;
00232 extern BOOL ORC_Enable_Cascade;
00233 extern BOOL ORC_Hold_Uses;
00234 extern BOOL ORC_Profitability;
00235 extern BOOL ORC_Chk_Compact;
00236 extern BOOL ORC_Enable_Safety_Load;
00237 extern BOOL ORC_Enable_Insert_UNAT;
00238 extern BOOL ORC_Enable_LICM;
00239
00240 extern char * ORC_safe_cntl_spec_prob ;
00241 extern char * ORC_unsafe_cntl_spec_prob ;
00242
00243
00244
00245 typedef enum {
00246 Sched_care_nothing,
00247 Sched_care_width,
00248 Sched_care_resource,
00249 Sched_care_bundle
00250 } SCHED_CARE;
00251 extern INT32 IPFEC_sched_care_machine;
00252 extern INT32 ORC_sched_care_machine;
00253
00254
00255 extern BOOL VT_Enable_BB_OP;
00256 extern BOOL VT_Enable_Global_CFG;
00257 extern BOOL VT_Enable_Regional_CFG;
00258 extern BOOL VT_Enable_Region_Tree;
00259 extern BOOL VT_Enable_BB_DAG;
00260 extern BOOL VT_Enable_Regional_DAG;
00261 extern BOOL VT_Enable_Partition_Graph;
00262 extern BOOL VT_Enable_CFG_Label;
00263 extern BOOL VT_Enable_DAG_BR;
00264
00265
00266
00267
00268 typedef enum {
00269 SK_NONE,
00270 SK_AFTER,
00271 SK_BEFORE,
00272 SK_EQUAL
00273 } SKIPKIND;
00274
00275 typedef class skiplist {
00276 public:
00277 mINT32 _size;
00278 mINT8 *_kind;
00279 mINT32 *_val;
00280 UINT _flags;
00281
00282 skiplist():
00283 _size(0),
00284 _kind(NULL),
00285 _val(NULL),
00286 _flags(0) {}
00287
00288 ~skiplist() {}
00289
00290 mINT32& SKIPLIST_size() { return _size; }
00291 mINT8*& SKIPLIST_kind_vec() { return _kind; }
00292 mINT8& SKIPLIST_kind(UINT i) { return _kind[i]; }
00293 void Set_SKIPLIST_kind(UINT i, mINT8 v) { _kind[i] = v; }
00294 mINT32*& SKIPLIST_val_vec() { return _val; }
00295 mINT32& SKIPLIST_val(UINT i) { return _val[i]; }
00296 UINT& SKIPLIST_flags() { return _flags; }
00297 }SKIPLIST;
00298
00299
00300 #define SL_GLOBAL 0x0001
00301 #define SL_LOCAL 0X0002
00302
00303 #define SL_global(sl) (sl->SKIPLIST_flags() & SL_GLOBAL)
00304 #define SL_local(sl) (sl->SKIPLIST_flags() & SL_LOCAL)
00305
00306 #define Set_SL_global(sl) (sl->SKIPLIST_flags() |= SL_GLOBAL)
00307 #define Set_SL_local(sl) (sl->SKIPLIST_flags() |= SL_LOCAL)
00308
00309 #define Reset_SL_global(sl) (sl->SKIPLIST_flags() &= ~SL_GLOBAL)
00310 #define Reset_SL_local(sl) (sl->SKIPLIST_flags() &= ~SL_LOCAL)
00311
00312
00313
00314
00315
00316
00317
00318 extern OPTION_LIST *raw_if_conv_skip_rgn;
00319 extern SKIPLIST *if_conv_skip_rgn;
00320 extern OPTION_LIST *raw_if_conv_skip_area;
00321 extern SKIPLIST *if_conv_skip_area;
00322 extern OPTION_LIST *raw_if_conv_skip_PU;
00323 extern SKIPLIST *if_conv_skip_PU;
00324
00325
00326
00327 extern OPTION_LIST *raw_spec_skip_bb;
00328 extern SKIPLIST *spec_skip_bb;
00329 extern OPTION_LIST *raw_spec_skip_rgn;
00330 extern SKIPLIST *spec_skip_rgn;
00331 extern OPTION_LIST *raw_spec_skip_op;
00332 extern SKIPLIST *spec_skip_op;
00333 extern OPTION_LIST *raw_spec_skip_PU;
00334 extern SKIPLIST *spec_skip_PU;
00335
00336
00337 extern OPTION_LIST *raw_msched_skip_bb;
00338 extern SKIPLIST *msched_skip_bb;
00339 extern OPTION_LIST *raw_msched_skip_rgn;
00340 extern SKIPLIST *msched_skip_rgn;
00341
00342
00343 extern OPTION_LIST *raw_glos_skip_rgn;
00344 extern SKIPLIST *glos_skip_rgn;
00345 extern OPTION_LIST *raw_glos_skip_bb;
00346 extern SKIPLIST *glos_skip_bb;
00347 extern OPTION_LIST *raw_glos_skip_op;
00348 extern SKIPLIST *glos_skip_op;
00349 extern OPTION_LIST *raw_pre_glos_skip_PU;
00350 extern SKIPLIST *pre_glos_skip_PU;
00351 extern OPTION_LIST *raw_post_locs_skip_PU;
00352 extern SKIPLIST *post_locs_skip_PU;
00353 extern OPTION_LIST *raw_locs_skip_bb;
00354 extern SKIPLIST *locs_skip_bb;
00355 extern OPTION_LIST *raw_glos_rename_skip_bb;
00356 extern SKIPLIST *glos_rename_skip_bb;
00357 extern OPTION_LIST *raw_glos_rename_skip_op;
00358 extern SKIPLIST *glos_rename_skip_op;
00359
00360
00361 extern OPTION_LIST *raw_mlbr_skip_bb;
00362 extern SKIPLIST *mlbr_skip_bb;
00363
00364
00365 extern OPTION_LIST *raw_PRDB_skip_PU;
00366 extern SKIPLIST *PRDB_skip_PU;
00367
00368
00369 extern OPTION_LIST *raw_latency2;
00370 extern SKIPLIST *latency2;
00371
00372
00373 void Copy_Ipfec_Flags (void) ;
00374
00375
00376
00377 extern SKIPLIST* IPFEC_Build_Skiplist ( OPTION_LIST *olist );
00378
00379
00380 extern BOOL IPFEC_Query_Skiplist ( SKIPLIST *skip, INT32 elmt ,INT32 field = -1 );
00381
00382 #endif
00383