X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firflag_t.h;h=47c755be66cc7d778844cf6286ebb5acd8c8b4ef;hb=169fd803ea2ed08171113c1fd7ab4e528e1ebc26;hp=2d8babf82d78c21aa07549bc6daa766614fb7486;hpb=e570f00fb465d212dde403160e97ab45d36d1d7e;p=libfirm diff --git a/ir/ir/irflag_t.h b/ir/ir/irflag_t.h index 2d8babf82..47c755be6 100644 --- a/ir/ir/irflag_t.h +++ b/ir/ir/irflag_t.h @@ -69,159 +69,251 @@ typedef enum { */ OPT_NORMALIZE = 0x00001000, + /** Remove tail-recursion. */ + OPT_TAIL_RECURSION = 0x00002000, + + /** Free never called methods */ + OPT_DEAD_METHOD_ELIMINATION = 0x00004000, + + /** precise exception context */ + OPT_PRECISE_EXC_CONTEXT = 0x00008000, + + /** EMPTY SLOT !!! TO BE ASSIGNED */ + + /** Do loop unrolling */ + OPT_LOOP_UNROLLING = 0x00010000, + + /** Do Strength reduction */ + OPT_STRENGTH_RED = 0x00020000, + + /** Optimize Loads and Stores */ + OPT_REDUNDANT_LOADSTORE = 0x00040000, + + /** Optimize Fragile OPs */ + OPT_FRAGILE_OPS = 0x00080000, + + /** If conversion. */ + OPT_IF_CONVERSION = 0x00100000, + + /** Optimize real function calls. */ + OPT_REAL_FUNC_CALL = 0x00200000, + + /** Optimize cast nodes. */ + OPT_CLASS_CASTS = 0x00400000, + OPT_SUPPRESS_DOWNCAST_OPT = 0x00800000, + + /** Not really an optimization, removes Confirm nodes */ + OPT_REMOVE_CONFIRM = 0x01000000, + + /** Scalar replacement. */ + OPT_SCALAR_REPLACEMENT = 0x02000000, + /** Turn off all optimizations. */ - OPT_OPTIMIZED = 0x40000000 + OPT_OPTIMIZED = 0x40000000, + } libfirm_opts_t; extern optimization_state_t libFIRM_opt; +extern optimization_state_t libFIRM_verb; -/* take care of the INLINE/USE_GCC_INLINE mess */ - -# ifndef INLINE -# ifdef USE_GCC_INLINE -# define INLINE __extension__ ((__inline__)) -# else /* defined USE_GCC_INLINE */ -# define INLINE -# endif /* define USE_GCC_INLINE */ -# endif /* defined INLINE */ +extern int firm_verbosity_level; /** Returns constant folding optimization setting. */ -INLINE int get_opt_cse(void) -# ifdef USE_GCC_INLINE +static INLINE int _get_opt_cse(void) { return libFIRM_opt & OPT_CSE; } -# else /* defined USE_GCC_INLINE */ -; -# endif /* not defined USE_GCC_INLINE */ /** Returns constant subexpression elimination setting. */ -INLINE int get_opt_global_cse(void) -# ifdef USE_GCC_INLINE +static INLINE int get_opt_global_cse(void) { return libFIRM_opt & OPT_GLOBAL_CSE; } -# else /* defined USE_GCC_INLINE */ -; -# endif /* not defined USE_GCC_INLINE */ + +static INLINE int get_opt_loop_unrolling(void) +{ + return libFIRM_opt & OPT_LOOP_UNROLLING; +} + +/** Returns verbosity for loop unrolling. */ +static INLINE int get_opt_loop_unrolling_verbose(void) +{ + return libFIRM_verb & OPT_LOOP_UNROLLING; +} + +static INLINE int get_opt_strength_red(void) +{ + return libFIRM_opt & OPT_STRENGTH_RED; +} + +/** Returns verbosity for strength reduction. */ +static INLINE int get_opt_strength_red_verbose(void) +{ + return libFIRM_verb & OPT_STRENGTH_RED; +} /** Returns global constant subexpression elimination setting. */ -INLINE int get_opt_constant_folding(void) -# ifdef USE_GCC_INLINE +static INLINE int get_opt_constant_folding(void) { return libFIRM_opt & OPT_CONSTANT_FOLDING; } -# else /* defined USE_GCC_INLINE */ -; -# endif /* not defined USE_GCC_INLINE */ + +/** Returns global constant subexpression elimination setting. */ +static INLINE int get_opt_redundant_LoadStore(void) +{ + return libFIRM_opt & OPT_REDUNDANT_LOADSTORE; +} /** Returns unreachable code elimination setting. */ -INLINE int get_opt_unreachable_code(void) -# ifdef USE_GCC_INLINE +static INLINE int get_opt_unreachable_code(void) { return libFIRM_opt & OPT_UNREACHABLE_CODE; } -# else /* defined USE_GCC_INLINE */ -; -# endif /* not defined USE_GCC_INLINE */ /** Returns Straightening setting. */ -INLINE int get_opt_control_flow_straightening(void) -# ifdef USE_GCC_INLINE +static INLINE int get_opt_control_flow_straightening(void) { return libFIRM_opt & OPT_CONTROL_FLOW_STRAIGHTENING; } -# else /* defined USE_GCC_INLINE */ -; -# endif /* not defined USE_GCC_INLINE */ /** Returns if simplifications in local optimizations setting. */ -INLINE int get_opt_control_flow_weak_simplification(void) -# ifdef USE_GCC_INLINE +static INLINE int get_opt_control_flow_weak_simplification(void) { return libFIRM_opt & OPT_CONTROL_FLOW_WEAK_SIMPLIFICATION; } -# else /* defined USE_GCC_INLINE */ -; -# endif /* not defined USE_GCC_INLINE */ /** Returns strong if and loop simplification setting */ -INLINE int get_opt_control_flow_strong_simplification(void) -# ifdef USE_GCC_INLINE +static INLINE int get_opt_control_flow_strong_simplification(void) { return libFIRM_opt & OPT_CONTROL_FLOW_STRONG_SIMPLIFICATION; } -# else /* defined USE_GCC_INLINE */ -; -# endif /* not defined USE_GCC_INLINE */ /** Returns whether critical edges are removed */ -INLINE int get_opt_critical_edges(void) -# ifdef USE_GCC_INLINE +static INLINE int get_opt_critical_edges(void) { return libFIRM_opt & OPT_CRITICAL_EDGES; } -# else /* defined USE_GCC_INLINE */ -; -# endif /* not defined USE_GCC_INLINE */ /** Returns reassociation setting. */ -INLINE int get_opt_reassociation(void) -# ifdef USE_GCC_INLINE +static INLINE int get_opt_reassociation(void) { return libFIRM_opt & OPT_REASSOCIATION; } -# else /* defined USE_GCC_INLINE */ -; -# endif /* not defined USE_GCC_INLINE */ /** Returns dead node elimination setting. */ -INLINE int get_opt_dead_node_elimination(void) -# ifdef USE_GCC_INLINE +static INLINE int get_opt_dead_node_elimination(void) { return libFIRM_opt & OPT_DEAD_NODE_ELIMINATION; } -# else /* defined USE_GCC_INLINE */ -; -# endif /* not defined USE_GCC_INLINE */ + +/** Returns dead method elimination setting. */ +static INLINE int get_opt_dead_method_elimination(void) +{ + return libFIRM_opt & OPT_DEAD_METHOD_ELIMINATION; +} + +/** Returns dead method elimination setting. */ +static INLINE int get_opt_dead_method_elimination_verbose(void) +{ + return libFIRM_verb & OPT_DEAD_METHOD_ELIMINATION; +} /** Returns global optimization setting */ -INLINE int get_opt_optimize(void) -# ifdef USE_GCC_INLINE +static INLINE int get_opt_optimize(void) { return libFIRM_opt & OPT_OPTIMIZED; } -# else /* defined USE_GCC_INLINE */ -; -# endif /* not defined USE_GCC_INLINE */ + +static INLINE int _get_firm_verbosity (void) { + return firm_verbosity_level; +} /** Returns inlining setting. */ -INLINE int get_opt_inline(void) -# ifdef USE_GCC_INLINE +static INLINE int get_opt_inline(void) { return libFIRM_opt & OPT_INLINE; } -# else /* defined USE_GCC_INLINE */ -; -# endif /* not defined USE_GCC_INLINE */ -INLINE int get_opt_dyn_meth_dispatch(void) -# ifdef USE_GCC_INLINE +static INLINE int _get_opt_dyn_meth_dispatch(void) { return libFIRM_opt & OPT_DYN_METH_DISPATCH; } -# else /* defined USE_GCC_INLINE */ -; -# endif /* not defined USE_GCC_INLINE */ -INLINE int get_opt_normalize(void) -# ifdef USE_GCC_INLINE +static INLINE int _get_opt_optimize_class_casts (void) { + return libFIRM_opt & OPT_CLASS_CASTS; +} + +static INLINE int _get_opt_optimize_class_casts_verbose (void) { + return libFIRM_verb & OPT_CLASS_CASTS; +} + +static INLINE int _get_opt_suppress_downcast_optimization (void) { + return libFIRM_opt & OPT_SUPPRESS_DOWNCAST_OPT; +} + +static INLINE int get_opt_normalize(void) { return libFIRM_opt & OPT_NORMALIZE; } -# else /* defined USE_GCC_INLINE */ -; -# endif /* not defined USE_GCC_INLINE */ + +/** Returns tail-recursion setting. */ +static INLINE int get_opt_tail_recursion(void) +{ + return libFIRM_opt & OPT_TAIL_RECURSION; +} + +/** Returns tail-recursion setting. */ +static INLINE int get_opt_tail_recursion_verbose(void) +{ + return libFIRM_verb & OPT_TAIL_RECURSION; +} + +/** Returns precise exception context setting. */ +static INLINE int get_opt_precise_exc_context(void) +{ + return libFIRM_opt & OPT_PRECISE_EXC_CONTEXT; +} + +/** Returns fragile ops setting. */ +static INLINE int get_opt_fragile_ops(void) +{ + return libFIRM_opt & OPT_FRAGILE_OPS; +} + +/** Returns if conversion setting. */ +static INLINE int get_opt_if_conversion(void) +{ + return libFIRM_opt & OPT_IF_CONVERSION; +} + +/** Returns real function call optimization setting. */ +static INLINE int get_opt_real_func_call(void) +{ + return libFIRM_opt & OPT_REAL_FUNC_CALL; +} + +/** Returns Confirm removal setting. */ +static INLINE int get_opt_remove_Confirm(void) +{ + return libFIRM_opt & OPT_REMOVE_CONFIRM; +} + +/** Returns Confirm removal setting. */ +static INLINE int get_opt_scalar_replacement(void) +{ + return libFIRM_opt & OPT_SCALAR_REPLACEMENT; +} + +static INLINE int get_opt_scalar_replacement_verbose(void) { + return libFIRM_verb & OPT_SCALAR_REPLACEMENT; +} + +#define get_opt_cse() _get_opt_cse() +#define get_firm_verbosity() _get_firm_verbosity() +#define get_opt_dyn_meth_dispatch() _get_opt_dyn_meth_dispatch() +#define get_opt_optimize_class_casts() _get_opt_optimize_class_casts() +#define get_opt_optimize_class_casts_verbose() _get_opt_optimize_class_casts_verbose() +#define get_opt_suppress_downcast_optimization() _get_opt_suppress_downcast_optimization() #endif /* _IRFLAG_T_H_ */