mirror of git://gcc.gnu.org/git/gcc.git
re PR target/55659 ([SH] Build failure with ICE in dwarf2out_var_location, at dwarf2out.c:20748)
PR target/55659 Revert 2012-12-11 Jakub Jelinek <jakub@redhat.com> PR middle-end/43631 * var-tracking.c (emit_note_insn_var_location): If insn is followed by BARRIER, put note after the BARRIER. (next_non_note_insn_var_location): Skip over BARRIERs. (emit_notes_in_bb): If call is followed by BARRIER, put note after the BARRIER. 2012-12-06 Jakub Jelinek <jakub@redhat.com> PR middle-end/43631 * var-tracking.c (emit_note_insn_var_location, emit_notes_in_bb): Clear BLOCK_FOR_INSN on notes emitted in between basic blocks, don't adjust BB_END when inserting note after BB_END of some bb. From-SVN: r194442
This commit is contained in:
parent
57dab7925d
commit
c3583c4ab0
|
|
@ -1,3 +1,23 @@
|
||||||
|
2012-12-12 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR target/55659
|
||||||
|
Revert
|
||||||
|
2012-12-11 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR middle-end/43631
|
||||||
|
* var-tracking.c (emit_note_insn_var_location): If insn is followed
|
||||||
|
by BARRIER, put note after the BARRIER.
|
||||||
|
(next_non_note_insn_var_location): Skip over BARRIERs.
|
||||||
|
(emit_notes_in_bb): If call is followed by BARRIER, put note after
|
||||||
|
the BARRIER.
|
||||||
|
|
||||||
|
2012-12-06 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR middle-end/43631
|
||||||
|
* var-tracking.c (emit_note_insn_var_location, emit_notes_in_bb):
|
||||||
|
Clear BLOCK_FOR_INSN on notes emitted in between basic blocks,
|
||||||
|
don't adjust BB_END when inserting note after BB_END of some bb.
|
||||||
|
|
||||||
2012-12-12 Steven Bosscher <steven@gcc.gnu.org>
|
2012-12-12 Steven Bosscher <steven@gcc.gnu.org>
|
||||||
Jakub Jelinek <jakub@redhat.com>
|
Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8538,10 +8538,7 @@ emit_note_insn_var_location (void **varp, void *data)
|
||||||
|
|
||||||
if (where != EMIT_NOTE_BEFORE_INSN)
|
if (where != EMIT_NOTE_BEFORE_INSN)
|
||||||
{
|
{
|
||||||
rtx after = insn;
|
note = emit_note_after (NOTE_INSN_VAR_LOCATION, insn);
|
||||||
while (NEXT_INSN (after) && BARRIER_P (NEXT_INSN (after)))
|
|
||||||
after = NEXT_INSN (after);
|
|
||||||
note = emit_note_after (NOTE_INSN_VAR_LOCATION, after);
|
|
||||||
if (where == EMIT_NOTE_AFTER_CALL_INSN)
|
if (where == EMIT_NOTE_AFTER_CALL_INSN)
|
||||||
NOTE_DURING_CALL_P (note) = true;
|
NOTE_DURING_CALL_P (note) = true;
|
||||||
}
|
}
|
||||||
|
|
@ -8560,30 +8557,9 @@ emit_note_insn_var_location (void **varp, void *data)
|
||||||
|| NOTE_KIND (insn) == NOTE_INSN_CALL_ARG_LOCATION))
|
|| NOTE_KIND (insn) == NOTE_INSN_CALL_ARG_LOCATION))
|
||||||
note = emit_note_after (NOTE_INSN_VAR_LOCATION, insn);
|
note = emit_note_after (NOTE_INSN_VAR_LOCATION, insn);
|
||||||
else
|
else
|
||||||
{
|
|
||||||
note = emit_note_before (NOTE_INSN_VAR_LOCATION, insn);
|
note = emit_note_before (NOTE_INSN_VAR_LOCATION, insn);
|
||||||
/* If insn is BB_HEAD of some bb, make sure the note
|
|
||||||
doesn't have BLOCK_FOR_INSN set. The notes don't
|
|
||||||
extend the extents of a basic block, and e.g. notes emitted
|
|
||||||
for differences in between basic blocks should live in between
|
|
||||||
the basic blocks. */
|
|
||||||
if (BLOCK_FOR_INSN (note)
|
|
||||||
&& BB_HEAD (BLOCK_FOR_INSN (note)) == insn)
|
|
||||||
set_block_for_insn (note, NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
NOTE_VAR_LOCATION (note) = note_vl;
|
NOTE_VAR_LOCATION (note) = note_vl;
|
||||||
/* If insn is BB_END of some bb, make sure the note
|
|
||||||
doesn't have BLOCK_FOR_INSN set. The notes don't
|
|
||||||
extend the extents of a basic block, and e.g. a noreturn
|
|
||||||
call can still be followed by NOTE_INSN_CALL_ARG_LOCATION. */
|
|
||||||
if (BLOCK_FOR_INSN (note)
|
|
||||||
&& BB_END (BLOCK_FOR_INSN (note)) == note
|
|
||||||
&& PREV_INSN (note) == insn)
|
|
||||||
{
|
|
||||||
BB_END (BLOCK_FOR_INSN (note)) = insn;
|
|
||||||
set_block_for_insn (note, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
set_dv_changed (var->dv, false);
|
set_dv_changed (var->dv, false);
|
||||||
gcc_assert (var->in_changed_variables);
|
gcc_assert (var->in_changed_variables);
|
||||||
|
|
@ -8895,11 +8871,9 @@ next_non_note_insn_var_location (rtx insn)
|
||||||
while (insn)
|
while (insn)
|
||||||
{
|
{
|
||||||
insn = NEXT_INSN (insn);
|
insn = NEXT_INSN (insn);
|
||||||
if (insn == 0)
|
if (insn == 0
|
||||||
break;
|
|| !NOTE_P (insn)
|
||||||
if (BARRIER_P (insn))
|
|| NOTE_KIND (insn) != NOTE_INSN_VAR_LOCATION)
|
||||||
continue;
|
|
||||||
if (!NOTE_P (insn) || NOTE_KIND (insn) != NOTE_INSN_VAR_LOCATION)
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -8928,7 +8902,7 @@ emit_notes_in_bb (basic_block bb, dataflow_set *set)
|
||||||
dataflow_set_clear_at_call (set);
|
dataflow_set_clear_at_call (set);
|
||||||
emit_notes_for_changes (insn, EMIT_NOTE_AFTER_CALL_INSN, set->vars);
|
emit_notes_for_changes (insn, EMIT_NOTE_AFTER_CALL_INSN, set->vars);
|
||||||
{
|
{
|
||||||
rtx arguments = mo->u.loc, *p = &arguments, note, after;
|
rtx arguments = mo->u.loc, *p = &arguments, note;
|
||||||
while (*p)
|
while (*p)
|
||||||
{
|
{
|
||||||
XEXP (XEXP (*p, 0), 1)
|
XEXP (XEXP (*p, 0), 1)
|
||||||
|
|
@ -8952,21 +8926,8 @@ emit_notes_in_bb (basic_block bb, dataflow_set *set)
|
||||||
else
|
else
|
||||||
*p = XEXP (*p, 1);
|
*p = XEXP (*p, 1);
|
||||||
}
|
}
|
||||||
after = insn;
|
note = emit_note_after (NOTE_INSN_CALL_ARG_LOCATION, insn);
|
||||||
while (NEXT_INSN (after) && BARRIER_P (NEXT_INSN (after)))
|
|
||||||
after = NEXT_INSN (after);
|
|
||||||
note = emit_note_after (NOTE_INSN_CALL_ARG_LOCATION, after);
|
|
||||||
NOTE_VAR_LOCATION (note) = arguments;
|
NOTE_VAR_LOCATION (note) = arguments;
|
||||||
/* If insn is BB_END of some bb, make sure the note
|
|
||||||
doesn't have BLOCK_FOR_INSN set. The notes don't
|
|
||||||
extend the extents of a basic block, and e.g. a noreturn
|
|
||||||
call can still be followed by NOTE_INSN_CALL_ARG_LOCATION. */
|
|
||||||
if (BLOCK_FOR_INSN (note)
|
|
||||||
&& BB_END (BLOCK_FOR_INSN (note)) == note)
|
|
||||||
{
|
|
||||||
BB_END (BLOCK_FOR_INSN (note)) = insn;
|
|
||||||
set_block_for_insn (note, NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue