diff options
author | Segher Boessenkool <segher@kernel.crashing.org> | 2017-02-24 23:42:49 +0100 |
---|---|---|
committer | Segher Boessenkool <segher@gcc.gnu.org> | 2017-02-24 23:42:49 +0100 |
commit | 91f66e78cc141da77ff9e0e3c8519e1af3f26c07 (patch) | |
tree | ebf775ff7f9b69d1c96846f97fb645197aa7afea /gcc/config/sh/sh.md | |
parent | 8faa81184f856447084a9ee41a63fc4be6bca572 (diff) | |
download | gcc-91f66e78cc141da77ff9e0e3c8519e1af3f26c07.zip gcc-91f66e78cc141da77ff9e0e3c8519e1af3f26c07.tar.gz gcc-91f66e78cc141da77ff9e0e3c8519e1af3f26c07.tar.bz2 |
sh: Fixes for RTL checking
* config/sh/sh.md (tstsi_t): If operands[0] is a SUBREG instead of
a REG, look at the REG it is a SUBREG of.
(splitter for cmpeqsi_t): Ditto.
From-SVN: r245727
Diffstat (limited to 'gcc/config/sh/sh.md')
-rw-r--r-- | gcc/config/sh/sh.md | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md index 2645fca..e19e977 100644 --- a/gcc/config/sh/sh.md +++ b/gcc/config/sh/sh.md @@ -561,8 +561,12 @@ gcc_assert (CONST_INT_P (operands[1])); HOST_WIDE_INT op1val = INTVAL (operands[1]); + rtx reg = operands[0]; + if (SUBREG_P (reg)) + reg = SUBREG_REG (reg); + gcc_assert (REG_P (reg)); bool op0_dead_after_this = - sh_reg_dead_or_unused_after_insn (curr_insn, REGNO (operands[0])); + sh_reg_dead_or_unused_after_insn (curr_insn, REGNO (reg)); if (optimize) { @@ -834,7 +838,11 @@ /* If the tested reg is not dead after this insn, it's probably used by something else after the comparison. It's probably better to leave it as it is. */ - if (find_regno_note (curr_insn, REG_DEAD, REGNO (operands[0])) == NULL_RTX) + rtx reg = operands[0]; + if (SUBREG_P (reg)) + reg = SUBREG_REG (reg); + gcc_assert (REG_P (reg)); + if (find_regno_note (curr_insn, REG_DEAD, REGNO (reg)) != NULL_RTX) FAIL; /* FIXME: Maybe also search the predecessor basic blocks to catch |