re PR bootstrap/51860 (s390 esa mode bootstrap comparison failure since transactional memory branch merge)

PR bootstrap/51860
	* config/s390/s390.c (s390_chunkify_start): Don't skip
	call insns followed by NOTE_INSN_CALL_ARG_LOCATION note.  Skip
	NOTE_INSN_VAR_LOCATION and NOTE_INSN_CALL_ARG_LOCATION notes.
	If insn is followed by NOTE_INSN_VAR_LOCATION or
	NOTE_INSN_CALL_ARG_LOCATION notes, insert jump after all those notes.
	Don't use location of note insns.

From-SVN: r183210
This commit is contained in:
Jakub Jelinek 2012-01-16 15:05:54 +01:00 committed by Jakub Jelinek
parent 90dda0e956
commit 00fbd5c8c7
2 changed files with 41 additions and 15 deletions

View File

@ -1,5 +1,13 @@
2012-01-16 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/51860
* config/s390/s390.c (s390_chunkify_start): Don't skip
call insns followed by NOTE_INSN_CALL_ARG_LOCATION note. Skip
NOTE_INSN_VAR_LOCATION and NOTE_INSN_CALL_ARG_LOCATION notes.
If insn is followed by NOTE_INSN_VAR_LOCATION or
NOTE_INSN_CALL_ARG_LOCATION notes, insert jump after all those notes.
Don't use location of note insns.
PR tree-optimization/51865
* tree-inline.c (tree_function_versioning): Call remap_decl
on DECL_RESULT whenever it has VOID_TYPE_P type.

View File

@ -1,6 +1,6 @@
/* Subroutines used for code generation on IBM S/390 and zSeries
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
Contributed by Hartmut Penner (hpenner@de.ibm.com) and
Ulrich Weigand (uweigand@de.ibm.com) and
Andreas Krebbel (Andreas.Krebbel@de.ibm.com).
@ -6608,15 +6608,6 @@ s390_chunkify_start (void)
pending_ltrel = pool_ref;
}
}
/* Make sure we do not split between a call and its
corresponding CALL_ARG_LOCATION note. */
if (CALL_P (insn))
{
rtx next = NEXT_INSN (insn);
if (next && NOTE_P (next)
&& NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION)
continue;
}
}
if (GET_CODE (insn) == JUMP_INSN || GET_CODE (insn) == CODE_LABEL)
@ -6627,8 +6618,18 @@ s390_chunkify_start (void)
gcc_assert (!pending_ltrel);
}
if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_SWITCH_TEXT_SECTIONS)
section_switch_p = true;
if (NOTE_P (insn))
switch (NOTE_KIND (insn))
{
case NOTE_INSN_SWITCH_TEXT_SECTIONS:
section_switch_p = true;
break;
case NOTE_INSN_VAR_LOCATION:
case NOTE_INSN_CALL_ARG_LOCATION:
continue;
default:
break;
}
if (!curr_pool
|| INSN_ADDRESSES_SIZE () <= (size_t) INSN_UID (insn)
@ -6674,7 +6675,7 @@ s390_chunkify_start (void)
|| curr_pool->size > S390_POOL_CHUNK_MAX
|| section_switch_p)
{
rtx label, jump, barrier;
rtx label, jump, barrier, next, prev;
if (!section_switch_p)
{
@ -6684,9 +6685,19 @@ s390_chunkify_start (void)
if (get_attr_length (insn) == 0)
continue;
/* Don't separate LTREL_BASE from the corresponding
LTREL_OFFSET load. */
LTREL_OFFSET load. */
if (pending_ltrel)
continue;
next = insn;
do
{
insn = next;
next = NEXT_INSN (insn);
}
while (next
&& NOTE_P (next)
&& (NOTE_KIND (next) == NOTE_INSN_VAR_LOCATION
|| NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION));
}
else
{
@ -6699,7 +6710,14 @@ s390_chunkify_start (void)
}
label = gen_label_rtx ();
jump = emit_jump_insn_after (gen_jump (label), insn);
prev = insn;
if (prev && NOTE_P (prev))
prev = prev_nonnote_insn (prev);
if (prev)
jump = emit_jump_insn_after_setloc (gen_jump (label), insn,
INSN_LOCATOR (prev));
else
jump = emit_jump_insn_after_noloc (gen_jump (label), insn);
barrier = emit_barrier_after (jump);
insn = emit_label_after (label, barrier);
JUMP_LABEL (jump) = label;