Don't write back unchanged registers on flush + invalidate.
This commit is contained in:
parent
d9e38fe37c
commit
829c74f2d5
1 changed files with 6 additions and 2 deletions
|
|
@ -473,18 +473,22 @@ void codegen_reg_flush_invalidate(ir_data_t *ir, codeblock_t *block)
|
||||||
reg_set = &host_reg_set;
|
reg_set = &host_reg_set;
|
||||||
for (c = 0; c < reg_set->nr_regs; c++)
|
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);
|
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;
|
reg_set = &host_fp_reg_set;
|
||||||
for (c = 0; c < reg_set->nr_regs; c++)
|
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);
|
codegen_reg_writeback(reg_set, block, c, 1);
|
||||||
}
|
}
|
||||||
|
reg_set->regs[c] = invalid_ir_reg;
|
||||||
|
reg_set->dirty[c] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue