aboutsummaryrefslogtreecommitdiff
path: root/gcc/cse.c
diff options
context:
space:
mode:
authorBernd Edlinger <bernd.edlinger@hotmail.de>2019-09-13 17:22:04 +0000
committerBernd Edlinger <edlinger@gcc.gnu.org>2019-09-13 17:22:04 +0000
commit237413747601e3f11c22277991b08c84adc302de (patch)
tree17b3aee9ca71ac6401c419826374ce7febd9a069 /gcc/cse.c
parent57cccc860e501be56096a2863ae571175cb87960 (diff)
downloadgcc-237413747601e3f11c22277991b08c84adc302de.zip
gcc-237413747601e3f11c22277991b08c84adc302de.tar.gz
gcc-237413747601e3f11c22277991b08c84adc302de.tar.bz2
re PR middle-end/91708 ([ARM] Bootstrap fails in gen_movsi, at config/arm/arm.md:5258)
2019-09-13 Bernd Edlinger <bernd.edlinger@hotmail.de> PR middle-end/91708 * cse.c (cse_insn): Do not replace anything with a MEM. From-SVN: r275701
Diffstat (limited to 'gcc/cse.c')
-rw-r--r--gcc/cse.c23
1 files changed, 6 insertions, 17 deletions
diff --git a/gcc/cse.c b/gcc/cse.c
index 098671c..32b6790 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -5238,23 +5238,6 @@ cse_insn (rtx_insn *insn)
src_elt_cost = MAX_COST;
}
- /* Avoid creation of overlapping memory moves. */
- if (MEM_P (trial) && MEM_P (dest) && !rtx_equal_p (trial, dest))
- {
- rtx src, dest;
-
- /* BLKmode moves are not handled by cse anyway. */
- if (GET_MODE (trial) == BLKmode)
- break;
-
- src = canon_rtx (trial);
- dest = canon_rtx (SET_DEST (sets[i].rtl));
-
- if (!MEM_P (src) || !MEM_P (dest)
- || !nonoverlapping_memrefs_p (src, dest, false))
- break;
- }
-
/* Try to optimize
(set (reg:M N) (const_int A))
(set (reg:M2 O) (const_int B))
@@ -5385,6 +5368,12 @@ cse_insn (rtx_insn *insn)
/* Do nothing for this case. */
;
+ /* Do not replace anything with a MEM, except the replacement
+ is a no-op. This allows this loop to terminate. */
+ else if (MEM_P (trial) && !rtx_equal_p (trial, SET_SRC(sets[i].rtl)))
+ /* Do nothing for this case. */
+ ;
+
/* Look for a substitution that makes a valid insn. */
else if (validate_unshare_change (insn, &SET_SRC (sets[i].rtl),
trial, 0))