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 #ifndef opt_main_INCLUDED
00060 #define opt_main_INCLUDED "opt_main.h"
00061 #ifdef _KEEP_RCS_ID
00062 static char *opt_mainrcs_id = opt_main_INCLUDED"$Revision: 1.4 $";
00063 #endif
00064
00065
00066 class WN;
00067 typedef struct mem_pool MEM_POOL;
00068
00069 class ALIAS_MANAGER;
00070 class ALIAS_RULE;
00071 class CFG;
00072 class EXC;
00073 class CODEMAP;
00074 class DF_LOCAL;
00075 class EMITTER;
00076 class ITABLE;
00077 class MAIN_EMITTER;
00078 class OPT_STAB;
00079 class RVI;
00080 class SSA;
00081 class FENCEPOSTING;
00082 class PRE_RVI_HOOKS;
00083 class VN;
00084
00085 #include "opt_config.h"
00086 #include "optimizer.h"
00087 #include "region_util.h"
00088
00089
00090 class COMP_UNIT {
00091 private:
00092 OPT_PHASE _phase;
00093 WN *_input_tree;
00094 CFG *_cfg;
00095 EXC *_exc;
00096 RID *_rid;
00097 OPT_STAB *_opt_stab;
00098 SSA *_ssa;
00099 ALIAS_MANAGER *_alias_mgr;
00100 ALIAS_RULE *_arule;
00101 CODEMAP *_htable;
00102
00103 union {
00104 PRE_RVI_HOOKS *_pre_rvi_hooks;
00105 ITABLE *_itable;
00106 };
00107
00108 DF_LOCAL *_df_local;
00109 EMITTER *_emitter;
00110 FENCEPOSTING *_fenceposting;
00111 MAIN_EMITTER *_main_emitter;
00112 MEM_POOL *_mem_pool;
00113 MEM_POOL *_loc_pool;
00114
00115 COMP_UNIT(void);
00116 COMP_UNIT(const COMP_UNIT&);
00117 COMP_UNIT& operator = (const COMP_UNIT&);
00118
00119 public:
00120
00121 COMP_UNIT(WN *t, ALIAS_MANAGER *, OPT_PHASE phase,
00122 MEM_POOL *gpool, MEM_POOL *lpool
00123 );
00124 ~COMP_UNIT(void);
00125
00126 void Build_df_local(CFG *, OPT_STAB *, ITABLE *, ALIAS_RULE *);
00127 void Build_itable(ITABLE *, CFG *, CODEMAP *);
00128 void Collect_statistics(void);
00129 void Compute_PRE_saves(void);
00130 void Create_fenceposting(void);
00131 void Create_mainopt_res(void);
00132 void Create_main_emitter(RVI *);
00133 void Delete_main_emitter(void);
00134 void Delete_fenceposting(void);
00135 void Do_vnfre(BOOL before_epre);
00136 void Do_bitwise_dce(BOOL copy_propagate);
00137
00138 void Do_code_motion(void);
00139 void Do_copy_propagate(void);
00140 void Do_dead_code_elim(BOOL do_unreachable,
00141 BOOL do_dce_global,
00142 BOOL do_dce_alias,
00143 BOOL do_agg_dce,
00144 BOOL do_identity_removal,
00145 BOOL do_preg_renumbering,
00146 BOOL *paths_removed);
00147
00148 void Do_iv_recognition(void);
00149 void Do_induction_var_elim(void);
00150 void Do_ldx_optimization(void);
00151 void Do_load_pre(BOOL do_consts,
00152 BOOL do_loads);
00153 void Do_local_rvi(void);
00154 void Find_lr_shrink_cand(void);
00155 void Introduce_mtype_bool(void);
00156 void Do_new_pre(void);
00157 void Do_store_pre(void);
00158 void Do_update_dead_sources(void);
00159 void U64_lower_cr(BOOL leave_CVTL_at_leaf);
00160 void Lower_to_extract_compose(void);
00161 void Fold_lda_iload_istore(void);
00162 WN *Emit_ML_WHIRL(RVI *);
00163 void Find_iv(void);
00164 void Init_df_sets(void);
00165 WN *Normalize_loop(WN *wn);
00166 BOOL Verify_IR(CFG *, CODEMAP *, INT);
00167 BOOL Verify_CODEMAP(void);
00168 void Verify_version(void);
00169 #ifdef KEY
00170 void Find_uninitialized_locals(void);
00171 void Find_uninit_locals_for_entry(BB_NODE*);
00172 #endif
00173
00174
00175 WN *Input_tree(void) { return _input_tree; }
00176 MEM_POOL *Mem_pool(void) { return _mem_pool; }
00177 MEM_POOL *Loc_pool(void) { return _loc_pool; }
00178 CFG *Cfg(void) { return _cfg; }
00179 EXC *Exc(void) { return _exc; }
00180 RID *Rid(void) { return _rid; }
00181 OPT_STAB *Opt_stab(void) { return _opt_stab; }
00182 SSA *Ssa(void) { return _ssa; }
00183 ALIAS_MANAGER *Alias_mgr(void) { return _alias_mgr; }
00184 ALIAS_RULE *Arule(void) { return _arule; }
00185 CODEMAP *Htable(void) { return _htable; }
00186 ITABLE *Itable(void) { return _itable; }
00187 EMITTER *Emitter(void) { return _emitter; }
00188 FENCEPOSTING *Fenceposting(void) { return _fenceposting; }
00189 MAIN_EMITTER *Main_emitter(void) { return _main_emitter; }
00190 OPT_PHASE Phase(void) { return _phase; }
00191 PRE_RVI_HOOKS *Pre_rvi_hooks(void) { return _pre_rvi_hooks; }
00192 void Set_pre_rvi_hooks(PRE_RVI_HOOKS *pre_rvi_hooks)
00193 { _pre_rvi_hooks = pre_rvi_hooks; }
00194 };
00195
00196
00197 extern PREOPT_PHASES Preopt_Current_Phase;
00198
00199 #endif // opt_main_INCLUDED