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;
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)) {
for (i = 0; i < n; ++i) {
ir_node *succ = get_irn_out(sel, i);
- if (get_irn_op(succ) == op_Sel) {
+ if (is_Sel(succ)) {
link_all_leave_sels(ent, succ);
flag = 0;
}
for (i = 0; i < n; ++i) {
ir_node *succ = get_irn_out(irg_frame, i);
- if (get_irn_op(succ) == op_Sel) {
+ if (is_Sel(succ)) {
entity *ent = get_Sel_entity(succ);
set_entity_link(ent, NULL);
}
for (i = 0; i < n; ++i) {
ir_node *succ = get_irn_out(irg_frame, i);
- if (get_irn_op(succ) == op_Sel) {
+ if (is_Sel(succ)) {
entity *ent = get_Sel_entity(succ);
- type *ent_type;
+ ir_type *ent_type;
if (get_entity_link(ent) == ADDRESS_TAKEN)
continue;
n = get_Sel_n_indexs(sel);
len += n + 1;
- if (get_irn_op(pred) != op_Sel) {
+ if (! is_Sel(pred)) {
/* we found the root */
res = xmalloc(sizeof(*res) + (len - 1) * sizeof(res->path));
/* a load, check if we can resolve it */
adr = get_Load_ptr(node);
- if (get_irn_op(adr) != op_Sel)
+ if (! is_Sel(adr))
return;
if (! pset_find_ptr(env->sels, adr))
/* a Store always can be replaced */
adr = get_Store_ptr(node);
- if (get_irn_op(adr) != op_Sel)
+ if (! is_Sel(adr))
return;
if (! pset_find_ptr(env->sels, adr))
ir_mode **modes;
set *set_ent;
pset *sels;
- type *ent_type;
+ ir_type *ent_type;
ir_graph *rem;
if (! get_opt_scalar_replacement())
for (i = 0 ; i < get_irn_n_outs(irg_frame); i++) {
ir_node *succ = get_irn_out(irg_frame, i);
- if (get_irn_op(succ) == op_Sel) {
+ if (is_Sel(succ)) {
entity *ent = get_Sel_entity(succ);
if (get_entity_link(ent) == NULL || get_entity_link(ent) == ADDRESS_TAKEN)