X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fia32_transform.c;h=1ee6538a9b0c50b4cad13a18c53340ffe3f4bcbd;hb=96a0fb7c19999a943ecc753bf1dce289475b8daf;hp=d498aa6731ac4c84af1debb229c1c7b094aa4a45;hpb=ba83c2b42a29269444fba2b6ac0764c910c23cfa;p=libfirm diff --git a/ir/be/ia32/ia32_transform.c b/ir/be/ia32/ia32_transform.c index d498aa673..1ee6538a9 100644 --- a/ir/be/ia32/ia32_transform.c +++ b/ir/be/ia32/ia32_transform.c @@ -1,7 +1,6 @@ /** - * This file implements the IR transformation from firm into - * ia32-Firm. - * + * This file implements the IR transformation from firm into ia32-Firm. + * @author Christian Wuerdig * $Id$ */ @@ -26,13 +25,12 @@ #include "irprintf.h" #include "debug.h" #include "irdom.h" +#include "archop.h" /* we need this for Min and Max nodes */ #include "../benode_t.h" #include "../besched.h" #include "../beabi.h" -#include "../arch/archop.h" /* we need this for Min and Max nodes */ - #include "bearch_ia32_t.h" #include "ia32_nodes_attr.h" #include "ia32_transform.h" @@ -575,6 +573,26 @@ static ir_node *gen_Add(ia32_transform_env_t *env) { return new_rd_Proj(dbg, irg, block, new_op, mode, pn_ia32_Add_res); } +/** + * Transforms an ia32_l_AddC (created in intrinsic lowering) into a "real" AddC + * + * @param env The transformation environment + * @return the created ia32 Add node + */ +static ir_node *gen_ia32_l_AddC(ia32_transform_env_t *env) { + return gen_binop(env, get_binop_left(env->irn), get_binop_right(env->irn), new_rd_ia32_AddC); +} + +/** + * Transforms an ia32_l_Add (created in intrinsic lowering) into a "real" Add + * + * @param env The transformation environment + * @return the created ia32 Add node + */ +static ir_node *gen_ia32_l_Add(ia32_transform_env_t *env) { + return gen_binop(env, get_binop_left(env->irn), get_binop_right(env->irn), new_rd_ia32_Add); +} + /** @@ -899,6 +917,26 @@ static ir_node *gen_Sub(ia32_transform_env_t *env) { return new_rd_Proj(dbg, irg, block, new_op, mode, pn_ia32_Sub_res); } +/** + * Transforms an ia32_l_SubC (created in intrinsic lowering) into a "real" SubC + * + * @param env The transformation environment + * @return the created ia32 SubC node + */ +static ir_node *gen_ia32_l_SubC(ia32_transform_env_t *env) { + return gen_binop(env, get_binop_left(env->irn), get_binop_right(env->irn), new_rd_ia32_SubC); +} + +/** + * Transforms an ia32_l_Sub (created in intrinsic lowering) into a "real" Sub + * + * @param env The transformation environment + * @return the created ia32 Sub node + */ +static ir_node *gen_ia32_l_Sub(ia32_transform_env_t *env) { + return gen_binop(env, get_binop_left(env->irn), get_binop_right(env->irn), new_rd_ia32_Sub); +} + /** @@ -2469,7 +2507,11 @@ void ia32_register_transformers(void) { #define IGN(a) GEN(Add); + GEN(ia32_l_Add); + GEN(ia32_l_AddC); GEN(Sub); + GEN(ia32_l_Sub); + GEN(ia32_l_SubC); GEN(Mul); GEN(And); GEN(Or);