diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0330a13997c..82dd6139764 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-09-19 Nick Clifton + + * 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 PR lto/63298 diff --git a/gcc/config/rl78/rl78.c b/gcc/config/rl78/rl78.c index 5fe1f6fc6c9..5c2a9c6ddc5 100644 --- a/gcc/config/rl78/rl78.c +++ b/gcc/config/rl78/rl78.c @@ -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)); } }