diff options
author | Steve Ellcey <sellcey@imgtec.com> | 2015-12-07 20:37:38 +0000 |
---|---|---|
committer | Steve Ellcey <sje@gcc.gnu.org> | 2015-12-07 20:37:38 +0000 |
commit | 1167d047bce1b342c82f18195247d218942b0262 (patch) | |
tree | 80d772fff7db4e9f1e6aaa299a039f60d7ee2b78 /gcc | |
parent | 2fa586ad989926559871b01f9825e0adfe9fd186 (diff) | |
download | gcc-1167d047bce1b342c82f18195247d218942b0262.zip gcc-1167d047bce1b342c82f18195247d218942b0262.tar.gz gcc-1167d047bce1b342c82f18195247d218942b0262.tar.bz2 |
reorg.c (optimize_skip): Do not put frame related instructions in annulled delay slots.
2015-12-07 Steve Ellcey <sellcey@imgtec.com>
* reorg.c (optimize_skip): Do not put frame related instructions
in annulled delay slots.
(steal_delay_list_from_target): Ditto.
(fill_slots_from_thread): Ditto.
From-SVN: r231382
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/reorg.c | 15 |
2 files changed, 18 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8741e03..ade5627 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2015-12-07 Steve Ellcey <sellcey@imgtec.com> + + * reorg.c (optimize_skip): Do not put frame related instructions + in annulled delay slots. + (steal_delay_list_from_target): Ditto. + (fill_slots_from_thread): Ditto. + 2015-12-07 Evandro Menezes <e.menezes@samsung.com> * config/aarch64/aarch64-cores.def: Use the Exynos M1 sched model. diff --git a/gcc/reorg.c b/gcc/reorg.c index cc68d6b..1930a5f 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); |