From cb4f7c3cec30f99b97024907fef7cde6b61b44d2 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Mon, 23 Apr 2007 09:29:52 +0000 Subject: [PATCH] Fixed: gen_Proj_be_Call() handles only data Projs (!= non-Memory) Fixed: Removed wrong warnings regarding strict Conv's Strict Conv's still not implemented! [r13445] --- ir/be/ia32/ia32_transform.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/ir/be/ia32/ia32_transform.c b/ir/be/ia32/ia32_transform.c index 0d8a35b1e..569013d71 100644 --- a/ir/be/ia32/ia32_transform.c +++ b/ir/be/ia32/ia32_transform.c @@ -2300,10 +2300,17 @@ static ir_node *gen_Conv(ia32_transform_env_t *env, ir_node *node) { ir_node *new_op = transform_node(env, op); if (src_mode == tgt_mode) { - /* this should be optimized already, but who knows... */ - DEBUG_ONLY(ir_fprintf(stderr, "Debug warning: conv %+F is pointless\n", node)); - DB((dbg, LEVEL_1, "killed Conv(mode, mode) ...")); - return new_op; + if (get_Conv_strict(node)) { + if (USE_SSE2(env->cg)) { + /* when we are in SSE mode, we can kill all strict no-op conversion */ + return new_op; + } + } else { + /* this should be optimized already, but who knows... */ + DEBUG_ONLY(ir_fprintf(stderr, "Debug warning: conv %+F is pointless\n", node)); + DB((dbg, LEVEL_1, "killed Conv(mode, mode) ...")); + return new_op; + } } if (mode_is_float(src_mode)) { @@ -2316,6 +2323,7 @@ static ir_node *gen_Conv(ia32_transform_env_t *env, ir_node *node) { set_ia32_ls_mode(res, tgt_mode); } else { // Matze: TODO what about strict convs? + DEBUG_ONLY(ir_fprintf(stderr, "Debug warning: strict conv %+F ignored yet\n", node)); DB((dbg, LEVEL_1, "killed Conv(float, float) ...")); return new_op; } @@ -3608,7 +3616,7 @@ static ir_node *gen_Proj_be_Call(ia32_transform_env_t *env, ir_node *node) { } /* transform call modes */ - if(mode != mode_M) { + if (mode_is_data(mode)) { cls = arch_get_irn_reg_class(env->cg->arch_env, node, -1); mode = cls->mode; } -- 2.20.1