return NULL;
}
-static void arm_set_frame_entity(const void *self, ir_node *irn, ir_entity *ent) {
+static void arm_set_frame_entity(const void *self, ir_node *irn, ir_entity *ent)
+{
+ (void) self;
+ (void) irn;
+ (void) ent;
/* TODO: set the entity assigned to the frame */
}
* This function is called by the generic backend to correct offsets for
* nodes accessing the stack.
*/
-static void arm_set_stack_bias(const void *self, ir_node *irn, int bias) {
+static void arm_set_stack_bias(const void *self, ir_node *irn, int bias)
+{
+ (void) self;
+ (void) irn;
+ (void) bias;
/* TODO: correct offset if irn accesses the stack */
}
0, /* use generic register names instead of SP, LR, PC */
ARM_FPU_ARCH_FPE, /* FPU architecture */
NULL, /* current code generator */
- { NULL, }, /* emitter environment */
+ NULL_EMITTER, /* emitter environment */
};
/**
* Return the register class with requested index.
*/
static const arch_register_class_t *arm_get_reg_class(const void *self, int i) {
+ (void) self;
return i == 0 ? &arm_reg_classes[CLASS_arm_gp] : &arm_reg_classes[CLASS_arm_fpa];
}
/**
* Make sure the live sets are computed.
- * @param lv The liveness infirmation.
+ * @param lv The liveness information.
*/
void be_liveness_assure_sets(be_lv_t *lv);
/* fix stack offsets */
BE_TIMER_PUSH(t_abi);
be_abi_fix_stack_nodes(birg->abi);
- be_remove_dead_nodes_from_schedule(irg);
+ be_remove_dead_nodes_from_schedule(birg);
be_abi_fix_stack_bias(birg->abi);
BE_TIMER_POP(t_abi);
//---------------------------------------------------------------------------
typedef struct remove_dead_nodes_env_t_ {
- ir_graph *irg;
bitset_t *reachable;
+ ir_graph *irg;
+ be_lv_t *lv;
} remove_dead_nodes_env_t;
/**
if (bitset_is_set(env->reachable, get_irn_idx(node)))
continue;
+ if(env->lv)
+ be_liveness_remove(env->lv, node);
sched_remove(node);
be_kill_node(node);
}
}
-void be_remove_dead_nodes_from_schedule(ir_graph *irg)
+void be_remove_dead_nodes_from_schedule(be_irg_t *birg)
{
+ ir_graph *irg = be_get_birg_irg(birg);
+
remove_dead_nodes_env_t env;
- env.irg = irg;
env.reachable = bitset_alloca(get_irg_last_idx(irg));
+ env.lv = be_get_birg_liveness(birg);
+ env.irg = irg;
// mark all reachable nodes
irg_walk_graph(irg, mark_dead_nodes_walker, NULL, &env);
#include "irgraph.h"
#include "irnode.h"
+#include "beirg.h"
void be_sched_dump(FILE *f, ir_graph *irg);
* Removes dead nodes from schedule
* @param irg the graph
*/
-void be_remove_dead_nodes_from_schedule(ir_graph *irg);
+void be_remove_dead_nodes_from_schedule(be_irg_t *birg);
#endif /* FIRM_BE_BESCHED_H */
}
#endif
- be_remove_dead_nodes_from_schedule(env->irg);
/* Matze: In theory be_ssa_construction should take care of the liveness...
* try to disable this again in the future */
be_liveness_invalidate(env->birg->lv);
+
+ be_remove_dead_nodes_from_schedule(env->birg);
}
void be_init_spill(void)
env.uses = be_begin_uses(irg, env.lv);
env.spills = NULL;
+ assure_doms(irg);
set_using_visited(irg);
set_using_irn_link(irg);
inc_irg_visited(irg);
}
/* some nodes might be dead now. */
- be_remove_dead_nodes_from_schedule(irg);
+ be_remove_dead_nodes_from_schedule(birg);
be_end_uses(env.uses);
obstack_free(&env.obst, NULL);
case 64:
return 'l';
case 80:
+ case 96:
return 't';
}
} else {
for(i = 0; i < len; ++i) {
be_liveness_update(lv, env.state_nodes[i]);
}
+ } else {
+ be_liveness_invalidate(birg->lv);
}
/* set registers for the phis */
}
be_ssa_construction_destroy(&senv);
DEL_ARR_F(env.state_nodes);
+
+ be_liveness_invalidate(be_get_birg_liveness(birg));
}
void ia32_setup_fpu_mode(ia32_code_gen_t *cg)
char buf[64];
snprintf(buf, sizeof(buf), "prim_type_%s", get_mode_name(mode));
res = new_type_primitive(new_id_from_str(buf), mode);
+ set_type_alignment_bytes(res, 16);
pmap_insert(types, mode, res);
}
else
cnst = new_rd_ia32_xConst(dbgi, irg, block);
else
cnst = new_rd_ia32_vfConst(dbgi, irg, block);
- set_ia32_ls_mode(cnst, mode);
+ //set_ia32_ls_mode(cnst, mode);
+ set_ia32_ls_mode(cnst, mode_E);
} else {
cnst = new_rd_ia32_Const(dbgi, irg, block);
}
set_ia32_ls_mode(res, tgt_mode);
} else {
// Matze: TODO what about strict convs?
- DEBUG_ONLY(ir_fprintf(stderr, "Debug warning: strict conv %+F ignored yet\n", node));
+ if(get_Conv_strict(node)) {
+ DEBUG_ONLY(ir_fprintf(stderr, "Debug warning: strict conv %+F ignored yet\n", node));
+ }
DB((dbg, LEVEL_1, "killed Conv(float, float) ..."));
return new_op;
}
/* all integer operations are on 32bit registers now */
mode = mode_Iu;
} else if(mode_is_float(mode)) {
- assert(mode == mode_D || mode == mode_F);
if (USE_SSE2(env_cg)) {
mode = mode_xmm;
} else {
/* we exchange the ProjX with a jump */
block = be_transform_node(block);
jump = new_rd_Jmp(dbgi, irg, block);
- ir_fprintf(stderr, "created jump: %+F\n", jump);
return jump;
}
if (node == be_get_old_anchor(anchor_tls)) {