From 739bf6699191d70aafcbf99cd115c818386697c1 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Thu, 10 Feb 2005 15:08:10 +0000 Subject: [PATCH] allowed Minus for integer modes [r5086] --- ir/ir/iropt.c | 25 ++++++++++++++++++++++++- ir/ir/irvrfy.c | 6 +++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/ir/ir/iropt.c b/ir/ir/iropt.c index b1144c983..1aa6f914f 100644 --- a/ir/ir/iropt.c +++ b/ir/ir/iropt.c @@ -1249,7 +1249,30 @@ static ir_node *transform_node_AddSub(ir_node *n) } #define transform_node_Add transform_node_AddSub -#define transform_node_Sub transform_node_AddSub + +/** + * Do the AddSub optimization, then Transform Sub(0,a) into Minus(a). + */ +static ir_node *transform_node_Sub(ir_node *n) +{ + ir_mode *mode; + + n = transform_node_AddSub(n); + + mode = get_irn_mode(n); + if (mode_is_num(mode)) { + if (classify_Const(get_Sub_left(n)) == CNST_NULL) { + n = new_rd_Minus( + get_irn_dbg_info(n), + current_ir_graph, + get_nodes_block(n), + get_Sub_right(n), + mode); + } + } + + return n; +} /** Do architecture dependend optimizations on Mul nodes */ static ir_node *transform_node_Mul(ir_node *n) { diff --git a/ir/ir/irvrfy.c b/ir/ir/irvrfy.c index e53c692eb..d97370021 100644 --- a/ir/ir/irvrfy.c +++ b/ir/ir/irvrfy.c @@ -850,9 +850,9 @@ int irn_vrfy_irg(ir_node *n, ir_graph *irg) case iro_Minus: op1mode = get_irn_mode(in[1]); ASSERT_AND_RET_DBG( - /* Minus: BB x float --> float */ - op1mode == mymode && mode_is_float(op1mode), "Minus node", 0, - show_unop_failure(n , "/* Minus: BB x float --> float */"); + /* Minus: BB x num --> num */ + op1mode == mymode && mode_is_num(op1mode), "Minus node", 0, + show_unop_failure(n , "/* Minus: BB x num --> num */"); ); op_is_symmetric = 2; break; -- 2.20.1