diff options
author | Jeff Law <law@gcc.gnu.org> | 1997-02-04 16:36:26 -0700 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1997-02-04 16:36:26 -0700 |
commit | ac684a206cf3b8708d77398bebe76fb63308e88c (patch) | |
tree | 44dce3a6399d68d0be62b88f643dfaf434e780f3 /gcc/flow.c | |
parent | f19911e44a7479ec849f93908521efb689e7a700 (diff) | |
download | gcc-ac684a206cf3b8708d77398bebe76fb63308e88c.zip gcc-ac684a206cf3b8708d77398bebe76fb63308e88c.tar.gz gcc-ac684a206cf3b8708d77398bebe76fb63308e88c.tar.bz2 |
flow.c (life_analysis): Delete obvious no-op moves which use SUBREGs.
* flow.c (life_analysis): Delete obvious no-op moves
which use SUBREGs.
From-SVN: r13607
Diffstat (limited to 'gcc/flow.c')
-rw-r--r-- | gcc/flow.c | 17 |
1 files changed, 17 insertions, 0 deletions
@@ -996,6 +996,23 @@ life_analysis (f, nregs) NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; NOTE_SOURCE_FILE (insn) = 0; } + /* Delete (in effect) any obvious no-op moves. */ + else if (GET_CODE (PATTERN (insn)) == SET + && GET_CODE (SET_DEST (PATTERN (insn))) == SUBREG + && GET_CODE (SUBREG_REG (SET_DEST (PATTERN (insn)))) == REG + && GET_CODE (SET_SRC (PATTERN (insn))) == SUBREG + && GET_CODE (SUBREG_REG (SET_SRC (PATTERN (insn)))) == REG + && REGNO (SUBREG_REG (SET_DEST (PATTERN (insn)))) == + REGNO (SUBREG_REG (SET_SRC (PATTERN (insn)))) + && SUBREG_WORD (SET_DEST (PATTERN (insn))) == + SUBREG_WORD (SET_SRC (PATTERN (insn))) + /* Insns carrying these notes are useful later on. */ + && ! find_reg_note (insn, REG_EQUAL, NULL_RTX)) + { + PUT_CODE (insn, NOTE); + NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; + NOTE_SOURCE_FILE (insn) = 0; + } else if (GET_CODE (PATTERN (insn)) == PARALLEL) { /* If nothing but SETs of registers to themselves, |