bessaconstr: Avoid duplicate map lookups.
[libfirm] / ir / be / amd64 / amd64_transform.c
index 7d2e7b3..97a16e7 100644 (file)
@@ -302,18 +302,10 @@ static bool upper_bits_clean(ir_node *transformed_node, ir_mode *mode)
 }
 #endif
 
-/**
- * Change some phi modes
- */
 static ir_node *gen_Phi(ir_node *node)
 {
+       ir_mode                   *mode = get_irn_mode(node);
        const arch_register_req_t *req;
-       ir_node  *block = be_transform_node(get_nodes_block(node));
-       ir_graph *irg   = current_ir_graph;
-       dbg_info *dbgi  = get_irn_dbg_info(node);
-       ir_mode  *mode  = get_irn_mode(node);
-       ir_node  *phi;
-
        if (mode_needs_gp_reg(mode)) {
                /* all integer operations are on 64bit registers now */
                mode = mode_Lu;
@@ -322,22 +314,9 @@ static ir_node *gen_Phi(ir_node *node)
                req = arch_no_register_req;
        }
 
-       /* phi nodes allow loops, so we use the old arguments for now
-        * 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(irg, node, phi);
-       be_duplicate_deps(node, phi);
-
-       arch_set_irn_register_req_out(phi, 0, req);
-
-       be_enqueue_preds(node);
-
-       return phi;
+       return be_transform_phi(node, req);
 }
 
-
-
 /**
  * Transforms a Conv node.
  *
@@ -491,12 +470,10 @@ static ir_node *gen_Proj_Load(ir_node *node)
  */
 static ir_node *gen_Proj(ir_node *node)
 {
-       ir_graph *irg  = current_ir_graph;
        dbg_info *dbgi = get_irn_dbg_info(node);
        ir_node  *pred = get_Proj_pred(node);
        long     proj  = get_Proj_proj(node);
 
-       (void) irg;
     (void) dbgi;
 
        if (is_Store(pred)) {
@@ -514,14 +491,12 @@ static ir_node *gen_Proj(ir_node *node)
        } else if (be_is_AddSP(pred)) {
                //panic("gen_Proj not implemented for AddSP");
                return gen_Proj_be_AddSP(node);
-       } else if (is_Cmp(pred)) {
-               //panic("gen_Proj not implemented for Cmp");
-               return gen_Proj_Cmp(node);
        } else if (is_Div(pred)) {
                return gen_Proj_Div(node);
 #endif
        } else if (is_Start(pred)) {
 #if 0
+               ir_graph *const irg = get_irn_irg(node);
                if (node == get_irg_anchor(irg, anchor_tls)) {
                        return gen_Proj_tls(node);
                }