some cleanups in arm+sparc backends
[libfirm] / ir / be / sparc / sparc_transform.c
index 4b2cfdb..31cccfc 100644 (file)
@@ -228,14 +228,6 @@ static ir_node *gen_helper_binop(ir_node *node, match_flags_t flags,
        ir_node  *new_op2;
        dbg_info *dbgi    = get_irn_dbg_info(node);
 
-/*
-    if (flags & MATCH_SIZE_NEUTRAL) {
-        op1 = arm_skip_downconv(op1);
-        op2 = arm_skip_downconv(op2);
-    } else {
-        assert(get_mode_size_bits(get_irn_mode(node)) == 32);
-    }
-*/
        if (is_imm_encodeable(op2)) {
                ir_node *new_op1 = be_transform_node(op1);
                return new_imm(dbgi, block, new_op1, get_tarval_long(get_Const_tarval(op2)));
@@ -303,8 +295,8 @@ static ir_node *gen_Sub(ir_node *node)
        ir_node  *block   = be_transform_node(get_nodes_block(node));
        dbg_info *dbgi    = get_irn_dbg_info(node);
 
-    (void) block;
-    (void) dbgi;
+       (void) block;
+       (void) dbgi;
 
        if (mode_is_float(mode))
                panic("FP not implemented yet");
@@ -969,7 +961,7 @@ static ir_node *gen_Proj_Load(ir_node *node)
                        panic("Unsupported Proj from Load");
        }
 
-    return be_duplicate_node(node);
+       return be_duplicate_node(node);
 }
 
 /**
@@ -1062,7 +1054,7 @@ static ir_node *gen_Proj(ir_node *node)
        long     proj  = get_Proj_proj(node);
 
        (void) irg;
-    (void) dbgi;
+       (void) dbgi;
 
        if (is_Store(pred)) {
                if (proj == pn_Store_M) {
@@ -1109,7 +1101,7 @@ static ir_node *gen_Proj(ir_node *node)
                }
        }
 
-    return be_duplicate_node(node);
+       return be_duplicate_node(node);
 }
 
 
@@ -1125,104 +1117,45 @@ static ir_node *gen_Jmp(ir_node *node)
        return new_bd_sparc_Jmp(dbgi, new_block);
 }
 
-/**
- * the BAD transformer.
- */
-static ir_node *bad_transform(ir_node *irn)
-{
-       panic("SPARC backend: Not implemented: %+F", irn);
-}
-
-/**
- * Set a node emitter. Make it a bit more type safe.
- */
-static void set_transformer(ir_op *op, be_transform_func sparc_transform_func)
-{
-       op->ops.generic = (op_func)sparc_transform_func;
-}
-
 /**
  * configure transformation callbacks
  */
 void sparc_register_transformers(void)
 {
-       clear_irp_opcodes_generic_func();
-       set_transformer(op_Add,                         gen_Add);
-       set_transformer(op_Store,                       gen_Store);
-       set_transformer(op_Const,                       gen_Const);
-       set_transformer(op_Load,                        gen_Load);
-       set_transformer(op_Sub,                         gen_Sub);
-
-       set_transformer(op_be_AddSP,     gen_be_AddSP);
-       set_transformer(op_be_SubSP,     gen_be_SubSP);
-       set_transformer(op_be_Copy,      gen_be_Copy);
-       set_transformer(op_be_Call,      gen_be_Call);
-       set_transformer(op_be_FrameAddr, gen_be_FrameAddr);
-
-       set_transformer(op_Cond,         gen_Cond);
-       set_transformer(op_Cmp,          gen_Cmp);
-
-       set_transformer(op_SymConst,     gen_SymConst);
-
-       set_transformer(op_Phi,          gen_Phi);
-       set_transformer(op_Proj,         gen_Proj);
-
-       set_transformer(op_Conv,         gen_Conv);
-       set_transformer(op_Jmp,          gen_Jmp);
-
-       set_transformer(op_Mul,          gen_Mul);
-       set_transformer(op_Mulh,         gen_Mulh);
-       set_transformer(op_Div,          gen_Div);
-       set_transformer(op_Abs,          gen_Abs);
-       set_transformer(op_Shl,          gen_Shl);
-       set_transformer(op_Shr,          gen_Shr);
-       set_transformer(op_Shrs,         gen_Shra);
-
-       set_transformer(op_Minus,        gen_Minus);
-       set_transformer(op_Not,          gen_Not);
-       set_transformer(op_And,          gen_And);
-       set_transformer(op_Or,           gen_Or);
-       set_transformer(op_Eor,          gen_Xor);
-
-       set_transformer(op_Unknown,      gen_Unknown);
-
-       /* node list */
-       /*
-
-       set_transformer(op_CopyB,        gen_CopyB);
-       set_transformer(op_Quot,         gen_Quot);
-       set_transformer(op_Rotl,         gen_Rotl);
-       */
-
-       set_transformer(op_ASM,       bad_transform);
-       set_transformer(op_Builtin,   bad_transform);
-       set_transformer(op_CallBegin, bad_transform);
-       set_transformer(op_Cast,      bad_transform);
-       set_transformer(op_Confirm,   bad_transform);
-       set_transformer(op_DivMod,    bad_transform);
-       set_transformer(op_EndExcept, bad_transform);
-       set_transformer(op_EndReg,    bad_transform);
-       set_transformer(op_Filter,    bad_transform);
-       set_transformer(op_Free,      bad_transform);
-       set_transformer(op_Id,        bad_transform);
-       set_transformer(op_InstOf,    bad_transform);
-
-       set_transformer(op_Mux,       bad_transform);
-       set_transformer(op_Raise,     bad_transform);
-       set_transformer(op_Sel,       bad_transform);
-       set_transformer(op_Tuple,     bad_transform);
-}
-
-
-/**
-  * Pre-transform all unknown nodes.
-  */
-static void sparc_pretransform_node(void)
-{
-       sparc_code_gen_t *cg = env_cg;
-       (void) cg;
-       //cg->unknown_gp  = be_pre_transform_node(cg->unknown_gp);
-       //cg->unknown_fpa = be_pre_transform_node(cg->unknown_fpa);
+       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_be_AddSP,     gen_be_AddSP);
+       be_set_transform_function(op_be_Call,      gen_be_Call);
+       be_set_transform_function(op_be_Copy,      gen_be_Copy);
+       be_set_transform_function(op_be_FrameAddr, gen_be_FrameAddr);
+       be_set_transform_function(op_be_SubSP,     gen_be_SubSP);
+       be_set_transform_function(op_Cmp,          gen_Cmp);
+       be_set_transform_function(op_Cond,         gen_Cond);
+       be_set_transform_function(op_Const,        gen_Const);
+       be_set_transform_function(op_Conv,         gen_Conv);
+       be_set_transform_function(op_Div,          gen_Div);
+       be_set_transform_function(op_Eor,          gen_Xor);
+       be_set_transform_function(op_Jmp,          gen_Jmp);
+       be_set_transform_function(op_Load,         gen_Load);
+       be_set_transform_function(op_Minus,        gen_Minus);
+       be_set_transform_function(op_Mul,          gen_Mul);
+       be_set_transform_function(op_Mulh,         gen_Mulh);
+       be_set_transform_function(op_Not,          gen_Not);
+       be_set_transform_function(op_Or,           gen_Or);
+       be_set_transform_function(op_Phi,          gen_Phi);
+       be_set_transform_function(op_Proj,         gen_Proj);
+       be_set_transform_function(op_Shl,          gen_Shl);
+       be_set_transform_function(op_Shr,          gen_Shr);
+       be_set_transform_function(op_Shrs,         gen_Shra);
+       be_set_transform_function(op_Store,        gen_Store);
+       be_set_transform_function(op_Sub,          gen_Sub);
+       be_set_transform_function(op_SymConst,     gen_SymConst);
+       be_set_transform_function(op_Unknown,      gen_Unknown);
+
+       be_set_transform_function(op_sparc_Save,   be_duplicate_node);
 }
 
 /**
@@ -1232,7 +1165,7 @@ void sparc_transform_graph(sparc_code_gen_t *cg)
 {
        sparc_register_transformers();
        env_cg = cg;
-       be_transform_graph(cg->irg, sparc_pretransform_node);
+       be_transform_graph(cg->irg, NULL);
 }
 
 void sparc_init_transform(void)