]> gcc.gnu.org Git - gcc.git/commitdiff
mode-switching.c (create_pre_exit): Don't search past calls.
authorRichard Sandiford <richard@codesourcery.com>
Tue, 31 Jul 2007 15:01:37 +0000 (15:01 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Tue, 31 Jul 2007 15:01:37 +0000 (15:01 +0000)
gcc/
* mode-switching.c (create_pre_exit): Don't search past calls.

From-SVN: r127092

gcc/ChangeLog
gcc/mode-switching.c

index 8323fae31f51ac5995cab95de7f4cd972b2b473f..1f03151f051cb55d0d1199a4c8d5174ada24bd9c 100644 (file)
@@ -1,3 +1,7 @@
+2007-07-31  Richard Sandiford  <richard@codesourcery.com>
+
+       * mode-switching.c (create_pre_exit): Don't search past calls.
+
 2007-07-31  Sandra Loosemore  <sandra@codesourcery.com>
 
        * config/mips/mips.h (ISA_HAS_SYNCI):  Add !TARGET_MIPS16 test.
index 9667d965a27bd985a84a4bddb443f1b080e2660a..dc05208d3cdd98f7ff78ddd95bcb098dcecb70d7 100644 (file)
@@ -245,6 +245,17 @@ create_pre_exit (int n_entities, int *entity_map, const int *num_modes)
 
                if (INSN_P (return_copy))
                  {
+                   /* When using SJLJ exceptions, the call to the
+                      unregister function is inserted between the
+                      clobber of the return value and the copy.
+                      We do not want to split the block before this
+                      or any other call; if we have not found the
+                      copy yet, the copy must have been deleted.  */
+                   if (CALL_P (return_copy))
+                     {
+                       short_block = 1;
+                       break;
+                     }
                    return_copy_pat = PATTERN (return_copy);
                    switch (GET_CODE (return_copy_pat))
                      {
This page took 0.102783 seconds and 5 git commands to generate.