diff options
Diffstat (limited to 'gcc/cse.c')
-rw-r--r-- | gcc/cse.c | 14 |
1 files changed, 7 insertions, 7 deletions
@@ -4625,7 +4625,7 @@ cse_insn (rtx_insn *insn) for (i = 0; i < n_sets; i++) { bool repeat = false; - bool noop_insn = false; + bool mem_noop_insn = false; rtx src, dest; rtx src_folded; struct table_elt *elt = 0, *p; @@ -5324,17 +5324,17 @@ cse_insn (rtx_insn *insn) } /* Similarly, lots of targets don't allow no-op - (set (mem x) (mem x)) moves. Even (set (reg x) (reg x)) - might be impossible for certain registers (like CC registers). */ + (set (mem x) (mem x)) moves. */ else if (n_sets == 1 - && (MEM_P (trial) || REG_P (trial)) + && MEM_P (trial) + && MEM_P (dest) && rtx_equal_p (trial, dest) && !side_effects_p (dest) && (cfun->can_delete_dead_exceptions || insn_nothrow_p (insn))) { SET_SRC (sets[i].rtl) = trial; - noop_insn = true; + mem_noop_insn = true; break; } @@ -5562,8 +5562,8 @@ cse_insn (rtx_insn *insn) sets[i].rtl = 0; } - /* Similarly for no-op moves. */ - else if (noop_insn) + /* Similarly for no-op MEM moves. */ + else if (mem_noop_insn) { if (cfun->can_throw_non_call_exceptions && can_throw_internal (insn)) cse_cfg_altered = true; |