X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=include%2Flibfirm%2Firoptimize.h;h=590acc70080570ccb65be46952061bc866a6f848;hb=9ec98298a0bf99ccb9533365dd7245e0a380f3df;hp=a7085380258014d920e4c349cbb2b805829421fe;hpb=1ce363f80e6a204d4011f85813362d9bd1d0e7e4;p=libfirm diff --git a/include/libfirm/iroptimize.h b/include/libfirm/iroptimize.h index a70853802..590acc700 100644 --- a/include/libfirm/iroptimize.h +++ b/include/libfirm/iroptimize.h @@ -140,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 @@ -249,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... */ @@ -413,15 +417,23 @@ void normalize_n_returns(ir_graph *irg); * with atomic values if possible. Does not handle classes yet. * * @param irg the graph which should be optimized + * + * @return non-zero, if at least one entity was replaced */ -void scalar_replacement_opt(ir_graph *irg); +int scalar_replacement_opt(ir_graph *irg); /** Performs strength reduction for the passed graph. */ 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. *