From 237413747601e3f11c22277991b08c84adc302de Mon Sep 17 00:00:00 2001 From: Bernd Edlinger Date: Fri, 13 Sep 2019 17:22:04 +0000 Subject: [PATCH] re PR middle-end/91708 ([ARM] Bootstrap fails in gen_movsi, at config/arm/arm.md:5258) 2019-09-13 Bernd Edlinger PR middle-end/91708 * cse.c (cse_insn): Do not replace anything with a MEM. From-SVN: r275701 --- gcc/ChangeLog | 6 ++++++ gcc/cse.c | 23 ++++++----------------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 57a6a67e040..9bfc0e460a3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-09-13 Bernd Edlinger + + PR middle-end/91708 + * cse.c (cse_insn): Do not replace anything with a + MEM. + 2019-09-13 Ian Lance Taylor * doc/invoke.texi (Optimize Options): Fix typo. diff --git a/gcc/cse.c b/gcc/cse.c index 098671c035d..32b67902451 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)) -- 2.30.2