re PR target/55659 ([SH] Build failure with ICE in dwarf2out_var_location, at dwarf2o...
authorJakub Jelinek <jakub@redhat.com>
Wed, 12 Dec 2012 09:56:22 +0000 (10:56 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 12 Dec 2012 09:56:22 +0000 (10:56 +0100)
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

gcc/ChangeLog
gcc/var-tracking.c

index a513fa9..334a3ca 100644 (file)
@@ -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>
            Jakub Jelinek  <jakub@redhat.com>
 
index 98ef1d4..f5ba115 100644 (file)
@@ -8538,10 +8538,7 @@ emit_note_insn_var_location (void **varp, void *data)
 
   if (where != EMIT_NOTE_BEFORE_INSN)
     {
-      rtx after = insn;
-      while (NEXT_INSN (after) && BARRIER_P (NEXT_INSN (after)))
-       after = NEXT_INSN (after);
-      note = emit_note_after (NOTE_INSN_VAR_LOCATION, after);
+      note = emit_note_after (NOTE_INSN_VAR_LOCATION, insn);
       if (where == EMIT_NOTE_AFTER_CALL_INSN)
        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 = emit_note_after (NOTE_INSN_VAR_LOCATION, insn);
       else
-       {
-         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 = emit_note_before (NOTE_INSN_VAR_LOCATION, insn);
     }
   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);
   gcc_assert (var->in_changed_variables);
@@ -8895,11 +8871,9 @@ next_non_note_insn_var_location (rtx insn)
   while (insn)
     {
       insn = NEXT_INSN (insn);
-      if (insn == 0)
-       break;
-      if (BARRIER_P (insn))
-       continue;
-      if (!NOTE_P (insn) || NOTE_KIND (insn) != NOTE_INSN_VAR_LOCATION)
+      if (insn == 0
+         || !NOTE_P (insn)
+         || NOTE_KIND (insn) != NOTE_INSN_VAR_LOCATION)
        break;
     }
 
@@ -8928,7 +8902,7 @@ emit_notes_in_bb (basic_block bb, dataflow_set *set)
            dataflow_set_clear_at_call (set);
            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)
                {
                  XEXP (XEXP (*p, 0), 1)
@@ -8952,21 +8926,8 @@ emit_notes_in_bb (basic_block bb, dataflow_set *set)
                  else
                    *p = XEXP (*p, 1);
                }
-             after = 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 = emit_note_after (NOTE_INSN_CALL_ARG_LOCATION, insn);
              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;