X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Farch%2Farchop.c;h=cafec334cd7c96fb17a22d9a888d835da40ced06;hb=1a06a5a742509e6027ed64b8b28f95e22c00a006;hp=9bd4078a37d434a6bc93245ed68cc523391057ac;hpb=05386832aa3e828627ae666ae5086e58d5b658db;p=libfirm diff --git a/ir/arch/archop.c b/ir/arch/archop.c index 9bd4078a3..cafec334c 100644 --- a/ir/arch/archop.c +++ b/ir/arch/archop.c @@ -23,7 +23,7 @@ #include "ircons_t.h" #include "iropt_t.h" #include "firm_common_t.h" -#include "irvrfy.h" +#include "irvrfy_t.h" #include "iropt_dbg.h" #include "archop.h" @@ -184,7 +184,7 @@ static tarval *computed_value_Max(ir_node *n) /** * Returns an equivalent node for a Min/Max node. - * We do not allow Exeptions in our Min/Max, so there will be always + * We do not allow Exceptions in our Min/Max, so there will be always * an result. * The problem is Min(NaN, NaN) == NaN ???. */ @@ -199,7 +199,7 @@ static ir_node *equivalent_node_MinMax(ir_node *n) b = get_binop_right(n); if (a == b) { - DBG_OPT_ALGSIM0(n, a); + DBG_OPT_ALGSIM0(n, a, FS_OPT_MIN_MAX_EQ); return a; } @@ -239,7 +239,7 @@ ir_node *arch_transform_node_Mux(ir_node *n) a, b, get_irn_mode(n)); - DBG_OPT_ALGSIM1(oldn, cmp, proj, n); + DBG_OPT_ALGSIM1(oldn, cmp, proj, n, FS_OPT_MUX_TO_MIN); return n; } else if (a == f && b == t) { @@ -250,7 +250,7 @@ ir_node *arch_transform_node_Mux(ir_node *n) a, b, get_irn_mode(n)); - DBG_OPT_ALGSIM1(oldn, cmp, proj, n); + DBG_OPT_ALGSIM1(oldn, cmp, proj, n, FS_OPT_MUX_TO_MAX); return n; } } @@ -263,7 +263,7 @@ ir_node *arch_transform_node_Mux(ir_node *n) a, b, get_irn_mode(n)); - DBG_OPT_ALGSIM1(oldn, cmp, proj, n); + DBG_OPT_ALGSIM1(oldn, cmp, proj, n, FS_OPT_MUX_TO_MAX); return n; } else if (a == f && b == t) { @@ -274,7 +274,7 @@ ir_node *arch_transform_node_Mux(ir_node *n) a, b, get_irn_mode(n)); - DBG_OPT_ALGSIM1(oldn, cmp, proj, n); + DBG_OPT_ALGSIM1(oldn, cmp, proj, n, FS_OPT_MUX_TO_MIN); return n; } } @@ -283,6 +283,24 @@ ir_node *arch_transform_node_Mux(ir_node *n) return n; } +/** + * verify a MinMax node + */ +static int verify_node_MinMax(ir_node *n, ir_graph *irg) { + ir_mode *mymode = get_irn_mode(n); + ir_mode *op1mode = get_irn_mode(get_binop_left(n)); + ir_mode *op2mode = get_irn_mode(get_binop_right(n)); + + ASSERT_AND_RET( + /* MinMax: BB x numP x numP --> numP */ + op1mode == mymode && + op2mode == mymode && + mode_is_numP(mymode), + "Min or Max node", 0 + ); + return 1; +} + /* * initialize the ops. */ @@ -297,9 +315,11 @@ void firm_archops_init(const arch_ops_info *info) op_Min = new_ir_op(get_next_ir_opcode(), "Min", op_pin_state_floats, irop_flag_commutative, oparity_binary, 0, 0); op_Min->computed_value = computed_value_Min; op_Min->equivalent_node = equivalent_node_Min; + op_Min->verify_node = verify_node_MinMax; op_Max = new_ir_op(get_next_ir_opcode(), "Max", op_pin_state_floats, irop_flag_commutative, oparity_binary, 0, 0); op_Max->computed_value = computed_value_Max; op_Max->equivalent_node = equivalent_node_Max; + op_Max->verify_node = verify_node_MinMax; } }