aboutsummaryrefslogtreecommitdiff
path: root/gcc/bb-reorder.c
diff options
context:
space:
mode:
authorKaz Kojima <kkojima@gcc.gnu.org>2005-02-25 07:13:25 +0000
committerKaz Kojima <kkojima@gcc.gnu.org>2005-02-25 07:13:25 +0000
commitbd182be84e9c8ae8485ac7c392fa0b6678969e3c (patch)
tree39c9ee1d5ea2b7c1775d477f89697282ae1cd77f /gcc/bb-reorder.c
parent2b5936fd6163727b4be123ac730457a2d752aa77 (diff)
downloadgcc-bd182be84e9c8ae8485ac7c392fa0b6678969e3c.zip
gcc-bd182be84e9c8ae8485ac7c392fa0b6678969e3c.tar.gz
gcc-bd182be84e9c8ae8485ac7c392fa0b6678969e3c.tar.bz2
re PR rtl-optimization/20117 (duplicated labels in PIC)
PR rtl-optimization/20117 * bb-reorder.c (duplicate_computed_gotos): Don't duplicate the block including noncopyable insn. From-SVN: r95533
Diffstat (limited to 'gcc/bb-reorder.c')
-rw-r--r--gcc/bb-reorder.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c
index 23cdf09..44a5011 100644
--- a/gcc/bb-reorder.c
+++ b/gcc/bb-reorder.c
@@ -2050,7 +2050,17 @@ duplicate_computed_gotos (void)
FOR_BB_INSNS (bb, insn)
{
if (INSN_P (insn))
- size += get_attr_length (insn);
+ {
+ /* If the insn isn't copyable, don't duplicate
+ the block. */
+ if (targetm.cannot_copy_insn_p
+ && targetm.cannot_copy_insn_p (insn))
+ {
+ size = max_size + 1;
+ break;
+ }
+ size += get_attr_length (insn);
+ }
if (size > max_size)
break;
}