re PR bootstrap/57609 (S/390 ESA mode bootstrap failure since r197266)
authorSteven Bosscher <steven@gcc.gnu.org>
Wed, 19 Jun 2013 12:06:30 +0000 (12:06 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Wed, 19 Jun 2013 12:06:30 +0000 (12:06 +0000)
2013-06-19  Steven Bosscher  <steven@gcc.gnu.org>

PR target/57609
* config/s390/s390.c (s390_chunkify_start): Replace next_real_insn
with NEXT_INSN.  Use tablejump_p to check for jump table data
insns.

From-SVN: r200196

gcc/ChangeLog
gcc/config/s390/s390.c

index 53a6cde70178160b4da5e3a4da0a51be6bba145c..08f40a3b24d216e3d7713ac1c8f513a954143658 100644 (file)
@@ -1,3 +1,10 @@
+2013-06-19  Steven Bosscher  <steven@gcc.gnu.org>
+
+       PR target/57609
+       * config/s390/s390.c (s390_chunkify_start): Replace next_real_insn
+       with NEXT_INSN.  Use tablejump_p to check for jump table data
+       insns.
+
 2013-06-19  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/56544
index 358345a4437a2328b8d48223daf0e27c468f7862..06d1228ff06d5bac0f6eb7706bb486c15a5e46df 100644 (file)
@@ -7023,7 +7023,7 @@ s390_chunkify_start (void)
       if (LABEL_P (insn)
          && (LABEL_PRESERVE_P (insn) || LABEL_NAME (insn)))
        {
-         rtx vec_insn = next_real_insn (insn);
+         rtx vec_insn = NEXT_INSN (insn);
          if (! vec_insn || ! JUMP_TABLE_DATA_P (vec_insn))
            bitmap_set_bit (far_labels, CODE_LABEL_NUMBER (insn));
        }
@@ -7033,6 +7033,8 @@ s390_chunkify_start (void)
       else if (JUMP_P (insn))
        {
           rtx pat = PATTERN (insn);
+          rtx table;
+
          if (GET_CODE (pat) == PARALLEL && XVECLEN (pat, 0) > 2)
            pat = XVECEXP (pat, 0, 0);
 
@@ -7046,28 +7048,18 @@ s390_chunkify_start (void)
                    bitmap_set_bit (far_labels, CODE_LABEL_NUMBER (label));
                }
             }
-         else if (GET_CODE (pat) == PARALLEL
-                  && XVECLEN (pat, 0) == 2
-                  && GET_CODE (XVECEXP (pat, 0, 0)) == SET
-                  && GET_CODE (XVECEXP (pat, 0, 1)) == USE
-                  && GET_CODE (XEXP (XVECEXP (pat, 0, 1), 0)) == LABEL_REF)
-           {
-             /* Find the jump table used by this casesi jump.  */
-             rtx vec_label = XEXP (XEXP (XVECEXP (pat, 0, 1), 0), 0);
-             rtx vec_insn = next_real_insn (vec_label);
-             if (vec_insn && JUMP_TABLE_DATA_P (vec_insn))
-               {
-                 rtx vec_pat = PATTERN (vec_insn);
-                 int i, diff_p = GET_CODE (vec_pat) == ADDR_DIFF_VEC;
-
-                 for (i = 0; i < XVECLEN (vec_pat, diff_p); i++)
-                   {
-                     rtx label = XEXP (XVECEXP (vec_pat, diff_p, i), 0);
-
-                     if (s390_find_pool (pool_list, label)
-                         != s390_find_pool (pool_list, insn))
-                       bitmap_set_bit (far_labels, CODE_LABEL_NUMBER (label));
-                   }
+         else if (tablejump_p (insn, NULL, &table))
+           {
+             rtx vec_pat = PATTERN (table);
+             int i, diff_p = GET_CODE (vec_pat) == ADDR_DIFF_VEC;
+
+             for (i = 0; i < XVECLEN (vec_pat, diff_p); i++)
+               {
+                 rtx label = XEXP (XVECEXP (vec_pat, diff_p, i), 0);
+
+                 if (s390_find_pool (pool_list, label)
+                     != s390_find_pool (pool_list, insn))
+                   bitmap_set_bit (far_labels, CODE_LABEL_NUMBER (label));
                }
            }
         }