aboutsummaryrefslogtreecommitdiff
path: root/gcc/cse.c
diff options
context:
space:
mode:
authorKugan Vivekanandarajah <kuganv@linaro.org>2015-08-05 01:08:49 +0000
committerKugan Vivekanandarajah <kugan@gcc.gnu.org>2015-08-05 01:08:49 +0000
commit1e928e07b22dd721d06501fb85a31360b55d3b8b (patch)
tree62d24ce5582e5f92c90952397aea1b1914716d83 /gcc/cse.c
parent4856562a7036626de8408deb852779eb3ea7a197 (diff)
downloadgcc-1e928e07b22dd721d06501fb85a31360b55d3b8b.zip
gcc-1e928e07b22dd721d06501fb85a31360b55d3b8b.tar.gz
gcc-1e928e07b22dd721d06501fb85a31360b55d3b8b.tar.bz2
cse.c (cse_insn): Restoring old behaviour for src_eqv when dest and value in the REG_EQUAL are...
gcc/ChangeLog: 2015-08-05 Kugan Vivekanandarajah <kuganv@linaro.org> * cse.c (cse_insn): Restoring old behaviour for src_eqv when dest and value in the REG_EQUAL are same and dest is STRICT_LOW_PART. From-SVN: r226606
Diffstat (limited to 'gcc/cse.c')
-rw-r--r--gcc/cse.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/gcc/cse.c b/gcc/cse.c
index 88c82fc..ef37579 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -4528,12 +4528,13 @@ 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
- && (! rtx_equal_p (XEXP (tem, 0), SET_SRC (sets[0].rtl))))
+ && (tem = find_reg_note (insn, REG_EQUAL, NULL_RTX)) != 0)
{
- if (GET_CODE (SET_DEST (sets[0].rtl)) == STRICT_LOW_PART)
- src_eqv = copy_rtx (XEXP (tem, 0));
+ if (GET_CODE (SET_DEST (sets[0].rtl)) != ZERO_EXTRACT
+ && (! rtx_equal_p (XEXP (tem, 0), SET_SRC (sets[0].rtl))
+ || 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:
(set (zero_extract:SI (reg:SI 119)
(const_int 16 [0x10])