re PR debug/52727 (internal compiler error at dwarf2cfi.c2:685)

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
This commit is contained in:
Richard Henderson 2014-02-05 10:42:19 -08:00 committed by Richard Henderson
parent 9cf7975d8b
commit 76df831f5d
4 changed files with 22 additions and 6 deletions

@ -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.

@ -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;
}
}

@ -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;
}

@ -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;