Handle replacement of ia32_Conv_I2I by Cwtl as peephole optimisation instead of handl...
[libfirm] / ir / be / TEMPLATE / TEMPLATE_transform.c
index f502b8f..0df5418 100644 (file)
@@ -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.
  *
@@ -22,9 +22,7 @@
  * @brief   code selection (transform FIRM into TEMPLATE FIRM)
  * @version $Id$
  */
-#ifdef HAVE_CONFIG_H
 #include "config.h"
-#endif
 
 #include "irnode_t.h"
 #include "irgraph_t.h"
@@ -33,7 +31,6 @@
 #include "iredges.h"
 #include "irvrfy.h"
 #include "ircons.h"
-#include "dbginfo.h"
 #include "iropt_t.h"
 #include "debug.h"
 
@@ -41,7 +38,7 @@
 #include "bearch_TEMPLATE_t.h"
 
 #include "TEMPLATE_nodes_attr.h"
-#include "../arch/archop.h"     /* we need this for Min and Max nodes */
+#include "archop.h"
 #include "TEMPLATE_transform.h"
 #include "TEMPLATE_new_nodes.h"
 #include "TEMPLATE_map_regs.h"
@@ -71,7 +68,7 @@ extern ir_op *get_op_Mulh(void);
  * @return the created TEMPLATE Add node
  */
 static ir_node *gen_Add(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op2) {
-       return new_rd_TEMPLATE_Add(env->dbg, env->irg, env->block, op1, op2, env->mode);
+       return new_bd_TEMPLATE_Add(env->dbg, env->block, op1, op2, env->mode);
 }
 
 
@@ -88,10 +85,10 @@ static ir_node *gen_Add(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op
  */
 static ir_node *gen_Mul(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op2) {
        if (mode_is_float(env->mode)) {
-               return new_rd_TEMPLATE_fMul(env->dbg, env->irg, env->block, op1, op2, env->mode);
+               return new_bd_TEMPLATE_fMul(env->dbg, env->block, op1, op2, env->mode);
        }
        else {
-               return new_rd_TEMPLATE_Mul(env->dbg, env->irg, env->block, op1, op2, env->mode);
+               return new_bd_TEMPLATE_Mul(env->dbg, env->block, op1, op2, env->mode);
        }
 }
 
@@ -108,7 +105,7 @@ static ir_node *gen_Mul(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op
  * @return the created TEMPLATE And node
  */
 static ir_node *gen_And(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op2) {
-       return new_rd_TEMPLATE_And(env->dbg, env->irg, env->block, op1, op2, env->mode);
+       return new_bd_TEMPLATE_And(env->dbg, env->block, op1, op2, env->mode);
 }
 
 
@@ -124,7 +121,7 @@ static ir_node *gen_And(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op
  * @return the created TEMPLATE Or node
  */
 static ir_node *gen_Or(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op2) {
-       return new_rd_TEMPLATE_Or(env->dbg, env->irg, env->block, op1, op2, env->mode);
+       return new_bd_TEMPLATE_Or(env->dbg, env->block, op1, op2, env->mode);
 }
 
 
@@ -140,7 +137,7 @@ static ir_node *gen_Or(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op2
  * @return the created TEMPLATE Eor node
  */
 static ir_node *gen_Eor(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op2) {
-       return new_rd_TEMPLATE_Eor(env->dbg, env->irg, env->block, op1, op2, env->mode);
+       return new_bd_TEMPLATE_Eor(env->dbg, env->block, op1, op2, env->mode);
 }
 
 
@@ -157,10 +154,10 @@ static ir_node *gen_Eor(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op
  */
 static ir_node *gen_Sub(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op2) {
        if (mode_is_float(env->mode)) {
-               return new_rd_TEMPLATE_fSub(env->dbg, env->irg, env->block, op1, op2, env->mode);
+               return new_bd_TEMPLATE_fSub(env->dbg, env->block, op1, op2, env->mode);
        }
        else {
-               return new_rd_TEMPLATE_Sub(env->dbg, env->irg, env->block, op1, op2, env->mode);
+               return new_bd_TEMPLATE_Sub(env->dbg, env->block, op1, op2, env->mode);
        }
 }
 
@@ -177,7 +174,7 @@ static ir_node *gen_Sub(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op
  * @return the created TEMPLATE fDiv node
  */
 static ir_node *gen_Quot(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op2) {
-       return new_rd_TEMPLATE_fDiv(env->dbg, env->irg, env->block, op1, op2, env->mode);
+       return new_bd_TEMPLATE_fDiv(env->dbg, env->block, op1, op2, env->mode);
 }
 
 
@@ -193,7 +190,7 @@ static ir_node *gen_Quot(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *o
  * @return the created TEMPLATE Shl node
  */
 static ir_node *gen_Shl(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op2) {
-       return new_rd_TEMPLATE_Shl(env->dbg, env->irg, env->block, op1, op2, env->mode);
+       return new_bd_TEMPLATE_Shl(env->dbg, env->block, op1, op2, env->mode);
 }
 
 
@@ -209,7 +206,7 @@ static ir_node *gen_Shl(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op
  * @return the created TEMPLATE Shr node
  */
 static ir_node *gen_Shr(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op2) {
-       return new_rd_TEMPLATE_Shr(env->dbg, env->irg, env->block, op1, op2, env->mode);
+       return new_bd_TEMPLATE_Shr(env->dbg, env->block, op1, op2, env->mode);
 }
 
 
@@ -226,9 +223,9 @@ static ir_node *gen_Shr(TEMPLATE_transform_env_t *env, ir_node *op1, ir_node *op
  */
 static ir_node *gen_Minus(TEMPLATE_transform_env_t *env, ir_node *op) {
        if (mode_is_float(env->mode)) {
-               return new_rd_TEMPLATE_fMinus(env->dbg, env->irg, env->block, op, env->mode);
+               return new_bd_TEMPLATE_fMinus(env->dbg, env->block, op, env->mode);
        }
-       return new_rd_TEMPLATE_Minus(env->dbg, env->irg, env->block, op, env->mode);
+       return new_bd_TEMPLATE_Minus(env->dbg, env->block, op, env->mode);
 }
 
 
@@ -244,7 +241,7 @@ static ir_node *gen_Minus(TEMPLATE_transform_env_t *env, ir_node *op) {
  * @return the created TEMPLATE Not node
  */
 static ir_node *gen_Not(TEMPLATE_transform_env_t *env, ir_node *op) {
-       return new_rd_TEMPLATE_Not(env->dbg, env->irg, env->block, op, env->mode);
+       return new_bd_TEMPLATE_Not(env->dbg, env->block, op, env->mode);
 }
 
 
@@ -262,9 +259,9 @@ static ir_node *gen_Load(TEMPLATE_transform_env_t *env) {
        ir_node *node = env->irn;
 
        if (mode_is_float(env->mode)) {
-               return new_rd_TEMPLATE_fLoad(env->dbg, env->irg, env->block, get_Load_ptr(node), get_Load_mem(node), env->mode);
+               return new_bd_TEMPLATE_fLoad(env->dbg, env->block, get_Load_ptr(node), get_Load_mem(node), env->mode);
        }
-       return new_rd_TEMPLATE_Load(env->dbg, env->irg, env->block, get_Load_ptr(node), get_Load_mem(node), env->mode);
+       return new_bd_TEMPLATE_Load(env->dbg, env->block, get_Load_ptr(node), get_Load_mem(node), env->mode);
 }
 
 
@@ -282,9 +279,9 @@ static ir_node *gen_Store(TEMPLATE_transform_env_t *env) {
        ir_node *node = env->irn;
 
        if (mode_is_float(env->mode)) {
-               return new_rd_TEMPLATE_fStore(env->dbg, env->irg, env->block, get_Store_ptr(node), get_Store_value(node), get_Store_mem(node), env->mode);
+               return new_bd_TEMPLATE_fStore(env->dbg, env->block, get_Store_ptr(node), get_Store_value(node), get_Store_mem(node), env->mode);
        }
-       return new_rd_TEMPLATE_Store(env->dbg, env->irg, env->block, get_Store_ptr(node), get_Store_value(node), get_Store_mem(node), env->mode);
+       return new_bd_TEMPLATE_Store(env->dbg, env->block, get_Store_ptr(node), get_Store_value(node), get_Store_mem(node), env->mode);
 }
 
 
@@ -309,10 +306,13 @@ static ir_node *gen_Store(TEMPLATE_transform_env_t *env) {
  * @param env     the debug module
  */
 void TEMPLATE_transform_node(ir_node *node, void *env) {
+#ifdef DEBUG_libfirm
        TEMPLATE_code_gen_t *cgenv = (TEMPLATE_code_gen_t *)env;
+#endif
        ir_opcode code             = get_irn_opcode(node);
        ir_node *asm_node          = NULL;
        TEMPLATE_transform_env_t tenv;
+       (void) env;
 
        if (is_Block(node))
                return;
@@ -400,8 +400,8 @@ void TEMPLATE_transform_node(ir_node *node, void *env) {
 
                default:
                        if (get_irn_op(node) == get_op_Max() ||
-                               get_irn_op(node) == get_op_Min() ||
-                               get_irn_op(node) == get_op_Mulh())
+                           get_irn_op(node) == get_op_Min() ||
+                           is_Mulh(node))
                        {
                                /* TODO: implement */
                                /* ignore for now  */