]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/57349 (ICE on 253.perlbmk with pgo after r198096)
authorRichard Biener <rguenther@suse.de>
Wed, 22 May 2013 11:16:32 +0000 (11:16 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 22 May 2013 11:16:32 +0000 (11:16 +0000)
2013-05-22  Richard Biener  <rguenther@suse.de>

PR middle-end/57349
* profile.c (branch_prob): Do not split blocks that are
abnormally receiving from ECF_RETURNS_TWICE functions.

From-SVN: r199193

gcc/ChangeLog
gcc/profile.c

index 16cd2d97a3a83f571a7d9869fc454eddbe50ba0a..ffb3c6734b25797fc25e4e7251a54f94cebf25e3 100644 (file)
@@ -1,3 +1,9 @@
+2013-05-22  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/57349
+       * profile.c (branch_prob): Do not split blocks that are
+       abnormally receiving from ECF_RETURNS_TWICE functions.
+
 2013-05-22  Richard Sandiford  <rsandifo@linux.vnet.ibm.com>
 
        * recog.c (offsettable_address_addr_space_p): Fix calculation of
index 6f05581711c99099e9c9f37456b49e6412a5ae2e..b8333987e02ad24d1504cbbc55e0b4c5e223d712 100644 (file)
@@ -1085,18 +1085,20 @@ branch_prob (void)
                 or __builtin_setjmp_dispatcher calls.  These are very
                 special and don't expect anything to be inserted before
                 them.  */
-             if (!is_gimple_call (first)
-                 || (fndecl = gimple_call_fndecl (first)) == NULL
-                 || DECL_BUILT_IN_CLASS (fndecl) != BUILT_IN_NORMAL
-                 || (DECL_FUNCTION_CODE (fndecl) != BUILT_IN_SETJMP_RECEIVER
-                     && (DECL_FUNCTION_CODE (fndecl)
-                         != BUILT_IN_SETJMP_DISPATCHER)))
-               {
-                 if (dump_file)
-                   fprintf (dump_file, "Splitting bb %i after labels\n",
-                            bb->index);
-                 split_block_after_labels (bb);
-               }
+             if (is_gimple_call (first)
+                 && (((fndecl = gimple_call_fndecl (first)) != NULL
+                      && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
+                      && (DECL_FUNCTION_CODE (fndecl)
+                          == BUILT_IN_SETJMP_RECEIVER
+                          || (DECL_FUNCTION_CODE (fndecl)
+                              == BUILT_IN_SETJMP_DISPATCHER)))
+                     || gimple_call_flags (first) & ECF_RETURNS_TWICE))
+               continue;
+
+             if (dump_file)
+               fprintf (dump_file, "Splitting bb %i after labels\n",
+                        bb->index);
+             split_block_after_labels (bb);
            }
        }
     }