summaryrefslogtreecommitdiff
path: root/gcc/sched-int.h
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2009-09-08 09:25:47 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2009-09-08 09:25:47 +0000
commit326d0c19d6dc0c4afc72fbbee5d8fdc85f716fa9 (patch)
tree46fd118f8f43c998742ad489596528e4cc25da80 /gcc/sched-int.h
parent73ac9f44e03c893a310beb09203bcfaa54c6efd5 (diff)
downloadgcc-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.h6
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