diff options
author | Bernd Edlinger <bernd.edlinger@hotmail.de> | 2019-09-13 17:22:04 +0000 |
---|---|---|
committer | Bernd Edlinger <edlinger@gcc.gnu.org> | 2019-09-13 17:22:04 +0000 |
commit | 237413747601e3f11c22277991b08c84adc302de (patch) | |
tree | 17b3aee9ca71ac6401c419826374ce7febd9a069 /gcc/cse.c | |
parent | 57cccc860e501be56096a2863ae571175cb87960 (diff) | |
download | gcc-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.c | 23 |
1 files changed, 6 insertions, 17 deletions
@@ -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)) |