mode-switching.c (optimize_mode_switching): Fix bug in MODE_AFTER handling.
authorJoern Rennecke <joern.rennecke@embecosm.com>
Mon, 1 Aug 2011 18:30:29 +0000 (18:30 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Mon, 1 Aug 2011 18:30:29 +0000 (19:30 +0100)
        * mode-switching.c (optimize_mode_switching): Fix bug in MODE_AFTER
        handling.

From-SVN: r177068

gcc/ChangeLog
gcc/mode-switching.c

index f03046ed8a00b0ed45a348124f204fd7f603213d..f098515ac883aceed8dddcd2769d5628c7ff2df8 100644 (file)
@@ -1,3 +1,8 @@
+2011-08-01  Joern Rennecke  <joern.rennecke@embecosm.com>
+
+       * mode-switching.c (optimize_mode_switching): Fix bug in MODE_AFTER
+       handling.
+
 2011-08-01  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR target/47766
index 9b11842781c7ce7e942f45d77b9a605fec7b50a9..7ea241cea7bdf57c6549fc7f196c9a70b48698c6 100644 (file)
@@ -499,6 +499,7 @@ optimize_mode_switching (void)
        {
          struct seginfo *ptr;
          int last_mode = no_mode;
+         bool any_set_required = false;
          HARD_REG_SET live_now;
 
          REG_SET_TO_HARD_REG_SET (live_now, df_get_live_in (bb));
@@ -527,6 +528,7 @@ optimize_mode_switching (void)
 
                  if (mode != no_mode && mode != last_mode)
                    {
+                     any_set_required = true;
                      last_mode = mode;
                      ptr = new_seginfo (mode, insn, bb->index, live_now);
                      add_seginfo (info + bb->index, ptr);
@@ -548,8 +550,10 @@ optimize_mode_switching (void)
            }
 
          info[bb->index].computing = last_mode;
-         /* Check for blocks without ANY mode requirements.  */
-         if (last_mode == no_mode)
+         /* Check for blocks without ANY mode requirements.
+            N.B. because of MODE_AFTER, last_mode might still be different
+            from no_mode.  */
+         if (!any_set_required)
            {
              ptr = new_seginfo (no_mode, BB_END (bb), bb->index, live_now);
              add_seginfo (info + bb->index, ptr);