aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2015-04-07 15:01:07 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2015-04-07 15:01:07 +0000
commit218823d74ed3928ed6a53f357c5fa9a793d74f00 (patch)
tree8c7efaba76a58e97e8ad07567a1339e65d02b602
parente488c24ec0923d150df9bd41005aa34ce37245ff (diff)
downloadgcc-218823d74ed3928ed6a53f357c5fa9a793d74f00.zip
gcc-218823d74ed3928ed6a53f357c5fa9a793d74f00.tar.gz
gcc-218823d74ed3928ed6a53f357c5fa9a793d74f00.tar.bz2
re PR debug/65678 (internal compiler error: in gen_rtx_SUBREG, at emit-rtl.c:909)
2015-04-07 Vladimir Makarov <vmakarov@redhat.com> PR target/65678 * lra-remat.c (do_remat): Process input and non-input insn registers separately. From-SVN: r221901
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/lra-remat.c21
2 files changed, 18 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d4bf73a..9e9c7a9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2015-04-07 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR target/65678
+ * lra-remat.c (do_remat): Process input and non-input insn
+ registers separately.
+
2015-04-07 Jakub Jelinek <jakub@redhat.com>
PR debug/65678
diff --git a/gcc/lra-remat.c b/gcc/lra-remat.c
index 36ea792..a23cb5b 100644
--- a/gcc/lra-remat.c
+++ b/gcc/lra-remat.c
@@ -1234,22 +1234,25 @@ do_remat (void)
for (i = 0; i < nregs; i++)
CLEAR_HARD_REG_BIT (live_hard_regs, hard_regno + i);
}
- else if (reg->type != OP_IN
- && find_regno_note (insn, REG_UNUSED, reg->regno) == NULL)
+ /* Process also hard regs (e.g. CC register) which are part
+ of insn definition. */
+ for (reg = static_id->hard_regs; reg != NULL; reg = reg->next)
+ if (reg->type == OP_IN
+ && find_regno_note (insn, REG_DEAD, reg->regno) != NULL)
+ CLEAR_HARD_REG_BIT (live_hard_regs, reg->regno);
+ /* Inputs have been processed, now process outputs. */
+ for (reg = id->regs; reg != NULL; reg = reg->next)
+ if (reg->type != OP_IN
+ && find_regno_note (insn, REG_UNUSED, reg->regno) == NULL)
{
if ((hard_regno = get_hard_regs (reg, nregs)) < 0)
continue;
for (i = 0; i < nregs; i++)
SET_HARD_REG_BIT (live_hard_regs, hard_regno + i);
}
- /* Process also hard regs (e.g. CC register) which are part
- of insn definition. */
for (reg = static_id->hard_regs; reg != NULL; reg = reg->next)
- if (reg->type == OP_IN
- && find_regno_note (insn, REG_DEAD, reg->regno) != NULL)
- CLEAR_HARD_REG_BIT (live_hard_regs, reg->regno);
- else if (reg->type != OP_IN
- && find_regno_note (insn, REG_UNUSED, reg->regno) == NULL)
+ if (reg->type != OP_IN
+ && find_regno_note (insn, REG_UNUSED, reg->regno) == NULL)
SET_HARD_REG_BIT (live_hard_regs, reg->regno);
}
}