Commit 5fdc1e5d by Steven Bosscher Committed by Andreas Krebbel

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
parent e952afba
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> 2013-06-19 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/56544 PR c++/56544
......
...@@ -7023,7 +7023,7 @@ s390_chunkify_start (void) ...@@ -7023,7 +7023,7 @@ s390_chunkify_start (void)
if (LABEL_P (insn) if (LABEL_P (insn)
&& (LABEL_PRESERVE_P (insn) || LABEL_NAME (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)) if (! vec_insn || ! JUMP_TABLE_DATA_P (vec_insn))
bitmap_set_bit (far_labels, CODE_LABEL_NUMBER (insn)); bitmap_set_bit (far_labels, CODE_LABEL_NUMBER (insn));
} }
...@@ -7033,6 +7033,8 @@ s390_chunkify_start (void) ...@@ -7033,6 +7033,8 @@ s390_chunkify_start (void)
else if (JUMP_P (insn)) else if (JUMP_P (insn))
{ {
rtx pat = PATTERN (insn); rtx pat = PATTERN (insn);
rtx table;
if (GET_CODE (pat) == PARALLEL && XVECLEN (pat, 0) > 2) if (GET_CODE (pat) == PARALLEL && XVECLEN (pat, 0) > 2)
pat = XVECEXP (pat, 0, 0); pat = XVECEXP (pat, 0, 0);
...@@ -7046,28 +7048,18 @@ s390_chunkify_start (void) ...@@ -7046,28 +7048,18 @@ s390_chunkify_start (void)
bitmap_set_bit (far_labels, CODE_LABEL_NUMBER (label)); bitmap_set_bit (far_labels, CODE_LABEL_NUMBER (label));
} }
} }
else if (GET_CODE (pat) == PARALLEL else if (tablejump_p (insn, NULL, &table))
&& XVECLEN (pat, 0) == 2 {
&& GET_CODE (XVECEXP (pat, 0, 0)) == SET rtx vec_pat = PATTERN (table);
&& GET_CODE (XVECEXP (pat, 0, 1)) == USE int i, diff_p = GET_CODE (vec_pat) == ADDR_DIFF_VEC;
&& GET_CODE (XEXP (XVECEXP (pat, 0, 1), 0)) == LABEL_REF)
{ for (i = 0; i < XVECLEN (vec_pat, diff_p); i++)
/* Find the jump table used by this casesi jump. */ {
rtx vec_label = XEXP (XEXP (XVECEXP (pat, 0, 1), 0), 0); rtx label = XEXP (XVECEXP (vec_pat, diff_p, i), 0);
rtx vec_insn = next_real_insn (vec_label);
if (vec_insn && JUMP_TABLE_DATA_P (vec_insn)) if (s390_find_pool (pool_list, label)
{ != s390_find_pool (pool_list, insn))
rtx vec_pat = PATTERN (vec_insn); bitmap_set_bit (far_labels, CODE_LABEL_NUMBER (label));
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));
}
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment