On 10 October 2014 21:13, Jeff Law <l...@redhat.com> wrote:
...
> ISTM it would be better to find the mode of the same class that corresponds
> to GET_MODE_SIZE (mode) / nregs.  In your case that's obviously QImode :-)

Like this?
Or did you mean to remove the save_mode[regno] use altogether?  I can
think of arguments for or against, but got no
concrete examples for either.
2014-10-11  Joern Rennecke  <joern.renne...@embecosm.com>
            Jeff Law  <l...@redhat.com>

        * caller-save.c (replace_reg_with_saved_mem): If saved_mode covers
        multiple hard registers, use word_mode.

diff --git a/gcc/caller-save.c b/gcc/caller-save.c
index e28facb..31b1a36 100644
--- a/gcc/caller-save.c
+++ b/gcc/caller-save.c
@@ -1158,9 +1158,12 @@ replace_reg_with_saved_mem (rtx *loc,
          }
        else
          {
-           gcc_assert (save_mode[regno] != VOIDmode);
-           XVECEXP (mem, 0, i) = gen_rtx_REG (save_mode [regno],
-                                              regno + i);
+           enum machine_mode smode = save_mode[regno];
+           gcc_assert (smode != VOIDmode);
+           if (hard_regno_nregs [regno][smode] > 1)
+             smode = mode_for_size (GET_MODE_SIZE (mode) / nregs,
+                                    GET_MODE_CLASS (mode), 0);
+           XVECEXP (mem, 0, i) = gen_rtx_REG (smode, regno + i);
          }
     }
 

Reply via email to