sparc: use arch_dependent mul/div lowering
[libfirm] / ir / be / sparc / sparc_transform.c
index 5ae86ab..b5599ad 100644 (file)
@@ -413,7 +413,7 @@ static ir_node *gen_Add(ir_node *node)
                ir_node *left = get_Add_left(node);
                /* is this simple address arithmetic? then we can let the linker do
                 * the calculation. */
-               if (is_SymConst(left)) {
+               if (is_SymConst(left) && get_irn_n_edges(left) == 1) {
                        dbg_info *dbgi  = get_irn_dbg_info(node);
                        ir_node  *block = be_transform_node(get_nodes_block(node));
                        address_t address;
@@ -676,6 +676,7 @@ static ir_node *gen_Quot(ir_node *node)
                                  new_bd_sparc_fdiv_d, new_bd_sparc_fdiv_q);
 }
 
+#if 0
 static ir_node *gen_Abs(ir_node *node)
 {
        ir_mode *const mode = get_irn_mode(node);
@@ -694,6 +695,7 @@ static ir_node *gen_Abs(ir_node *node)
                return sub;
        }
 }
+#endif
 
 /**
  * Transforms a Not node.
@@ -724,7 +726,7 @@ static ir_node *gen_helper_bitop(ir_node *node,
        ir_node *op1 = get_binop_left(node);
        ir_node *op2 = get_binop_right(node);
        if (is_Not(op1)) {
-               return gen_helper_binop_args(node, get_Not_op(op1), op2,
+               return gen_helper_binop_args(node, op2, get_Not_op(op1),
                                             MATCH_MODE_NEUTRAL,
                                             new_not_reg, new_not_imm);
        }
@@ -2018,7 +2020,6 @@ void sparc_register_transformers(void)
 {
        be_start_transform_setup();
 
-       be_set_transform_function(op_Abs,          gen_Abs);
        be_set_transform_function(op_Add,          gen_Add);
        be_set_transform_function(op_And,          gen_And);
        be_set_transform_function(op_Call,         gen_Call);