diff options
| author | Richard Henderson <richard.henderson@linaro.org> | 2018-11-27 13:45:08 -0800 |
|---|---|---|
| committer | Richard Henderson <richard.henderson@linaro.org> | 2018-12-26 06:58:20 +1100 |
| commit | ae36a246ed1a0e96c6c4f478f03d047dfa3a8898 (patch) | |
| tree | 197234fae4be13f536bff405788eb2cb5210963a /tcg/tcg.c | |
| parent | f65a061c39cc4f9d088201031050e42eb23d5b2a (diff) | |
| download | focaccia-qemu-ae36a246ed1a0e96c6c4f478f03d047dfa3a8898.tar.gz focaccia-qemu-ae36a246ed1a0e96c6c4f478f03d047dfa3a8898.zip | |
tcg: Add TCG_OPF_BB_EXIT
Use this to notice the opcodes that exit the TB, which implies that local temps are really dead and need not be synced. Previously we so marked the true end of the TB, but that was immediately overwritten by the la_bb_end invoked by any TCG_OPF_BB_END opcode, like exit_tb. Reviewed-by: Emilio G. Cota <cota@braap.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'tcg/tcg.c')
| -rw-r--r-- | tcg/tcg.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/tcg/tcg.c b/tcg/tcg.c index 4f0acf8863..d40edb4f57 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -2424,6 +2424,7 @@ static void liveness_pass_1(TCGContext *s) int nb_temps = s->nb_temps; TCGOp *op, *op_prev; + /* ??? Should be redundant with the exit_tb that ends the TB. */ la_func_end(s, nb_globals, nb_temps); QTAILQ_FOREACH_REVERSE_SAFE(op, &s->ops, TCGOpHead, link, op_prev) { @@ -2612,7 +2613,9 @@ static void liveness_pass_1(TCGContext *s) } /* if end of basic block, update */ - if (def->flags & TCG_OPF_BB_END) { + if (def->flags & TCG_OPF_BB_EXIT) { + la_func_end(s, nb_globals, nb_temps); + } else if (def->flags & TCG_OPF_BB_END) { la_bb_end(s, nb_globals, nb_temps); } else if (def->flags & TCG_OPF_SIDE_EFFECTS) { la_global_sync(s, nb_globals); |