X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Freassoc.c;h=5e5a163d0cfba060dd96089e775fb1b7623b206c;hb=6913c88dec0e2e57bae5e72c74b56573010bc205;hp=a12f5e1cd438496fcd2a5047327340105e9d62db;hpb=12c56917c823d267cf5ac965143ace089ba4aa7a;p=libfirm diff --git a/ir/opt/reassoc.c b/ir/opt/reassoc.c index a12f5e1cd..5e5a163d0 100644 --- a/ir/opt/reassoc.c +++ b/ir/opt/reassoc.c @@ -303,18 +303,21 @@ static int reassoc_Mul(ir_node **node) t1 = get_binop_left(add_sub); t2 = get_binop_right(add_sub); - in[0] = new_rd_Mul(NULL, current_ir_graph, block, c, t1, mode); - in[1] = new_rd_Mul(NULL, current_ir_graph, block, c, t2, mode); + /* we can only multiplication rules on integer arithmetic */ + if (mode_is_int(get_irn_mode(t1)) && mode_is_int(get_irn_mode(t2))) { + in[0] = new_rd_Mul(NULL, current_ir_graph, block, c, t1, mode); + in[1] = new_rd_Mul(NULL, current_ir_graph, block, c, t2, mode); - mode = get_mode_from_ops(in[0], in[1]); - irn = optimize_node(new_ir_node(NULL, current_ir_graph, block, op, mode, 2, in)); + mode = get_mode_from_ops(in[0], in[1]); + irn = optimize_node(new_ir_node(NULL, current_ir_graph, block, op, mode, 2, in)); - DBG((dbg, LEVEL_5, "Applied: (%n .%s. %n) %n %n => (%n %n %n) .%s. (%n %n %n)\n", - t1, get_op_name(op), t2, n, c, t1, n, c, get_op_name(op), t2, n, c)); - exchange(n, irn); - *node = irn; + DBG((dbg, LEVEL_5, "Applied: (%n .%s. %n) %n %n => (%n %n %n) .%s. (%n %n %n)\n", + t1, get_op_name(op), t2, n, c, t1, n, c, get_op_name(op), t2, n, c)); + exchange(n, irn); + *node = irn; - return 1; + return 1; + } } return 0; }