X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbetranshlp.c;h=678f361ef44332509a7434cb4c21d609cafb3326;hb=7d5b331123bd8399f5f1d057e90797faa3300b66;hp=660ec7aac9ee40ad740973b8f0116cf33df4dde0;hpb=13c55699fa3a9a152b99d2fedce8eb229632d72d;p=libfirm diff --git a/ir/be/betranshlp.c b/ir/be/betranshlp.c index 660ec7aac..678f361ef 100644 --- a/ir/be/betranshlp.c +++ b/ir/be/betranshlp.c @@ -211,7 +211,7 @@ ir_node *be_transform_node(ir_node *node) if (new_node != NULL) return new_node; - DEBUG_ONLY(be_set_transformed_node(node, NULL)); + DEBUG_ONLY(be_set_transformed_node(node, NULL);) op = get_irn_op(node); if (op->ops.generic == NULL) { @@ -350,7 +350,6 @@ static void transform_nodes(ir_graph *irg, arch_pretrans_nodes *pre_transform) /* pre transform some anchors (so they are available in the other transform * functions) */ - pre_transform_anchor(irg, anchor_bad); pre_transform_anchor(irg, anchor_no_mem); pre_transform_anchor(irg, anchor_end_block); pre_transform_anchor(irg, anchor_end); @@ -423,7 +422,7 @@ void be_transform_graph(ir_graph *irg, arch_pretrans_nodes *func) free_irg_outs(irg); free_trouts(); free_loop_information(irg); - set_irg_doms_inconsistent(irg); + clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE); be_liveness_invalidate(be_get_irg_liveness(irg)); /* Hack for now, something is buggy with invalidate liveness... */ @@ -434,62 +433,3 @@ void be_transform_graph(ir_graph *irg, arch_pretrans_nodes *func) edges_deactivate(irg); edges_activate(irg); } - -int be_mux_is_abs(ir_node *sel, ir_node *mux_true, ir_node *mux_false) -{ - ir_node *cmp_left; - ir_node *cmp_right; - ir_mode *mode; - ir_relation relation; - - if (!is_Cmp(sel)) - return 0; - - /** - * Note further that these optimization work even for floating point - * with NaN's because -NaN == NaN. - * However, if +0 and -0 is handled differently, we cannot use the Abs/-Abs - * transformations. - */ - mode = get_irn_mode(mux_true); - if (mode_honor_signed_zeros(mode)) - return 0; - - /* must be <, <=, >=, > */ - relation = get_Cmp_relation(sel); - if ((relation & ir_relation_less_greater) == 0) - return 0; - - if (!ir_is_negated_value(mux_true, mux_false)) - return 0; - - /* must be x cmp 0 */ - cmp_right = get_Cmp_right(sel); - if (!is_Const(cmp_right) || !is_Const_null(cmp_right)) - return 0; - - cmp_left = get_Cmp_left(sel); - if (cmp_left == mux_false) { - if (relation & ir_relation_less) { - return 1; - } else { - assert(relation & ir_relation_greater); - return -1; - } - } else if (cmp_left == mux_true) { - if (relation & ir_relation_less) { - return -1; - } else { - assert(relation & ir_relation_greater); - return 1; - } - } - - return 0; -} - -ir_node *be_get_abs_op(ir_node *sel) -{ - ir_node *cmp_left = get_Cmp_left(sel); - return cmp_left; -}