summaryrefslogtreecommitdiff
path: root/gcc/sched-deps.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2014-02-05 18:42:19 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2014-02-05 18:42:19 +0000
commit617529e8d37eb3b3d1d5f3c107a0e34ec7562051 (patch)
tree4e9ff9fb805d73c0c48089ece8cf85aba6937092 /gcc/sched-deps.c
parent1ba7e31ff9a09e42074aa08d7c649a1e8981d52b (diff)
downloadgcc-617529e8d37eb3b3d1d5f3c107a0e34ec7562051.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@207518 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/sched-deps.c')
-rw-r--r--gcc/sched-deps.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c
index 7efc9376a81..efc4223089a 100644
--- a/gcc/sched-deps.c
+++ b/gcc/sched-deps.c
@@ -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;
}