X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=include%2Flibfirm%2Firflag.h;h=45fe2d52ef3f07fb8567b987c894b0025d8305e3;hb=d217f68a9e53ec6e800ae31ca3af8ed8b6f9ece9;hp=1f668466a0dd95c044a24bf12dc32106b4455ca2;hpb=1a3b7d363474ab544c13093a2f0b578718d37c7a;p=libfirm diff --git a/include/libfirm/irflag.h b/include/libfirm/irflag.h index 1f668466a..45fe2d52e 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. @@ -97,26 +101,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); - -/** 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); - /** Restricts the behavior of cast optimization. * * If set, downcast are not optimized if they might be @@ -124,39 +108,10 @@ FIRM_API int get_opt_dyn_meth_dispatch(void); * 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 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. * @@ -208,6 +163,14 @@ 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. */ @@ -218,13 +181,17 @@ typedef enum firm_verification_t { 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