ir_graph *irg) {
be_verify_register_pressure_env_t env;
- env.lv = be_liveness(birg);
+ env.lv = be_liveness(irg);
env.irg = irg;
env.cls = cls;
env.registers_available = env.cls->n_regs - be_put_ignore_regs(birg, env.cls, NULL);
static int should_be_scheduled(ir_node *node)
{
- if(is_Block(node))
- return -1;
-
- if(is_Proj(node))
- return 0;
-
- if(get_irn_mode(node) == mode_M) {
- if(is_Phi(node) || is_Sync(node) || is_Pin(node))
- return 0;
- }
- if(be_is_Keep(node) && get_irn_opcode(get_nodes_block(node)) == iro_Bad)
- return 0;
-
switch(get_irn_opcode(node)) {
+ case iro_Bad:
+ case iro_Block:
case iro_End:
case iro_NoMem:
- case iro_Bad:
+ case iro_Pin:
+ case iro_Proj:
+ case iro_Sync:
case iro_Unknown:
return 0;
+ case iro_Phi:
+ if (get_irn_mode(node) == mode_M)
+ return 0;
+ break;
default:
break;
}
- if (arch_irn_get_flags(node) & arch_irn_flags_ignore)
- return -1;
+ if (get_irn_mode(node) != mode_T) {
+ if (arch_irn_is_ignore(node))
+ return -1;
+ }
return 1;
}
return;
reg = arch_get_irn_register(node);
- if (reg->type & arch_register_type_virtual)
+ if (reg == NULL || reg->type & arch_register_type_virtual)
return;
reg_node = registers[reg->index];
return;
reg = arch_get_irn_register(node);
- if (reg->type & arch_register_type_virtual)
+ if (reg == NULL || reg->type & arch_register_type_virtual)
return;
reg_node = registers[reg->index];
int be_verify_register_allocation(const be_irg_t *birg) {
arch_env = be_get_birg_arch_env(birg);
irg = be_get_birg_irg(birg);
- lv = be_liveness(birg);
+ lv = be_liveness(irg);
problem_found = 0;
be_liveness_assure_sets(lv);