In several cases, it's easy to optimize across a non-taken branch simply by *not* flushing the relevant tables. This is true both for value propagation and register allocation.
This comes up in quite a number of cases with arm, most simply in how conditional execution is implemented. But it also came up in discussion of how to implement low-overhead looping for v8.1m. r~ Richard Henderson (2): tcg: Do not kill globals at conditional branches tcg/optimize: Flush data at labels not TCG_OPF_BB_END include/tcg/tcg-opc.h | 7 +++--- include/tcg/tcg.h | 4 +++- tcg/optimize.c | 35 ++++++++++++++------------- tcg/tcg.c | 55 +++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 78 insertions(+), 23 deletions(-) -- 2.25.1