#include "irgwalk.h"
#include "irgmod.h"
#include "irnode_t.h"
+#include "irtools.h"
-#define SET_VNUM(node, vnum) set_irn_link(node, (void *)vnum)
-#define GET_VNUM(node) (unsigned)get_irn_link(node)
+#define SET_VNUM(node, vnum) set_irn_link(node, INT_TO_PTR(vnum))
+#define GET_VNUM(node) (unsigned)PTR_TO_INT(get_irn_link(node))
/**
* A path element entry: it is either an entity
typedef struct _scalars_t {
entity *ent; /**< A entity for scalar replacement. */
- type *ent_owner; /**< The owner of this entity. */
+ ir_type *ent_owner; /**< The owner of this entity. */
} scalars_t;
unsigned i;
for (i = 0; i < path->path_len; ++i)
- hash ^= (unsigned)path->path[i].ent;
+ hash ^= (unsigned)PTR_TO_INT(path->path[i].ent);
return hash >> 4;
}
return 1;
}
-/**
+/*
* Returns non-zero, if the address of an entity
* represented by a Sel node (or it's successor Sels) is taken.
- *
- * @param sel the Sel node
*/
-static int is_address_taken(ir_node *sel)
+int is_address_taken(ir_node *sel)
{
- int i, n;
+ int i;
if (! is_const_sel(sel))
return 1;
- n = get_irn_n_outs(sel);
- for (i = 0; i < n; ++i) {
+ for (i = get_irn_n_outs(sel) - 1; i >= 0; --i) {
ir_node *succ = get_irn_out(sel, i);
switch (get_irn_opcode(succ)) {
if (get_irn_op(succ) == op_Sel) {
entity *ent = get_Sel_entity(succ);
- type *ent_type;
+ ir_type *ent_type;
if (get_entity_link(ent) == ADDRESS_TAKEN)
continue;
else
printf("[%ld]", get_tarval_long(key->path[i].tv));
}
- printf(" = %u (%s)\n", (int)get_irn_link(sel), get_mode_name((*modes)[key->vnum]));
+ printf(" = %u (%s)\n", PTR_TO_INT(get_irn_link(sel)), get_mode_name((*modes)[key->vnum]));
}
#endif /* DEBUG_libfirm */
}
ir_mode **modes;
set *set_ent;
pset *sels;
- type *ent_type;
+ ir_type *ent_type;
ir_graph *rem;
if (! get_opt_scalar_replacement())