Don't allocate new vregs for REG and NOP --- a bit hacky, but suppresses stray

movs very effectively.
This commit is contained in:
David Given 2016-10-04 21:29:03 +02:00
parent bd28bddb92
commit e13ff5be31
2 changed files with 17 additions and 3 deletions

View file

@ -129,8 +129,24 @@ static struct insn* walk_instructions(struct burm_node* node, int goal)
if (!insn->insndata->is_fragment)
{
struct vreg* vreg = NULL;
switch (node->label)
{
case ir_to_esn(IR_REG, 0):
vreg = node->ir->result;
break;
case ir_to_esn(IR_NOP, 0):
vreg = node->left->ir->result;
break;
default:
vreg = new_vreg();
}
insn->hop = current_hop = new_hop(0, insn->ir);
insn->hop->output = new_vreg();
insn->hop->output = vreg;
emit(insn);
hop_print('I', current_hop);

View file

@ -69,11 +69,9 @@ PATTERNS
cost 4;
reg = in:REG
emit "mov %reg, %in"
cost 1;
reg = NOP(in:reg)
emit "mov %reg, %in"
cost 1;