X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=include%2Flibfirm%2Firflag.h;h=c7f83d25f15e4fbaeb53cb0e7a29145f7c2f5383;hb=cbc9fdd03cead0cd8d43142ae718d0460ebdfe5f;hp=a626b4d4ecbe49b9a0f23f8e84e45a41f91eddd2;hpb=74d5a9023b48f346eead323a74e28297659e34b7;p=libfirm diff --git a/include/libfirm/irflag.h b/include/libfirm/irflag.h index a626b4d4e..c7f83d25f 100644 --- a/include/libfirm/irflag.h +++ b/include/libfirm/irflag.h @@ -21,29 +21,31 @@ * @file * @brief Flags to control optimizations. * @author Christian Schaefer, Goetz Lindenmaier, Michael Beck - * @version $Id$ - * @brief + */ +#ifndef FIRM_IR_IRFLAG_H +#define FIRM_IR_IRFLAG_H + +#include "firm_types.h" +#include "begin.h" + +/** + * @ingroup iroptimize + * @defgroup Optimization Flags * Flags to customize the behavior of libfirm. * * There are the following groups of flags: - * 1. Optimization flags. - * a) There is a flag, 'optimize' to turn on/off all optimizations. - * b) There are flags for each individual optimization. Some flags turns + * -# Optimization flags. + * -# There is a flag, 'optimize' to turn on/off all optimizations. + * -# There are flags for each individual optimization. Some flags turns * transformations in several algorithms on/off. - * 2. Normalization flags. + * -# Normalization flags. * These flags steer transformations of the ir that improve it, as removing * dump Phi nodes (one predecessor, all predecessors are equal ...), Ids, Tuples ... - * 3. Verbosity flags. - * a) Flags to steer the level of the information. - * b) Flags to steer in which phase information should be dumped. - * 4. Verification flag - * This one controls the behavior of node and type verifications + * -# Verbosity flags. + * -# Flags to steer the level of the information. + * -# Flags to steer in which phase information should be dumped. + *@{ */ -#ifndef FIRM_IR_IRFLAG_H -#define FIRM_IR_IRFLAG_H - -#include "firm_types.h" -#include "begin.h" /** * A container type to load/restore all optimizations @@ -57,6 +59,8 @@ typedef unsigned optimization_state_t; * Default: optimize == 1. */ FIRM_API void set_optimize(int value); +/** Returns global optimizations flag. + * @see set_optimize() */ FIRM_API int get_optimize(void); /** Enables/Disables constant folding optimization. @@ -66,6 +70,8 @@ FIRM_API int get_optimize(void); * Default: opt_constant_folding == 1. */ FIRM_API void set_opt_constant_folding(int value); +/** returns 0 if constant_folding is disabled, !=0 otherwise */ +FIRM_API int get_opt_constant_folding(void); /** Enables/Disables algebraic simplifications. * @@ -97,49 +103,6 @@ FIRM_API int get_opt_cse(void); */ FIRM_API void set_opt_global_cse(int value); -/** Enables/Disables unreachable code elimination. - * - * If set, evaluate conditions of conditional branch and replace the - * branch with a Jmp/Bad Tuple. - * - * If opt_unreachable_code == 1 replace nodes (except Block, - * Phi and Tuple) with a Bad predecessor by the Bad node. - * Default: opt_unreachable_code == 1. - */ -FIRM_API void set_opt_unreachable_code(int value); - -/** Enables/Disables control flow optimizations. - * - * Performs Straightening, if simplifications and loop simplifications. - * Sets all separate control flow flags (control_flow_straightening, - * weak_simplification, strong_simplification and critical_edges). - */ -FIRM_API void set_opt_control_flow(int value); - -/** Enables/Disables Straightening. */ -FIRM_API void set_opt_control_flow_straightening(int value); - -/** Enables/Disables if simplifications in local optimizations. */ -FIRM_API void set_opt_control_flow_weak_simplification(int value); - -/** Enables/Disables strong if and loop simplification (in optimize_cf). */ -FIRM_API void set_opt_control_flow_strong_simplification(int value); - -/** Enable/Disable optimization of dynamic method dispatch. - * - * This flag enables/disables the optimization of dynamic method dispatch. - * If the flag is turned on Sel nodes can be replaced by Const nodes representing - * the address of a function. - */ -FIRM_API void set_opt_dyn_meth_dispatch(int value); -FIRM_API int get_opt_dyn_meth_dispatch(void); - -/** Enable/Disable type optimization of cast nodes. - * - * Controls the optimizations in tropt.h. Default: on. - */ -FIRM_API void set_opt_optimize_class_casts(int value); - /** Restricts the behavior of cast optimization. * * If set, downcast are not optimized if they might be @@ -147,53 +110,10 @@ FIRM_API void set_opt_optimize_class_casts(int value); * 0 == not suppressed. */ FIRM_API void set_opt_suppress_downcast_optimization(int value); +/** Returns suppred_downcast flag. + * @see set_opt_suppress_downcast_optimization() */ FIRM_API int get_opt_suppress_downcast_optimization(void); -/** Enable/Disable floating of fragile ops. - * - * This flags enables/disables the floating of fragile operations. - * If this flag is on, fragile operations which are known to NOT raise - * an exception can be place to other basic blocks. - * Otherwise they remain in the block they were created. - */ -FIRM_API void set_opt_fragile_ops(int value); - -/** - * Enable/Disable Confirm node removal during local optimization. - */ -FIRM_API void set_opt_remove_confirm(int value); - -/** - * Enable/Disable Null exception in Load and Store nodes only. - * - * If enabled, only Null pointer exception can occur at Load and - * store nodes. If it can be proved that the address input of these - * nodes is non-null, the exception edge can safely be removed. - * If disabled, other exceptions (like unaligned access, read-only memory, - * etc.) can occur. - * - * This flag is enabled by default. - */ -FIRM_API void set_opt_ldst_only_null_ptr_exceptions(int value); - -/** - * Enable/Disable Selection based Null pointer check elimination. - * - * In languages, where all addresses are always Sel nodes, Null - * pointers can only occur as input to Sel nodes. - * If Null pointers are the only source for exceptions in Load and - * Store nodes (as typical in high level languages), we can eliminate - * exception edges from Load and Store when can prove that the Sel - * nodes representing the Load/Store address have non-null inputs. - * Enabling this flag enables this elimination. - * - * Enabling this flag is meaningless if ldst_non_null_exceptions is - * enabled. - * - * This flag should be set for Java style languages. - */ -FIRM_API void set_opt_sel_based_null_check_elim(int value); - /** * Enable/Disable Global Null Pointer Test Elimination. * @@ -216,44 +136,6 @@ FIRM_API void set_opt_global_null_ptr_elimination(int value); */ FIRM_API void set_opt_auto_create_sync(int value); -/** Enable/Disable normalizations of the firm representation. - * - * This flag guards transformations that normalize the Firm representation - * as removing Ids and Tuples, useless Phis, replacing SymConst(id) by - * Const(entity) and others. - * The transformations guarded by this flag are not guarded by flag - * "optimize". - * Many algorithms operating on Firm can not deal with constructs in - * the non-normalized representation. - * default: ON - * - * @note ATTENTION: not all such transformations are guarded by a flag. - */ -FIRM_API void set_opt_normalize(int value); - -/** - * Enable/Disable ConvB() nodes with a "semantic behavior", i.e. a real - * operation that must be executed. - */ -FIRM_API void set_opt_allow_conv_b(int value); - -/** Enable/Disable precise exception context. - * - * If enabled, all exceptions form a barrier for values, as in the - * following example: - * - * @code - * a = 1; - * b = 3 / 0; - * a = 2; - * @endcode - * - * If precise exception handling is enabled, an exception handler see a == 1, - * else it might see a == 2. - * Enable this for languages with strict exception order like Java. - */ -FIRM_API void set_opt_precise_exc_context(int value); - /** Enable/Disable Alias analysis. * * If enabled, memory disambiguation by alias analysis is used. @@ -283,23 +165,35 @@ FIRM_API void restore_optimization_state(const optimization_state_t *state); */ FIRM_API void all_optimizations_off(void); +/** @} */ + +/** @ingroup irverify + * @defgroup irverify_flags Flags + * Enable/Disable automatic correctness tests + * @{ + */ + /** * Possible verification modes. */ -typedef enum _firm_verification_t { - FIRM_VERIFICATION_OFF = 0, /**< do not verify nodes at all */ - FIRM_VERIFICATION_ON = 1, /**< do node verification and assert on error in debug version */ - FIRM_VERIFICATION_REPORT = 2, /**< do node verification, but report to stderr only */ - FIRM_VERIFICATION_ERROR_ONLY = 3 /**< do node verification, but NEVER do assert nor report */ +typedef enum firm_verification_t { + FIRM_VERIFICATION_OFF = 0, /**< do not verify nodes at all */ + FIRM_VERIFICATION_ON = 1, /**< do node verification and assert on error in debug version */ + FIRM_VERIFICATION_REPORT = 2, /**< do node verification, but report to stderr only */ + FIRM_VERIFICATION_ERROR_ONLY = 3 /**< do node verification, but NEVER do assert nor report */ } firm_verification_t; -/** Select verification of IR nodes and types. +/** + * Select verification of IR nodes and types. * - * Per default the verification is in mode NODE_VERIFICATION_ASSERT. - * Turn the verification off during development to check partial implementations. + * Per default the verification is in mode NODE_VERIFICATION_ASSERT. + * Turn the verification off during development to check partial + * implementations. */ FIRM_API void do_node_verification(firm_verification_t mode); +/** @} */ + #include "end.h" #endif