PR debug/52727
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 5 Feb 2014 18:42:19 +0000 (18:42 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 5 Feb 2014 18:42:19 +0000 (18:42 +0000)
        * 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@207518 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 9f3902d..c3bdd4d 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 c591c60..69fd5ea 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 7efc937..efc4223 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 3b1106f..2cec624 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;