X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=include%2Flibfirm%2Firoptimize.h;h=f31ea06f09c39c017ac5b8c81fa03e8a818bab1b;hb=e302589b2ee3b43584b856431b581d67bc679a68;hp=7e47cde558e5f5e136397e5aa6fdc54f2edaf78a;hpb=948105b39905a68ad7b5b3707a6b745bc521c222;p=libfirm diff --git a/include/libfirm/iroptimize.h b/include/libfirm/iroptimize.h index 7e47cde55..f31ea06f0 100644 --- a/include/libfirm/iroptimize.h +++ b/include/libfirm/iroptimize.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -51,6 +51,14 @@ void optimize_cf(ir_graph *irg); */ void opt_cond_eval(ir_graph* irg); +/** + * Try to simplify boolean expression in the given ir graph. + * eg. x < 5 && x < 6 becomes x < 5 + * + * @param irg the graph + */ +void opt_bool(ir_graph *irg); + /** * Try to reduce the number of conv nodes in the given ir graph. * @@ -132,14 +140,16 @@ void escape_analysis(int run_scalar_replace, check_alloc_entity_func callback); * if no const function graph was detected. * Else calls are only optimized if at least one * const function graph was detected. + * @param callback a callback function to check whether a + * given entity is a allocation call * - * If the fontend created external entities with the irg_const_function + * If the frontend created external entities with the irg_const_function * property set, the force_run parameter should be set, else * should be unset. * * @note This optimization destroys the link fields of nodes. */ -void optimize_funccalls(int force_run); +void optimize_funccalls(int force_run, check_alloc_entity_func callback); /** * Does Partial Redundancy Elimination combined with @@ -171,13 +181,13 @@ typedef int (*arch_allow_ifconv_func)(ir_node *sel, ir_node* phi_list, int i, in /** * The parameters structure. */ -typedef struct _opt_if_conv_info_t { - int max_depth; /**< The maximum depth up to which expressions - are examined when it has to be decided if they - can be placed into another block. */ - arch_allow_ifconv_func allow_ifconv; /**< Evaluator function, if not set all possible Psi - nodes will be created. */ -} opt_if_conv_info_t; +struct ir_settings_if_conv_t { + int max_depth; /**< The maximum depth up to which expressions + are examined when it has to be decided if they + can be placed into another block. */ + arch_allow_ifconv_func allow_ifconv; /**< Evaluator function, if not set all possible Psi + nodes will be created. */ +}; /** * Perform If conversion on a graph. @@ -188,7 +198,7 @@ typedef struct _opt_if_conv_info_t { * Cannot handle blocks with Bad control predecessors, so call it after control * flow optimization. */ -void opt_if_conv(ir_graph *irg, const opt_if_conv_info_t *params); +void opt_if_conv(ir_graph *irg, const ir_settings_if_conv_t *params); void opt_ldst2(ir_graph *irg); @@ -241,7 +251,9 @@ typedef enum osr_flags { osr_flag_none = 0, /**< no additional flags */ osr_flag_lftr_with_ov_check = 1, /**< do linear function test replacement only if no overflow can occur. */ - osr_flag_ignore_x86_shift = 2 /**< ignore Multiplications by 2, 4, 8 */ + osr_flag_ignore_x86_shift = 2, /**< ignore Multiplications by 2, 4, 8 */ + osr_flag_keep_reg_pressure = 4 /**< do NOT increase register pressure by introducing new + induction variables. */ } osr_flags; /* FirmJNI cannot handle identical enum values... */ @@ -412,8 +424,14 @@ void scalar_replacement_opt(ir_graph *irg); void reduce_strength(ir_graph *irg); /** - * Optimizes simple tail-recursion calls by - * converting them into loops. Depends on the flag opt_tail_recursion. + * Optimizes tail-recursion calls by converting them into loops. + * Depends on the flag opt_tail_recursion. + * Currently supports the following forms: + * - return func(); + * - return x + func(); + * - return func() - x; + * - return x * func(); + * - return -func(); * * Does not work for Calls that use the exception stuff. *