This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH 2/8] Make more insns unique
- From: Alexander Monakov <amonakov at ispras dot ru>
- To: gcc-patches at gcc dot gnu dot org
- To: gcc-patches at gcc dot gnu dot org
- Cc: vmakarov at redhat dot com
- Date: Wed, 3 Aug 2011 19:30:32 +0400
- Subject: [PATCH 2/8] Make more insns unique
- References: <1312385438-6273-1-git-send-email-amonakov@ispras.ru>
From: Dmitry Melnik <dm@ispras.ru>
This patch prevents duplicating (as bookkeeping code) instructions that are
either volatile or recognized by cannot_copy_insn_p target hook (in addition
to already present restrictions). This avoids generating incorrect assembler
with duplicate labels on ARM.
2011-08-04 Dmitry Melnik <dm@ispras.ru>
* sel-sched-ir.c (init_global_and_expr_for_insn): Forbid copying of
recognized by cannot_copy_insn_p hook and volatile instructions.
diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c
index 5a287d0..8f5cd3f 100644
--- a/gcc/sel-sched-ir.c
+++ b/gcc/sel-sched-ir.c
@@ -2956,7 +2956,10 @@ init_global_and_expr_for_insn (insn_t insn)
/* Exception handling insns are always unique. */
|| (cfun->can_throw_non_call_exceptions && can_throw_internal (insn))
/* TRAP_IF though have an INSN code is control_flow_insn_p (). */
- || control_flow_insn_p (insn))
+ || control_flow_insn_p (insn)
+ || volatile_insn_p (PATTERN (insn))
+ || (targetm.cannot_copy_insn_p
+ && targetm.cannot_copy_insn_p (insn)))
force_unique_p = true;
else
force_unique_p = false;