Don't write back unchanged registers on flush + invalidate.

This commit is contained in:
SarahW 2018-10-09 14:07:49 +01:00
commit 829c74f2d5

View file

@ -473,18 +473,22 @@ void codegen_reg_flush_invalidate(ir_data_t *ir, codeblock_t *block)
reg_set = &host_reg_set;
for (c = 0; c < reg_set->nr_regs; c++)
{
if (!ir_reg_is_invalid(reg_set->regs[c]))
if (!ir_reg_is_invalid(reg_set->regs[c]) && reg_set->dirty[c])
{
codegen_reg_writeback(reg_set, block, c, 1);
}
reg_set->regs[c] = invalid_ir_reg;
reg_set->dirty[c] = 0;
}
reg_set = &host_fp_reg_set;
for (c = 0; c < reg_set->nr_regs; c++)
{
if (!ir_reg_is_invalid(reg_set->regs[c]))
if (!ir_reg_is_invalid(reg_set->regs[c]) && reg_set->dirty[c])
{
codegen_reg_writeback(reg_set, block, c, 1);
}
reg_set->regs[c] = invalid_ir_reg;
reg_set->dirty[c] = 0;
}
}