Constify node_cmp_attr_func.
[libfirm] / ir / be / ia32 / ia32_address_mode.c
index 13df6f6..7ea5b44 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
+ * Copyright (C) 1995-2010 University of Karlsruhe.  All right reserved.
  *
  * This file is part of libFirm.
  *
@@ -82,8 +82,7 @@ static int do_is_immediate(const ir_node *node, int *symconsts, int negate)
 
                if (get_SymConst_kind(node) != symconst_addr_ent)
                        return 0;
-               (*symconsts)++;
-               if (*symconsts > 1)
+               if (++*symconsts > 1)
                        return 0;
 
                return 1;
@@ -97,10 +96,10 @@ static int do_is_immediate(const ir_node *node, int *symconsts, int negate)
                if (ia32_is_non_address_mode_node(node))
                        return 0;
 
-               left  = get_binop_left(node);
-               right = get_binop_right(node);
+               left = get_binop_left(node);
                if (!do_is_immediate(left, symconsts, negate))
                        return 0;
+               right = get_binop_right(node);
                if (!do_is_immediate(right, symconsts, is_Sub(node) ? !negate : negate))
                        return 0;
 
@@ -111,21 +110,6 @@ static int do_is_immediate(const ir_node *node, int *symconsts, int negate)
        }
 }
 
-/**
- * Checks if a DAG with a single root node can be represented as a simple immediate.
- *
- * @param node  the node
- *
- * @return non-zero if the DAG represents an immediate, 0 else
- */
-#if 0
-static int is_immediate_simple(const ir_node *node)
-{
-       int symconsts = 0;
-       return do_is_immediate(node, &symconsts, 0);
-}
-#endif
-
 /**
  * Check if a DAG starting with root node can be folded into an address mode
  * as an immediate.
@@ -149,10 +133,10 @@ static int is_immediate(ia32_address_t *addr, const ir_node *node, int negate)
  */
 static void eat_immediate(ia32_address_t *addr, ir_node *node, int negate)
 {
-       tarval  *tv;
-       ir_node *left;
-       ir_node *right;
-       long    val;
+       ir_tarval *tv;
+       ir_node   *left;
+       ir_node   *right;
+       long      val;
 
        switch (get_irn_opcode(node)) {
        case iro_Const:
@@ -181,15 +165,15 @@ static void eat_immediate(ia32_address_t *addr, ir_node *node, int negate)
        case iro_Add:
                assert(!ia32_is_non_address_mode_node(node));
                left  = get_Add_left(node);
-               right = get_Add_right(node);
                eat_immediate(addr, left, negate);
+               right = get_Add_right(node);
                eat_immediate(addr, right, negate);
                break;
        case iro_Sub:
                assert(!ia32_is_non_address_mode_node(node));
                left  = get_Sub_left(node);
-               right = get_Sub_right(node);
                eat_immediate(addr, left, negate);
+               right = get_Sub_right(node);
                eat_immediate(addr, right, !negate);
                break;
        default:
@@ -220,11 +204,11 @@ static ir_node *eat_immediates(ia32_address_t *addr, ir_node *node,
 
                if (is_immediate(addr, left, 0)) {
                        eat_immediate(addr, left, 0);
-                       return eat_immediates(addr, right, 0);
+                       return eat_immediates(addr, right, ia32_create_am_normal);
                }
                if (is_immediate(addr, right, 0)) {
                        eat_immediate(addr, right, 0);
-                       return eat_immediates(addr, left, 0);
+                       return eat_immediates(addr, left, ia32_create_am_normal);
                }
        } else if (is_Sub(node)) {
                ir_node *left  = get_Sub_left(node);
@@ -232,7 +216,7 @@ static ir_node *eat_immediates(ia32_address_t *addr, ir_node *node,
 
                if (is_immediate(addr, right, 1)) {
                        eat_immediate(addr, right, 1);
-                       return eat_immediates(addr, left, 0);
+                       return eat_immediates(addr, left, ia32_create_am_normal);
                }
        }
 
@@ -253,8 +237,8 @@ static int eat_shl(ia32_address_t *addr, ir_node *node)
        long     val;
 
        if (is_Shl(node)) {
-               ir_node *right = get_Shl_right(node);
-               tarval  *tv;
+               ir_node   *right = get_Shl_right(node);
+               ir_tarval *tv;
 
                /* we can use shl with 1, 2 or 3 shift */
                if (!is_Const(right))
@@ -306,7 +290,6 @@ static int eat_shl(ia32_address_t *addr, ir_node *node)
 /* Create an address mode for a given node. */
 void ia32_create_address_mode(ia32_address_t *addr, ir_node *node, ia32_create_am_flags_t flags)
 {
-       int      res = 0;
        ir_node *eat_imms;
 
        if (is_immediate(addr, node, 0)) {
@@ -334,7 +317,6 @@ void ia32_create_address_mode(ia32_address_t *addr, ir_node *node, ia32_create_a
                        eat_imms = ia32_skip_downconv(eat_imms);
                }
 
-               res  = 1;
                node = eat_imms;
 #ifndef AGGRESSIVE_AM
                if (get_irn_n_edges(node) > 1) {
@@ -434,6 +416,9 @@ int ia32_is_non_address_mode_node(ir_node const *node)
        return bitset_is_set(non_address_mode_nodes, get_irn_idx(node));
 }
 
+/**
+ * Check if a given value is last used (i.e. die after) the block of some other node.
+ */
 static int value_last_used_here(be_lv_t *lv, ir_node *here, ir_node *value)
 {
        ir_node         *block = get_nodes_block(here);
@@ -461,7 +446,7 @@ static int value_last_used_here(be_lv_t *lv, ir_node *here, ir_node *value)
  */
 static void mark_non_address_nodes(ir_node *node, void *env)
 {
-       be_lv_t *lv = env;
+       be_lv_t *lv = (be_lv_t*)env;
        int      arity;
        int      i;
        ir_node *val;
@@ -526,10 +511,9 @@ static void mark_non_address_nodes(ir_node *node, void *env)
        }
 }
 
-void ia32_calculate_non_address_mode_nodes(be_irg_t *birg)
+void ia32_calculate_non_address_mode_nodes(ir_graph *irg)
 {
-       ir_graph *irg = be_get_birg_irg(birg);
-       be_lv_t  *lv  = be_assure_liveness(birg);
+       be_lv_t  *lv  = be_assure_liveness(irg);
 
        non_address_mode_nodes = bitset_malloc(get_irg_last_idx(irg));