OSDN Git Service

* config/sh/sh.c (find_barrier): Skip call insn with a REG_EH_REGION
authorkkojima <kkojima@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Feb 2010 13:13:49 +0000 (13:13 +0000)
committerkkojima <kkojima@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Feb 2010 13:13:49 +0000 (13:13 +0000)
note when flag_exceptions is set.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@156656 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/sh/sh.c

index 887a03b..e680a14 100644 (file)
@@ -1,3 +1,8 @@
+2010-02-10  Kaz Kojima  <kkojima@gcc.gnu.org>
+
+       * config/sh/sh.c (find_barrier): Skip call insn with a REG_EH_REGION
+       note when flag_exceptions is set.
+
 2010-02-10  Duncan Sands  <baldrick@free.fr>
 
        * Makefile.in (PLUGIN_HEADERS): Add debug.h.
index d482100..3e8ff24 100644 (file)
@@ -4654,6 +4654,13 @@ find_barrier (int num_mova, rtx mova, rtx from)
       if (last_got)
         from = PREV_INSN (last_got);
 
+      /* Don't insert the constant pool table at the position which
+        may be the landing pad.  */
+      if (flag_exceptions
+         && CALL_P (from)
+         && find_reg_note (from, REG_EH_REGION, NULL_RTX))
+       from = PREV_INSN (from);
+
       /* Walk back to be just before any jump or label.
         Putting it before a label reduces the number of times the branch
         around the constant pool table will be hit.  Putting it before