diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-09-08 09:25:47 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-09-08 09:25:47 +0000 |
commit | 326d0c19d6dc0c4afc72fbbee5d8fdc85f716fa9 (patch) | |
tree | 46fd118f8f43c998742ad489596528e4cc25da80 /gcc/sched-int.h | |
parent | 73ac9f44e03c893a310beb09203bcfaa54c6efd5 (diff) | |
download | gcc-326d0c19d6dc0c4afc72fbbee5d8fdc85f716fa9.tar.gz |
PR rtl-optimization/41239
* sched-int.h (struct deps): Add last_function_call_may_noreturn field.
* sched-rgn.c (deps_join): Join also last_function_call_may_noreturn
lists.
* sched-deps.c (sched_analyze_insn): Prevent moving trapping insns
across calls, as the calls might not always return normally.
(call_may_noreturn_p): New function.
(deps_analyze_insn): Update last_function_call_may_noreturn list.
(init_deps): Initialize it.
(remove_from_deps): Also remove calls from
last_function_call_may_noreturn list.
* gcc.c-torture/execute/pr41239.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@151500 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/sched-int.h')
-rw-r--r-- | gcc/sched-int.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/sched-int.h b/gcc/sched-int.h index de780e5e395..4d60ece28c9 100644 --- a/gcc/sched-int.h +++ b/gcc/sched-int.h @@ -502,6 +502,12 @@ struct deps Used to prevent register lifetimes from expanding unnecessarily. */ rtx last_function_call; + /* A list of the last function calls that may not return normally + we have seen. We use a list to represent last function calls from + multiple predecessor blocks. Used to prevent moving trapping insns + across such calls. */ + rtx last_function_call_may_noreturn; + /* A list of insns which use a pseudo register that does not already cross a call. We create dependencies between each of those insn and the next call insn, to ensure that they won't cross a call after |