X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Farm%2Farm_transform.c;h=96353fb2cbf4e8c45f464d1215662afb1d1b1b42;hb=72fca46dfebc45e1c8466d0b7035a68b9d1495fe;hp=bed33733da743d368c58a725e5c18addb0556a25;hpb=47ad828d58d46ac5da5913212b7f4205d9e4f1b3;p=libfirm diff --git a/ir/be/arm/arm_transform.c b/ir/be/arm/arm_transform.c index bed33733d..96353fb2c 100644 --- a/ir/be/arm/arm_transform.c +++ b/ir/be/arm/arm_transform.c @@ -218,10 +218,8 @@ static ir_node *gen_Conv(ir_node *node) } } else if (USE_VFP(env_cg->isa)) { panic("VFP not supported yet"); - return NULL; } else { panic("Softfloat not supported yet"); - return NULL; } } else { /* complete in gp registers */ int src_bits = get_mode_size_bits(src_mode); @@ -403,11 +401,9 @@ static ir_node *gen_Add(ir_node *node) } else if (USE_VFP(env_cg->isa)) { assert(mode != mode_E && "IEEE Extended FP not supported"); panic("VFP not supported yet"); - return NULL; } else { panic("Softfloat not supported yet"); - return NULL; } } else { #if 0 @@ -462,11 +458,9 @@ static ir_node *gen_Mul(ir_node *node) else if (USE_VFP(env_cg->isa)) { assert(mode != mode_E && "IEEE Extended FP not supported"); panic("VFP not supported yet"); - return NULL; } else { panic("Softfloat not supported yet"); - return NULL; } } assert(mode_is_data(mode)); @@ -506,7 +500,6 @@ static ir_node *gen_Quot(ir_node *node) } else { panic("Softfloat not supported yet"); - return NULL; } } @@ -572,10 +565,8 @@ static ir_node *gen_Sub(ir_node *node) } else if (USE_VFP(env_cg->isa)) { assert(mode != mode_E && "IEEE Extended FP not supported"); panic("VFP not supported yet"); - return NULL; } else { panic("Softfloat not supported yet"); - return NULL; } } else { return gen_int_binop(node, MATCH_SIZE_NEUTRAL, @@ -843,7 +834,7 @@ static ir_node *gen_Load(ir_node *node) /* check for special case: the loaded value might not be used */ if (be_get_Proj_for_pn(node, pn_Load_res) == NULL) { /* add a result proj and a Keep to produce a pseudo use */ - ir_node *proj = new_r_Proj(block, new_load, mode_Iu, pn_arm_Ldr_res); + ir_node *proj = new_r_Proj(new_load, mode_Iu, pn_arm_Ldr_res); be_new_Keep(block, 1, &proj); } @@ -1226,7 +1217,6 @@ static ir_node *gen_be_Copy(ir_node *node) */ static ir_node *gen_Proj_Load(ir_node *node) { - ir_node *block = be_transform_node(get_nodes_block(node)); ir_node *load = get_Proj_pred(node); ir_node *new_load = be_transform_node(load); dbg_info *dbgi = get_irn_dbg_info(node); @@ -1237,17 +1227,17 @@ static ir_node *gen_Proj_Load(ir_node *node) case iro_arm_Ldr: /* handle all gp loads equal: they have the same proj numbers. */ if (proj == pn_Load_res) { - return new_rd_Proj(dbgi, block, new_load, mode_Iu, pn_arm_Ldr_res); + return new_rd_Proj(dbgi, new_load, mode_Iu, pn_arm_Ldr_res); } else if (proj == pn_Load_M) { - return new_rd_Proj(dbgi, block, new_load, mode_M, pn_arm_Ldr_M); + return new_rd_Proj(dbgi, new_load, mode_M, pn_arm_Ldr_M); } break; case iro_arm_fpaLdf: if (proj == pn_Load_res) { ir_mode *mode = get_Load_mode(load); - return new_rd_Proj(dbgi, block, new_load, mode, pn_arm_fpaLdf_res); + return new_rd_Proj(dbgi, new_load, mode, pn_arm_fpaLdf_res); } else if (proj == pn_Load_M) { - return new_rd_Proj(dbgi, block, new_load, mode_M, pn_arm_fpaLdf_M); + return new_rd_Proj(dbgi, new_load, mode_M, pn_arm_fpaLdf_M); } break; default: @@ -1261,7 +1251,6 @@ static ir_node *gen_Proj_Load(ir_node *node) */ static ir_node *gen_Proj_CopyB(ir_node *node) { - ir_node *block = be_transform_node(get_nodes_block(node)); ir_node *pred = get_Proj_pred(node); ir_node *new_pred = be_transform_node(pred); dbg_info *dbgi = get_irn_dbg_info(node); @@ -1270,7 +1259,7 @@ static ir_node *gen_Proj_CopyB(ir_node *node) switch (proj) { case pn_CopyB_M_regular: if (is_arm_CopyB(new_pred)) { - return new_rd_Proj(dbgi, block, new_pred, mode_M, pn_arm_CopyB_M); + return new_rd_Proj(dbgi, new_pred, mode_M, pn_arm_CopyB_M); } break; default: @@ -1284,7 +1273,6 @@ static ir_node *gen_Proj_CopyB(ir_node *node) */ static ir_node *gen_Proj_Quot(ir_node *node) { - ir_node *block = be_transform_node(get_nodes_block(node)); ir_node *pred = get_Proj_pred(node); ir_node *new_pred = be_transform_node(pred); dbg_info *dbgi = get_irn_dbg_info(node); @@ -1294,24 +1282,24 @@ static ir_node *gen_Proj_Quot(ir_node *node) switch (proj) { case pn_Quot_M: if (is_arm_fpaDvf(new_pred)) { - return new_rd_Proj(dbgi, block, new_pred, mode_M, pn_arm_fpaDvf_M); + return new_rd_Proj(dbgi, new_pred, mode_M, pn_arm_fpaDvf_M); } else if (is_arm_fpaRdf(new_pred)) { - return new_rd_Proj(dbgi, block, new_pred, mode_M, pn_arm_fpaRdf_M); + return new_rd_Proj(dbgi, new_pred, mode_M, pn_arm_fpaRdf_M); } else if (is_arm_fpaFdv(new_pred)) { - return new_rd_Proj(dbgi, block, new_pred, mode_M, pn_arm_fpaFdv_M); + return new_rd_Proj(dbgi, new_pred, mode_M, pn_arm_fpaFdv_M); } else if (is_arm_fpaFrd(new_pred)) { - return new_rd_Proj(dbgi, block, new_pred, mode_M, pn_arm_fpaFrd_M); + return new_rd_Proj(dbgi, new_pred, mode_M, pn_arm_fpaFrd_M); } break; case pn_Quot_res: if (is_arm_fpaDvf(new_pred)) { - return new_rd_Proj(dbgi, block, new_pred, mode, pn_arm_fpaDvf_res); + return new_rd_Proj(dbgi, new_pred, mode, pn_arm_fpaDvf_res); } else if (is_arm_fpaRdf(new_pred)) { - return new_rd_Proj(dbgi, block, new_pred, mode, pn_arm_fpaRdf_res); + return new_rd_Proj(dbgi, new_pred, mode, pn_arm_fpaRdf_res); } else if (is_arm_fpaFdv(new_pred)) { - return new_rd_Proj(dbgi, block, new_pred, mode, pn_arm_fpaFdv_res); + return new_rd_Proj(dbgi, new_pred, mode, pn_arm_fpaFdv_res); } else if (is_arm_fpaFrd(new_pred)) { - return new_rd_Proj(dbgi, block, new_pred, mode, pn_arm_fpaFrd_res); + return new_rd_Proj(dbgi, new_pred, mode, pn_arm_fpaFrd_res); } break; default: @@ -1325,21 +1313,20 @@ static ir_node *gen_Proj_Quot(ir_node *node) */ static ir_node *gen_Proj_be_AddSP(ir_node *node) { - ir_node *block = be_transform_node(get_nodes_block(node)); ir_node *pred = get_Proj_pred(node); ir_node *new_pred = be_transform_node(pred); dbg_info *dbgi = get_irn_dbg_info(node); long proj = get_Proj_proj(node); if (proj == pn_be_AddSP_sp) { - ir_node *res = new_rd_Proj(dbgi, block, new_pred, mode_Iu, + ir_node *res = new_rd_Proj(dbgi, new_pred, mode_Iu, pn_arm_SubSPandCopy_stack); arch_set_irn_register(res, &arm_gp_regs[REG_SP]); return res; } else if (proj == pn_be_AddSP_res) { - return new_rd_Proj(dbgi, block, new_pred, mode_Iu, pn_arm_SubSPandCopy_addr); + return new_rd_Proj(dbgi, new_pred, mode_Iu, pn_arm_SubSPandCopy_addr); } else if (proj == pn_be_AddSP_M) { - return new_rd_Proj(dbgi, block, new_pred, mode_M, pn_arm_SubSPandCopy_M); + return new_rd_Proj(dbgi, new_pred, mode_M, pn_arm_SubSPandCopy_M); } panic("Unsupported Proj from AddSP"); } @@ -1349,19 +1336,18 @@ static ir_node *gen_Proj_be_AddSP(ir_node *node) */ static ir_node *gen_Proj_be_SubSP(ir_node *node) { - ir_node *block = be_transform_node(get_nodes_block(node)); ir_node *pred = get_Proj_pred(node); ir_node *new_pred = be_transform_node(pred); dbg_info *dbgi = get_irn_dbg_info(node); long proj = get_Proj_proj(node); if (proj == pn_be_SubSP_sp) { - ir_node *res = new_rd_Proj(dbgi, block, new_pred, mode_Iu, + ir_node *res = new_rd_Proj(dbgi, new_pred, mode_Iu, pn_arm_AddSP_stack); arch_set_irn_register(res, &arm_gp_regs[REG_SP]); return res; } else if (proj == pn_be_SubSP_M) { - return new_rd_Proj(dbgi, block, new_pred, mode_M, pn_arm_AddSP_M); + return new_rd_Proj(dbgi, new_pred, mode_M, pn_arm_AddSP_M); } panic("Unsupported Proj from SubSP"); } @@ -1432,8 +1418,7 @@ static ir_node *gen_Proj(ir_node *node) ir_node *new_pred = be_transform_node(pred); ir_mode *mode = get_irn_mode(node); if (mode_needs_gp_reg(mode)) { - ir_node *block = be_transform_node(get_nodes_block(node)); - ir_node *new_proj = new_r_Proj(block, new_pred, mode_Iu, + ir_node *new_proj = new_r_Proj(new_pred, mode_Iu, get_Proj_proj(node)); new_proj->node_nr = node->node_nr; return new_proj; @@ -1507,7 +1492,7 @@ static ir_node *gen_Phi(ir_node *node) * and fix this later */ phi = new_ir_node(dbgi, irg, block, op_Phi, mode, get_irn_arity(node), get_irn_in(node) + 1); - copy_node_attr(node, phi); + copy_node_attr(irg, node, phi); be_duplicate_deps(node, phi); arch_set_out_register_req(phi, 0, req); @@ -1522,7 +1507,7 @@ static ir_node *gen_Phi(ir_node *node) */ static ir_node *bad_transform(ir_node *irn) { - panic("ARM backend: Not implemented: %+F", irn); + panic("ARM backend: unexpected node %+F", irn); } /** @@ -1592,17 +1577,6 @@ static void arm_register_transformers(void) set_transformer(op_Tuple, bad_transform); } -/** - * Pre-transform all unknown nodes. - */ -static void arm_pretransform_node(void) -{ - arm_code_gen_t *cg = env_cg; - - cg->unknown_gp = be_pre_transform_node(cg->unknown_gp); - cg->unknown_fpa = be_pre_transform_node(cg->unknown_fpa); -} - /** * Initialize fpa Immediate support. */ @@ -1650,7 +1624,7 @@ void arm_transform_graph(arm_code_gen_t *cg) } arm_register_transformers(); env_cg = cg; - be_transform_graph(cg->birg, arm_pretransform_node); + be_transform_graph(cg->irg, NULL); } void arm_init_transform(void)