aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2013-04-03 12:14:03 +0000
committerUlrich Weigand <uweigand@gcc.gnu.org>2013-04-03 12:14:03 +0000
commitb3d45ff04060a94039d12d6ca01938f190e7287f (patch)
tree0a2add39d133549d158800c12e52551e198bf10e /gcc
parenta5cde067925a0f47195b39cb595be5ef50a977c9 (diff)
downloadgcc-b3d45ff04060a94039d12d6ca01938f190e7287f.zip
gcc-b3d45ff04060a94039d12d6ca01938f190e7287f.tar.gz
gcc-b3d45ff04060a94039d12d6ca01938f190e7287f.tar.bz2
* config/spu/spu.c (emit_nop_for_insn): Handle JUMP_TABLE_DATA.
From-SVN: r197406
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/spu/spu.c13
2 files changed, 15 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0bf68ccb..a9120a4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2013-04-03 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ * config/spu/spu.c (emit_nop_for_insn): Handle JUMP_TABLE_DATA.
+
2013-04-03 Bin Cheng <bin.cheng@arm.com>
* rtl.h (AUTO_INC_DEC): Fix typo of HAVE_POST_MODIFY_DISP.
diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c
index 31d31f9..6cbd3f8 100644
--- a/gcc/config/spu/spu.c
+++ b/gcc/config/spu/spu.c
@@ -1978,13 +1978,22 @@ static struct spu_bb_info *spu_bb_info;
/* Emit a nop for INSN such that the two will dual issue. This assumes
INSN is 8-byte aligned. When INSN is inline asm we emit an lnop.
We check for TImode to handle a MULTI1 insn which has dual issued its
- first instruction. get_pipe returns -1 for MULTI0, inline asm, or
- ADDR_VEC insns. */
+ first instruction. get_pipe returns -1 for MULTI0 or inline asm. */
static void
emit_nop_for_insn (rtx insn)
{
int p;
rtx new_insn;
+
+ /* We need to handle JUMP_TABLE_DATA separately. */
+ if (JUMP_TABLE_DATA_P (insn))
+ {
+ new_insn = emit_insn_after (gen_lnop(), insn);
+ recog_memoized (new_insn);
+ INSN_LOCATION (new_insn) = UNKNOWN_LOCATION;
+ return;
+ }
+
p = get_pipe (insn);
if ((CALL_P (insn) || JUMP_P (insn)) && SCHED_ON_EVEN_P (insn))
new_insn = emit_insn_after (gen_lnop (), insn);