Hello!

Attached patch fixes an oversight in mode-switching. For blocks
without ANY mode requirements, we have to consider instructions with
MODE_AFTER mode changes. If the exiting mode from the block is
different that no_mode (the mode we start), we have to mark the block
as nontransparent.

2013-11-08  Uros Bizjak  <ubiz...@gmail.com>

    * mode-switching.c (optimize_mode_switching): Mark block as
    nontransparent, if last_mode at block exit is different from no_mode.

Bootstrapped and regression tested on x86_64-pc-linux-gnu {,-m32}
core-avx-i configured bootstrap.

OK for mainline and branches?

Thanks,
Uros.
Index: mode-switching.c
===================================================================
--- mode-switching.c    (revision 204496)
+++ mode-switching.c    (working copy)
@@ -577,6 +577,8 @@ optimize_mode_switching (void)
            {
              ptr = new_seginfo (no_mode, BB_END (bb), bb->index, live_now);
              add_seginfo (info + bb->index, ptr);
+             if (last_mode != no_mode)
+               bitmap_clear_bit (transp[bb->index], j);
            }
        }
 #if defined (MODE_ENTRY) && defined (MODE_EXIT)

Reply via email to