aboutsummaryrefslogtreecommitdiff
path: root/gcc/cse.c
diff options
context:
space:
mode:
authorKugan Vivekanandarajah <kuganv@linaro.org>2015-07-24 01:38:19 +0000
committerKugan Vivekanandarajah <kugan@gcc.gnu.org>2015-07-24 01:38:19 +0000
commitfa24123b0fbb8baeca2deb7c79b62c58f5c1fe23 (patch)
tree8ab460a664f3a41e25cc0d2663e7634a41029e57 /gcc/cse.c
parent46e82d43f1868a4dfcc3795bedd2f9e7c1814ad0 (diff)
downloadgcc-fa24123b0fbb8baeca2deb7c79b62c58f5c1fe23.zip
gcc-fa24123b0fbb8baeca2deb7c79b62c58f5c1fe23.tar.gz
gcc-fa24123b0fbb8baeca2deb7c79b62c58f5c1fe23.tar.bz2
cse.c (cse_insn): Fix missing check for STRICT_LOW_PART and minor clean up.
gcc/ChangeLog: 2015-07-23 Kugan Vivekanandarajah <kuganv@linaro.org> * cse.c (cse_insn): Fix missing check for STRICT_LOW_PART and minor clean up. From-SVN: r226134
Diffstat (limited to 'gcc/cse.c')
-rw-r--r--gcc/cse.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/gcc/cse.c b/gcc/cse.c
index 1c14d83..96adf18 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -4529,10 +4529,10 @@ cse_insn (rtx_insn *insn)
this case, and if it isn't set, then there will be no equivalence
for the destination. */
if (n_sets == 1 && REG_NOTES (insn) != 0
- && (tem = find_reg_note (insn, REG_EQUAL, NULL_RTX)) != 0)
+ && (tem = find_reg_note (insn, REG_EQUAL, NULL_RTX)) != 0
+ && (! rtx_equal_p (XEXP (tem, 0), SET_SRC (sets[0].rtl))))
{
- if ((! rtx_equal_p (XEXP (tem, 0), SET_SRC (sets[0].rtl)))
- || GET_CODE (SET_DEST (sets[0].rtl)) == STRICT_LOW_PART)
+ if (GET_CODE (SET_DEST (sets[0].rtl)) == STRICT_LOW_PART)
src_eqv = copy_rtx (XEXP (tem, 0));
/* If DEST is of the form ZERO_EXTACT, as in:
@@ -4544,14 +4544,14 @@ cse_insn (rtx_insn *insn)
point. Note that this is different from SRC_EQV. We can however
calculate SRC_EQV with the position and width of ZERO_EXTRACT. */
else if (GET_CODE (SET_DEST (sets[0].rtl)) == ZERO_EXTRACT
- && CONST_INT_P (src_eqv)
+ && CONST_INT_P (XEXP (tem, 0))
&& CONST_INT_P (XEXP (SET_DEST (sets[0].rtl), 1))
&& CONST_INT_P (XEXP (SET_DEST (sets[0].rtl), 2)))
{
rtx dest_reg = XEXP (SET_DEST (sets[0].rtl), 0);
rtx width = XEXP (SET_DEST (sets[0].rtl), 1);
rtx pos = XEXP (SET_DEST (sets[0].rtl), 2);
- HOST_WIDE_INT val = INTVAL (src_eqv);
+ HOST_WIDE_INT val = INTVAL (XEXP (tem, 0));
HOST_WIDE_INT mask;
unsigned int shift;
if (BITS_BIG_ENDIAN)