tcg: Revert "tcg/optimize: Flush data at labels not TCG_OPF_BB_END"
commitc56caea3b2a4ef5d760266f554df0d92c5a45f87
authorRichard Henderson <richard.henderson@linaro.org>
Tue, 3 Nov 2020 21:20:21 +0000 (3 13:20 -0800)
committerRichard Henderson <richard.henderson@linaro.org>
Wed, 4 Nov 2020 18:35:40 +0000 (4 10:35 -0800)
tree80fba4ec72139128960a1bbe052dc8432c0d8e83
parentf14bed3fd4a17e1255e2ed6db1dfe50e654e601d
tcg: Revert "tcg/optimize: Flush data at labels not TCG_OPF_BB_END"

This reverts commit cd0372c515c4732d8bd3777cdd995c139c7ed7ea.

The patch is incorrect in that it retains copies between globals and
non-local temps, and non-local temps still die at the end of the BB.

Failing test case for hppa:

.globl _start
_start:
cmpiclr,= 0x24,%r19,%r0
cmpiclr,<> 0x2f,%r19,%r19

 ---- 00010057 0001005b
 movi_i32 tmp0,$0x24
 sub_i32 tmp1,tmp0,r19
 mov_i32 tmp2,tmp0
 mov_i32 tmp3,r19
 movi_i32 tmp1,$0x0

 ---- 0001005b 0001005f
 brcond_i32 tmp2,tmp3,eq,$L1
 movi_i32 tmp0,$0x2f
 sub_i32 tmp1,tmp0,r19
 mov_i32 tmp2,tmp0
 mov_i32 tmp3,r19
 movi_i32 tmp1,$0x0
 mov_i32 r19,tmp1
 setcond_i32 psw_n,tmp2,tmp3,ne
 set_label $L1

In this case, both copies of "mov_i32 tmp3,r19" are removed.  The
second because opt thought it was redundant.  The first is removed
later by liveness because tmp3 is known to be dead.  This leaves
the setcond_i32 with an uninitialized input.

Revert the entire patch for 5.2, and a proper optimization across
the branch may be considered for the next development cycle.

Reported-by: qemu@igor2.repo.hu
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
tcg/optimize.c