]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR debug/52727 (internal compiler error at dwarf2cfi.c2:685)
authorRichard Henderson <rth@redhat.com>
Wed, 5 Feb 2014 18:42:19 +0000 (10:42 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 5 Feb 2014 18:42:19 +0000 (10:42 -0800)
PR debug/52727

        * combine-stack-adj.c: Revert r206943.
        * sched-int.h (struct deps_desc): Add last_args_size.
        * sched-deps.c (init_deps): Initialize it.
        (sched_analyze_insn): Add OUTPUT dependencies between insns that
        contain REG_ARGS_SIZE notes.

From-SVN: r207518

gcc/ChangeLog
gcc/combine-stack-adj.c
gcc/sched-deps.c
gcc/sched-int.h

index 9f3902de34f97d099d35611eb200080876072d92..c3bdd4d5a0594d425ec5116362a8fd3b50a7ca3c 100644 (file)
@@ -1,3 +1,12 @@
+2014-02-05  Richard Henderson <rth@redhat.com>
+
+       PR debug/52727
+       * combine-stack-adj.c: Revert r206943.
+       * sched-int.h (struct deps_desc): Add last_args_size.
+       * sched-deps.c (init_deps): Initialize it.
+       (sched_analyze_insn): Add OUTPUT dependencies between insns that
+       contain REG_ARGS_SIZE notes.
+
 2014-02-05  Jan Hubicka  <hubicka@ucw.cz>
 
        * lto-cgraph.c (asm_nodes_output): Make global.
index c591c604b8a8e0f95e9c732cde73cf7a71591985..69fd5ea77e3aae1abdfa53d8fcacf95b869d48bd 100644 (file)
@@ -567,7 +567,6 @@ combine_stack_adjustments_for_block (basic_block bb)
              && try_apply_stack_adjustment (insn, reflist, 0,
                                             -last_sp_adjust))
            {
-             rtx note;
              if (last2_sp_set)
                maybe_move_args_size_note (last2_sp_set, last_sp_set, false);
              else
@@ -577,11 +576,6 @@ combine_stack_adjustments_for_block (basic_block bb)
              reflist = NULL;
              last_sp_set = NULL_RTX;
              last_sp_adjust = 0;
-             /* We no longer adjust stack size.  Whoever adjusted it earlier
-                hopefully got the note right.  */
-             note = find_reg_note (insn, REG_ARGS_SIZE, NULL_RTX);
-             if (note)
-               remove_note (insn, note);
              continue;
            }
        }
index 7efc9376a81107d7dd9098137090b70c91861d25..efc4223089ac988444481fcb74e19f6f163c7fcb 100644 (file)
@@ -3470,6 +3470,15 @@ sched_analyze_insn (struct deps_desc *deps, rtx x, rtx insn)
             change_spec_dep_to_hard (sd_it);
         }
     }
+
+  /* We do not yet have code to adjust REG_ARGS_SIZE, therefore we must
+     honor their original ordering.  */
+  if (find_reg_note (insn, REG_ARGS_SIZE, NULL))
+    {
+      if (deps->last_args_size)
+       add_dependence (insn, deps->last_args_size, REG_DEP_OUTPUT);
+      deps->last_args_size = insn;
+    }
 }
 
 /* Return TRUE if INSN might not always return normally (e.g. call exit,
@@ -3876,6 +3885,7 @@ init_deps (struct deps_desc *deps, bool lazy_reg_last)
   deps->sched_before_next_jump = 0;
   deps->in_post_call_group_p = not_post_call;
   deps->last_debug_insn = 0;
+  deps->last_args_size = 0;
   deps->last_reg_pending_barrier = NOT_A_BARRIER;
   deps->readonly = 0;
 }
index 3b1106fb0c1e3fee576d4288548ba55dc8993fa6..2cec6247230e62c948a4d5af37184c6a14de2a1c 100644 (file)
@@ -539,6 +539,9 @@ struct deps_desc
   /* The last debug insn we've seen.  */
   rtx last_debug_insn;
 
+  /* The last insn bearing REG_ARGS_SIZE that we've seen.  */
+  rtx last_args_size;
+
   /* The maximum register number for the following arrays.  Before reload
      this is max_reg_num; after reload it is FIRST_PSEUDO_REGISTER.  */
   int max_reg;