From 829c74f2d548afda844fc7de07cc387ce80622a6 Mon Sep 17 00:00:00 2001 From: SarahW Date: Tue, 9 Oct 2018 14:07:49 +0100 Subject: [PATCH] Don't write back unchanged registers on flush + invalidate. --- src/codegen_reg.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/codegen_reg.c b/src/codegen_reg.c index 556dbbf..fc97b20 100644 --- a/src/codegen_reg.c +++ b/src/codegen_reg.c @@ -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; } }