#include "irouts.h"
#include "irhooks.h"
#include "ircons_t.h"
-#include "irtools.h"
+#include "irpass.h"
DEBUG_ONLY(static firm_dbg_module_t *dbg);
/**
* walker for collecting data, fills a collect_t environment
*/
-static void collect_data(ir_node *node, void *env) {
+static void collect_data(ir_node *node, void *env)
+{
collect_t *data = env;
ir_node *pred;
ir_op *op;
* @param rets linked list of all rets
* @param n_tail_calls number of tail-recursion calls
*/
-static void do_opt_tail_rec(ir_graph *irg, tr_env *env) {
+static void do_opt_tail_rec(ir_graph *irg, tr_env *env)
+{
ir_node *end_block = get_irg_end_block(irg);
ir_node *block, *jmp, *call, *calls;
ir_node **in;
/* build the memory phi */
i = 0;
- in[i] = new_r_Proj(get_irg_start_block(irg), get_irg_start(irg), mode_M, pn_Start_M);
+ in[i] = new_r_Proj(get_irg_start(irg), mode_M, pn_Start_M);
set_irg_initial_mem(irg, in[i]);
++i;
for (i = 0; i < n_params; ++i) {
ir_mode *mode = get_type_mode(get_method_param_type(method_tp, i));
- in[0] = new_r_Proj(args_bl, args, mode, i);
+ in[0] = new_r_Proj(args, mode, i);
for (j = 0; j < env->n_tail_calls; ++j)
in[j + 1] = call_params[j][i];
set_Tuple_pred(call, pn_Call_X_regular, jmp);
set_Tuple_pred(call, pn_Call_X_except, bad);
set_Tuple_pred(call, pn_Call_T_result, tuple);
- set_Tuple_pred(call, pn_Call_M_except, mem);
set_Tuple_pred(call, pn_Call_P_value_res_base, bad);
for (i = 0; i < env->n_ress; ++i) {
*
* @return non-zero if it's ok to do tail recursion
*/
-static int check_lifetime_of_locals(ir_graph *irg) {
+static int check_lifetime_of_locals(ir_graph *irg)
+{
ir_node *irg_frame;
int i;
ir_type *frame_tp = get_irg_frame_type(irg);
/**
* Examine irn and detect the recursion variant.
*/
-static tail_rec_variants find_variant(ir_node *irn, ir_node *call) {
+static tail_rec_variants find_variant(ir_node *irn, ir_node *call)
+{
ir_node *a, *b;
tail_rec_variants va, vb, res;
/*
* convert simple tail-calls into loops
*/
-int opt_tail_rec_irg(ir_graph *irg) {
+int opt_tail_rec_irg(ir_graph *irg)
+{
tr_env env;
ir_node *end_block;
int i, n_ress, n_tail_calls = 0;
return n_tail_calls;
}
-ir_graph_pass_t *opt_tail_rec_irg_pass(const char *name, int verify, int dump)
+ir_graph_pass_t *opt_tail_rec_irg_pass(const char *name)
{
- return def_graph_pass_ret(name ? name : "tailrec", verify, dump, opt_tail_rec_irg);
+ return def_graph_pass_ret(name ? name : "tailrec", opt_tail_rec_irg);
}
/*
* optimize tail recursion away
*/
-void opt_tail_recursion(void) {
+void opt_tail_recursion(void)
+{
int i;
int n_opt_applications = 0;
ir_graph *irg;
n_opt_applications, get_irp_n_irgs()));
}
-ir_prog_pass_t *opt_tail_recursion_pass(const char *name, int verify, int dump)
+ir_prog_pass_t *opt_tail_recursion_pass(const char *name)
{
- return def_prog_pass(name ? name : "tailrec", verify, dump, opt_tail_recursion);
+ return def_prog_pass(name ? name : "tailrec", opt_tail_recursion);
}