diff options
author | Chenghua Xu <paul.hua.gm@gmail.com> | 2019-05-14 01:42:59 +0000 |
---|---|---|
committer | Chenghua Xu <paulhua@gcc.gnu.org> | 2019-05-14 01:42:59 +0000 |
commit | 4dbf3a15f1b6afa0100c1b026ba13450677931c9 (patch) | |
tree | 64a03a5da9de3572124abc3145f9a94a6c8bf0c0 | |
parent | 98aaa1a633cf3a79fa281a383c12fc45b313e824 (diff) | |
download | gcc-4dbf3a15f1b6afa0100c1b026ba13450677931c9.zip gcc-4dbf3a15f1b6afa0100c1b026ba13450677931c9.tar.gz gcc-4dbf3a15f1b6afa0100c1b026ba13450677931c9.tar.bz2 |
[MIPS] Skip forward src into next insn when the SRC reg is dead.
PR target/90357
gcc/
* config/mips/mips.c (mips_split_move): Skip forward SRC into
next insn when the SRC reg is dead.
From-SVN: r271146
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/mips/mips.c | 13 |
2 files changed, 18 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0985651..db8f647 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-05-14 Chenghua Xu <paul.hua.gm@gmail.com> + + PR target/90357 + * config/mips/mips.c (mips_split_move): Skip forward SRC into + next insn when the SRC reg is dead. + 2019-05-14 Bin Cheng <bin.cheng@linux.alibaba.com> * gimple-ssa-strength-reduction.c (lookup_cand): Adjust index by 1. diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 1de33b2..89fc073 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -4849,6 +4849,7 @@ mips_split_move (rtx dest, rtx src, enum mips_split_type split_type, rtx insn_) can forward SRC for DEST. This is most useful if the next insn is a simple store. */ rtx_insn *insn = (rtx_insn *)insn_; + struct mips_address_info addr; if (insn) { rtx_insn *next = next_nonnote_nondebug_insn_bb (insn); @@ -4856,7 +4857,17 @@ mips_split_move (rtx dest, rtx src, enum mips_split_type split_type, rtx insn_) { rtx set = single_set (next); if (set && SET_SRC (set) == dest) - validate_change (next, &SET_SRC (set), src, false); + { + if (MEM_P (src)) + { + rtx tmp = XEXP (src, 0); + mips_classify_address (&addr, tmp, GET_MODE (tmp), true); + if (REGNO (addr.reg) != REGNO (dest)) + validate_change (next, &SET_SRC (set), src, false); + } + else + validate_change (next, &SET_SRC (set), src, false); + } } } } |