diff options
author | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-04-16 15:28:55 +0000 |
---|---|---|
committer | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-04-16 15:28:55 +0000 |
commit | 74f8420a5b204c5e021ce05b3d0d79ba9718360a (patch) | |
tree | 9f90a3317de2b4fa1ec8f93c322df10664acee4f /gcc/reorg.c | |
parent | dd329d30040f8c9e493bf85514c364d5ac5d6551 (diff) | |
download | gcc-74f8420a5b204c5e021ce05b3d0d79ba9718360a.tar.gz |
2016-04-16 Basile Starynkevitch <basile@starynkevitch.net>
{{merging with even more of GCC 6, using subversion 1.9
svn merge -r230701:231650 ^/trunk
}}
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@235062 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reorg.c')
-rw-r--r-- | gcc/reorg.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/gcc/reorg.c b/gcc/reorg.c index cc68d6bc540..1930a5f96cd 100644 --- a/gcc/reorg.c +++ b/gcc/reorg.c @@ -739,6 +739,7 @@ optimize_skip (rtx_jump_insn *insn, vec<rtx_insn *> *delay_list) || recog_memoized (trial) < 0 || (! eligible_for_annul_false (insn, 0, trial, flags) && ! eligible_for_annul_true (insn, 0, trial, flags)) + || RTX_FRAME_RELATED_P (trial) || can_throw_internal (trial)) return; @@ -1126,7 +1127,13 @@ steal_delay_list_from_target (rtx_insn *insn, rtx condition, rtx_sequence *seq, trial, flags))) { if (must_annul) - used_annul = 1; + { + /* Frame related instructions cannot go into annulled delay + slots, it messes up the dwarf info. */ + if (RTX_FRAME_RELATED_P (trial)) + return; + used_annul = 1; + } rtx_insn *temp = copy_delay_slot_insn (trial); INSN_FROM_TARGET_P (temp) = 1; add_to_delay_list (temp, &new_delay_list); @@ -2464,9 +2471,9 @@ fill_slots_from_thread (rtx_jump_insn *insn, rtx condition, if (eligible_for_delay (insn, *pslots_filled, trial, flags)) goto winner; } - else if (0 - || (ANNUL_IFTRUE_SLOTS && ! thread_if_true) - || (ANNUL_IFFALSE_SLOTS && thread_if_true)) + else if (!RTX_FRAME_RELATED_P (trial) + && ((ANNUL_IFTRUE_SLOTS && ! thread_if_true) + || (ANNUL_IFFALSE_SLOTS && thread_if_true))) { old_trial = trial; trial = try_split (pat, trial, 0); |