aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteven Bosscher <steven@gcc.gnu.org>2013-06-19 12:06:30 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2013-06-19 12:06:30 +0000
commit5fdc1e5d8ae28adbb39e9e3ef0a05385a355de12 (patch)
tree52e8c02ed9240daac54892c4205d83adebbfef89 /gcc
parente952afba8fccca783802218ecaa3518f8dfc8aaa (diff)
downloadgcc-5fdc1e5d8ae28adbb39e9e3ef0a05385a355de12.zip
gcc-5fdc1e5d8ae28adbb39e9e3ef0a05385a355de12.tar.gz
gcc-5fdc1e5d8ae28adbb39e9e3ef0a05385a355de12.tar.bz2
re PR bootstrap/57609 (S/390 ESA mode bootstrap failure since r197266)
2013-06-19 Steven Bosscher <steven@gcc.gnu.org> PR target/57609 * config/s390/s390.c (s390_chunkify_start): Replace next_real_insn with NEXT_INSN. Use tablejump_p to check for jump table data insns. From-SVN: r200196
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/s390/s390.c38
2 files changed, 22 insertions, 23 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 53a6cde..08f40a3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2013-06-19 Steven Bosscher <steven@gcc.gnu.org>
+
+ PR target/57609
+ * config/s390/s390.c (s390_chunkify_start): Replace next_real_insn
+ with NEXT_INSN. Use tablejump_p to check for jump table data
+ insns.
+
2013-06-19 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/56544
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 358345a..06d1228 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -7023,7 +7023,7 @@ s390_chunkify_start (void)
if (LABEL_P (insn)
&& (LABEL_PRESERVE_P (insn) || LABEL_NAME (insn)))
{
- rtx vec_insn = next_real_insn (insn);
+ rtx vec_insn = NEXT_INSN (insn);
if (! vec_insn || ! JUMP_TABLE_DATA_P (vec_insn))
bitmap_set_bit (far_labels, CODE_LABEL_NUMBER (insn));
}
@@ -7033,6 +7033,8 @@ s390_chunkify_start (void)
else if (JUMP_P (insn))
{
rtx pat = PATTERN (insn);
+ rtx table;
+
if (GET_CODE (pat) == PARALLEL && XVECLEN (pat, 0) > 2)
pat = XVECEXP (pat, 0, 0);
@@ -7046,28 +7048,18 @@ s390_chunkify_start (void)
bitmap_set_bit (far_labels, CODE_LABEL_NUMBER (label));
}
}
- else if (GET_CODE (pat) == PARALLEL
- && XVECLEN (pat, 0) == 2
- && GET_CODE (XVECEXP (pat, 0, 0)) == SET
- && GET_CODE (XVECEXP (pat, 0, 1)) == USE
- && GET_CODE (XEXP (XVECEXP (pat, 0, 1), 0)) == LABEL_REF)
- {
- /* Find the jump table used by this casesi jump. */
- rtx vec_label = XEXP (XEXP (XVECEXP (pat, 0, 1), 0), 0);
- rtx vec_insn = next_real_insn (vec_label);
- if (vec_insn && JUMP_TABLE_DATA_P (vec_insn))
- {
- rtx vec_pat = PATTERN (vec_insn);
- int i, diff_p = GET_CODE (vec_pat) == ADDR_DIFF_VEC;
-
- for (i = 0; i < XVECLEN (vec_pat, diff_p); i++)
- {
- rtx label = XEXP (XVECEXP (vec_pat, diff_p, i), 0);
-
- if (s390_find_pool (pool_list, label)
- != s390_find_pool (pool_list, insn))
- bitmap_set_bit (far_labels, CODE_LABEL_NUMBER (label));
- }
+ else if (tablejump_p (insn, NULL, &table))
+ {
+ rtx vec_pat = PATTERN (table);
+ int i, diff_p = GET_CODE (vec_pat) == ADDR_DIFF_VEC;
+
+ for (i = 0; i < XVECLEN (vec_pat, diff_p); i++)
+ {
+ rtx label = XEXP (XVECEXP (vec_pat, diff_p, i), 0);
+
+ if (s390_find_pool (pool_list, label)
+ != s390_find_pool (pool_list, insn))
+ bitmap_set_bit (far_labels, CODE_LABEL_NUMBER (label));
}
}
}