X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fmips%2Fmips_transform.c;h=ed9fb37a764511bee5e4566d07b0d59c429477ea;hb=ccdf802c598f7adc5e35fff42fed029c59f48a57;hp=947c77559eb6c588eade18dd8ec63fdeb3158121;hpb=5f4a7559628fca2ee71c641e1eb14e8ee2e9c740;p=libfirm diff --git a/ir/be/mips/mips_transform.c b/ir/be/mips/mips_transform.c index 947c77559..ed9fb37a7 100644 --- a/ir/be/mips/mips_transform.c +++ b/ir/be/mips/mips_transform.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -77,8 +77,7 @@ typedef ir_node *construct_binop_func(dbg_info *db, ir_graph *irg, ir_node *block, ir_node *left, ir_node *right); static INLINE int mode_needs_gp_reg(ir_mode *mode) { - return mode_is_int(mode) || mode_is_character(mode) - || mode_is_reference(mode); + return mode_is_int(mode) || mode_is_reference(mode); } ir_node *mips_create_Immediate(long val) @@ -125,8 +124,6 @@ static ir_node *try_create_Immediate(ir_node *node) tv = get_Const_tarval(node); if(tarval_is_long(tv)) { val = get_tarval_long(tv); - } else if(tarval_is_null(tv)) { - val = 0; } else { ir_fprintf(stderr, "Optimisation Warning: tarval %+F is not a long?\n", node); @@ -307,10 +304,8 @@ static ir_node* gen_Const(ir_node *node) if(tarval_is_long(tv)) { val = get_tarval_long(tv); - } else if(tarval_is_null(tv)) { - val = 0; } else { - panic("Can't get value of tarval %+F\n", node); + panic("Can't get value of tarval %+F", node); } val = get_tarval_long(tv); @@ -504,7 +499,7 @@ static ir_node *gen_Proj_DivMod(ir_node *node) break; } - panic("invalid proj attached to %+F\n", divmod); + panic("invalid proj attached to %+F", divmod); } static ir_node *gen_Proj_Start(ir_node *node) @@ -519,7 +514,7 @@ static ir_node *gen_Proj_Start(ir_node *node) ir_node *jump = new_rd_Jmp(dbgi, irg, block); return jump; } - if(node == be_get_old_anchor(anchor_tls)) { + if(node == get_irg_anchor(irg, anchor_tls)) { /* TODO... */ return be_duplicate_node(node); } @@ -780,7 +775,7 @@ static ir_node *gen_Conv(ir_node *node) } else if(src_size == 16) { res = new_rd_mips_seh(dbgi, irg, block, new_op); } else { - panic("invalid conv %+F\n", node); + panic("invalid conv %+F", node); } } else { ir_node *and_const; @@ -790,7 +785,7 @@ static ir_node *gen_Conv(ir_node *node) } else if(src_size == 16) { and_const = mips_create_Immediate(0xffff); } else { - panic("invalid conv %+F\n", node); + panic("invalid conv %+F", node); } res = new_rd_mips_and(dbgi, irg, block, new_op, and_const); } @@ -1103,27 +1098,6 @@ static void mips_transform_Reload(mips_transform_env_t* env) { exchange(node, proj); } -#if 0 -static ir_node *gen_node_for_StackParam(mips_transform_env_t *env) -{ - ir_node *node = env->irn; - ir_node *sp = get_irn_n(node, 0); - ir_node *load; - ir_node *nomem = new_rd_NoMem(env->irg); - ir_node *proj; - mips_attr_t *attr; - - load = new_rd_mips_load_r(env->dbg, env->irg, env->block, nomem, sp, mode_T); - attr = get_mips_attr(load); - attr->stack_entity = be_get_frame_entity(node); - attr->modes.load_store_mode = env->mode; - - proj = new_rd_Proj(env->dbg, env->irg, env->block, load, env->mode, pn_Load_res); - - return proj; -} -#endif - #if 0 static ir_node *gen_AddSP(ir_node *node) { @@ -1157,7 +1131,7 @@ static ir_node *gen_AddSP(ir_node *node) static ir_node *gen_Bad(ir_node *node) { - panic("Unexpected node %+F found in mips transform phase.\n", node); + panic("Unexpected node %+F found in mips transform phase.", node); return NULL; } @@ -1203,160 +1177,6 @@ static void register_transformers(void) op_EndExcept->ops.generic = (op_func) gen_Bad; } -#if 0 -/** - * Transforms the given firm node (and maybe some other related nodes) - * into one or more assembler nodes. - * - * @param node the firm node - * @param env the debug module - */ -void mips_transform_node(ir_node *node, void *env) { - mips_code_gen_t *cgenv = (mips_code_gen_t *)env; - ir_opcode code = get_irn_opcode(node); - ir_node *asm_node = node; - mips_transform_env_t tenv; - - if (is_Block(node)) - return; - - tenv.block = get_nodes_block(node); - tenv.dbg = get_irn_dbg_info(node); - tenv.irg = current_ir_graph; - tenv.irn = node; - tenv.mode = get_irn_mode(node); - tenv.cg = cgenv; - -#define UNOP(firm_opcode, mips_nodetype) case iro_##firm_opcode: asm_node = mips_gen_##mips_nodetype(&tenv, get_##firm_opcode##_op(node)); break -#define BINOP(firm_opcode, mips_nodetype) case iro_##firm_opcode: asm_node = mips_gen_##mips_nodetype(&tenv, get_##firm_opcode##_left(node), get_##firm_opcode##_right(node)); break -#define IGN(a) case iro_##a: break -#define BAD(a) case iro_##a: goto bad - - switch (code) { - BINOP(Add, addu); - BINOP(Sub, sub); - BINOP(And, and); - BINOP(Or, or); - BINOP(Eor, xor); - UNOP(Not, not); - BINOP(Shl, sl); - BINOP(Shr, sr); - BINOP(Shrs, sra); - - case iro_Abs: - asm_node = gen_node_for_Abs(&tenv); - break; - - case iro_Rot: - asm_node = gen_node_for_Rot(&tenv); - break; - - case iro_Div: - asm_node = gen_node_for_Div(&tenv); - break; - - case iro_Mod: - asm_node = gen_node_for_Mod(&tenv); - break; - - case iro_Load: - asm_node = gen_node_for_Load(&tenv); - break; - - case iro_Store: - asm_node = gen_node_for_Store(&tenv); - break; - - case iro_Proj: - asm_node = gen_node_for_Proj(&tenv); - break; - - case iro_Conv: - asm_node = gen_node_for_Conv(&tenv); - break; - - case iro_DivMod: - asm_node = gen_node_for_DivMod(&tenv); - break; - - case iro_Mul: - asm_node = gen_node_for_Mul(&tenv); - break; - - case iro_Jmp: - asm_node = gen_node_for_Jmp(&tenv); - break; - - case iro_IJmp: - asm_node = gen_node_for_IJmp(&tenv); - break; - - case iro_Unknown: - asm_node = gen_node_for_Unknown(&tenv); - break; - - case iro_Cond: - asm_node = gen_node_for_Cond(&tenv); - break; - - case iro_Phi: - asm_node = gen_node_for_Phi(&tenv); - break; - - /* TODO: implement these nodes */ - BAD(Mux); - - /* You probably don't need to handle the following nodes */ - - // call is handled in the emit phase - IGN(Call); - // Cmp is handled together with Cond - IGN(Cmp); - IGN(Alloc); - - IGN(Block); - IGN(Start); - IGN(End); - IGN(NoMem); - IGN(Break); - IGN(Sync); - - IGN(Const); - IGN(SymConst); - - BAD(Raise); - BAD(Sel); - BAD(InstOf); - BAD(Cast); - BAD(Free); - BAD(Tuple); - BAD(Id); - BAD(Bad); - BAD(Confirm); - BAD(Filter); - BAD(CallBegin); - BAD(EndReg); - BAD(EndExcept); - - default: - if(be_is_StackParam(node)) { - //asm_node = gen_node_for_StackParam(&tenv); - } else if(be_is_AddSP(node)) { - asm_node = gen_node_for_AddSP(&tenv); - } - break; - -bad: - fprintf(stderr, "Not implemented: %s\n", get_irn_opname(node)); - assert(0); - } - - if (asm_node != node) { - exchange(node, asm_node); - } -} -#endif - void mips_transform_graph(mips_code_gen_t *cg) { env_cg = cg;