Skip to content
  • Richard Henderson's avatar
    c56caea3
    tcg: Revert "tcg/optimize: Flush data at labels not TCG_OPF_BB_END" · c56caea3
    Richard Henderson authored
    
    
    This reverts commit cd0372c5.
    
    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: default avatar <qemu@igor2.repo.hu>
    Reviewed-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    Signed-off-by: default avatarRichard Henderson <richard.henderson@linaro.org>
    c56caea3
    tcg: Revert "tcg/optimize: Flush data at labels not TCG_OPF_BB_END"
    Richard Henderson authored
    
    
    This reverts commit cd0372c5.
    
    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: default avatar <qemu@igor2.repo.hu>
    Reviewed-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    Signed-off-by: default avatarRichard Henderson <richard.henderson@linaro.org>
Loading