rl78.c (rl78_expand_epilogue): Generate a USE of the pop'ed registers so that DCE...
authorNick Clifton <nickc@redhat.com>
Fri, 19 Sep 2014 07:45:22 +0000 (07:45 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Fri, 19 Sep 2014 07:45:22 +0000 (07:45 +0000)
* config/rl78/rl78.c (rl78_expand_epilogue): Generate a USE of the
pop'ed registers so that DCE does not eliminate them.

From-SVN: r215375

gcc/ChangeLog
gcc/config/rl78/rl78.c

index 0330a13997cab23d5a1a9ff75c04ea3e8a27ed6e..82dd61397647b7854617b6648e87781a2754971b 100644 (file)
@@ -1,3 +1,8 @@
+2014-09-19  Nick Clifton  <nickc@redhat.com>
+
+       * config/rl78/rl78.c (rl78_expand_epilogue): Generate a USE of the
+       pop'ed registers so that DCE does not eliminate them.
+
 2014-09-18  Jan Hubicka  <hubicka@ucw.cz>
 
        PR lto/63298
index 5fe1f6fc6c9d0fe8b7e66e85aa28d9697808b076..5c2a9c6ddc5cb801ea739d2062e55559da64a5de 100644 (file)
@@ -1136,10 +1136,19 @@ rl78_expand_epilogue (void)
   for (i = 15; i >= 0; i--)
     if (cfun->machine->need_to_push [i])
       {
+       rtx dest = gen_rtx_REG (HImode, i * 2);
+
        if (TARGET_G10)
          {
-           emit_insn (gen_pop (gen_rtx_REG (HImode, 0)));
-           emit_move_insn (gen_rtx_REG (HImode, i*2), gen_rtx_REG (HImode, 0));
+           rtx ax = gen_rtx_REG (HImode, 0);
+
+           emit_insn (gen_pop (ax));
+           if (i != 0)
+             {
+               emit_move_insn (dest, ax);
+               /* Generate a USE of the pop'd register so that DCE will not eliminate the move.  */
+               emit_insn (gen_use (dest));
+             }
          }
        else
          {
@@ -1150,7 +1159,7 @@ rl78_expand_epilogue (void)
                emit_insn (gen_sel_rb (GEN_INT (need_bank)));
                rb = need_bank;
              }
-           emit_insn (gen_pop (gen_rtx_REG (HImode, i * 2)));
+           emit_insn (gen_pop (dest));
          }
       }