From: Paulo Matos Date: Sat, 30 Nov 2013 11:13:07 +0000 (+0000) Subject: combine.c (reg_nonzero_bits_for_combine): Apply mask transformation as applied to... X-Git-Tag: releases/gcc-4.9.0~2351 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=67aca9dfae0e68af581a7e43332d49a9fdf498c5;p=thirdparty%2Fgcc.git combine.c (reg_nonzero_bits_for_combine): Apply mask transformation as applied to nonzero_sign_valid when... * combine.c (reg_nonzero_bits_for_combine): Apply mask transformation as applied to nonzero_sign_valid when last_set_mode has less precision than mode. Co-Authored-By: Eric Botcazou From-SVN: r205550 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3e117263db5e..ca7b3e85641e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2013-11-30 Paulo Matos + Eric Botcazou + + * combine.c (reg_nonzero_bits_for_combine): Apply mask transformation + as applied to nonzero_sign_valid when last_set_mode has less precision + than mode. + 2013-11-30 Tobias Burnus PR sanitizer/59275 diff --git a/gcc/combine.c b/gcc/combine.c index d685a7f6a660..25cf273f8080 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -9472,7 +9472,13 @@ reg_nonzero_bits_for_combine (const_rtx x, enum machine_mode mode, (DF_LR_IN (ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb), REGNO (x))))) { - *nonzero &= rsp->last_set_nonzero_bits; + unsigned HOST_WIDE_INT mask = rsp->last_set_nonzero_bits; + + if (GET_MODE_PRECISION (rsp->last_set_mode) < GET_MODE_PRECISION (mode)) + /* We don't know anything about the upper bits. */ + mask |= GET_MODE_MASK (mode) ^ GET_MODE_MASK (rsp->last_set_mode); + + *nonzero &= mask; return NULL; } @@ -9505,6 +9511,7 @@ reg_nonzero_bits_for_combine (const_rtx x, enum machine_mode mode, if (GET_MODE_PRECISION (GET_MODE (x)) < GET_MODE_PRECISION (mode)) /* We don't know anything about the upper bits. */ mask |= GET_MODE_MASK (mode) ^ GET_MODE_MASK (GET_MODE (x)); + *nonzero &= mask; }