X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fjumpthreading.c;h=3a18401acd34b8a46606916126cff470a3ac16e1;hb=8c9921a1fc166552f6e416434fd8394a4fc210a3;hp=de835303189ccd905524784ce121e863c11dd4e8;hpb=2232b14b4acf810ae96a69d1d2a33cf150b695d9;p=libfirm diff --git a/ir/opt/jumpthreading.c b/ir/opt/jumpthreading.c index de8353031..3a18401ac 100644 --- a/ir/opt/jumpthreading.c +++ b/ir/opt/jumpthreading.c @@ -22,7 +22,6 @@ * @brief Path-Sensitive Jump Threading * @date 10. Sep. 2006 * @author Christoph Mallon, Matthias Braun - * @version $Id$ */ #include "config.h" @@ -50,7 +49,7 @@ #undef AVOID_PHIB -DEBUG_ONLY(static firm_dbg_module_t *dbg); +DEBUG_ONLY(static firm_dbg_module_t *dbg;) /** * Add the new predecessor x to node node, which is either a Block or a Phi @@ -295,7 +294,7 @@ static void copy_and_fix(const jumpthreading_env_t *env, ir_node *block, } /* ignore control flow */ mode = get_irn_mode(node); - if (mode == mode_X || is_Cond(node)) + if (mode == mode_X || is_Cond(node) || is_Switch(node)) continue; #ifdef AVOID_PHIB /* we may not copy mode_b nodes, because this could produce Phi with @@ -348,7 +347,7 @@ static void copy_and_fix(const jumpthreading_env_t *env, ir_node *block, ir_mode *mode; mode = get_irn_mode(node); - if (mode == mode_X || is_Cond(node)) + if (mode == mode_X || is_Cond(node) || is_Switch(node)) continue; #ifdef AVOID_PHIB if (mode == mode_b) @@ -655,15 +654,12 @@ static void thread_jumps(ir_node* block, void* data) assert(get_irn_mode(projx) == mode_X); cond = get_Proj_pred(projx); - if (!is_Cond(cond)) - return; - - selector = get_Cond_selector(cond); /* TODO handle switch Conds */ - if (get_irn_mode(selector) != mode_b) + if (!is_Cond(cond)) return; /* handle cases that can be immediately evaluated */ + selector = get_Cond_selector(cond); selector_evaluated = -1; if (is_Cmp(selector)) { ir_node *left = get_Cmp_left(selector); @@ -781,9 +777,9 @@ static ir_graph_state_t do_jumpthread(ir_graph* irg) return res; } -optdesc_t opt_jumpthread = { +static optdesc_t opt_jumpthread = { "jumpthreading", - IR_GRAPH_STATE_NO_UNREACHABLE_BLOCKS | IR_GRAPH_STATE_CONSISTENT_OUT_EDGES | IR_GRAPH_STATE_NO_CRITICAL_EDGES, + IR_GRAPH_STATE_NO_UNREACHABLE_CODE | IR_GRAPH_STATE_CONSISTENT_OUT_EDGES | IR_GRAPH_STATE_NO_CRITICAL_EDGES, do_jumpthread, };