aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2012-08-27 16:25:12 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2012-08-27 16:25:12 +0000
commitd8c5157261ce99adf33da209c6ba73f41cb9419b (patch)
tree6b1b9ccf7b3549cc5b163c8dbf6bae26be2b32f2 /gcc
parentf3d25c6570bd19d17757fd8a592188aa7ff6ecb4 (diff)
downloadgcc-d8c5157261ce99adf33da209c6ba73f41cb9419b.zip
gcc-d8c5157261ce99adf33da209c6ba73f41cb9419b.tar.gz
gcc-d8c5157261ce99adf33da209c6ba73f41cb9419b.tar.bz2
mips.c (vr4130_align_insns): Don't simulate ghost instructions.
gcc/ * config/mips/mips.c (vr4130_align_insns): Don't simulate ghost instructions. Assert that the required instructions exist. From-SVN: r190716
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/mips/mips.c5
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8c1174e..82c7a35 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2012-08-27 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * config/mips/mips.c (vr4130_align_insns): Don't simulate
+ ghost instructions. Assert that the required instructions exist.
+
2012-08-26 Richard Sandiford <rdsandiford@googlemail.com>
* config/mips/mips.h (AVOID_CCMODE_COPIES): Update rationale for
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 64e98c3..b20e4ed 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -15145,7 +15145,8 @@ vr4130_align_insns (void)
the fly to avoid a separate instruction walk. */
vr4130_avoid_branch_rt_conflict (insn);
- if (USEFUL_INSN_P (insn))
+ length = get_attr_length (insn);
+ if (length > 0 && USEFUL_INSN_P (insn))
FOR_EACH_SUBINSN (subinsn, insn)
{
mips_sim_wait_insn (&state, subinsn);
@@ -15180,6 +15181,7 @@ vr4130_align_insns (void)
issuing at the same time as the branch. We therefore
insert a nop before the branch in order to align its
delay slot. */
+ gcc_assert (last2);
emit_insn_after (gen_nop (), last2);
aligned_p = false;
}
@@ -15188,6 +15190,7 @@ vr4130_align_insns (void)
/* SUBINSN is the delay slot of INSN, but INSN is
currently unaligned. Insert a nop between
LAST and INSN to align it. */
+ gcc_assert (last);
emit_insn_after (gen_nop (), last);
aligned_p = true;
}