* calls.c (load_register_parameters): Arrange for call_fusage to
authoramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 6 Aug 2003 03:26:17 +0000 (03:26 +0000)
committeramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 6 Aug 2003 03:26:17 +0000 (03:26 +0000)
report the whole register as used when shifting to the msb.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@70201 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/calls.c

index ac596b0..e3774ae 100644 (file)
@@ -1,3 +1,8 @@
+2003-08-06  Alan Modra  <amodra@bigpond.net.au>
+
+       * calls.c (load_register_parameters): Arrange for call_fusage to
+       report the whole register as used when shifting to the msb.
+
 2003-08-05  Roger Sayle  <roger@eyesopen.com>
 
        * builtins.c (expand_builtin): When not optimizing, call the library
index 26937c3..bdb4288 100644 (file)
@@ -1633,13 +1633,18 @@ load_register_parameters (struct arg_data *args, int num_actuals,
                  && (args[i].locate.where_pad
                      == (BYTES_BIG_ENDIAN ? upward : downward)))
                {
-                 rtx ri = gen_rtx_REG (word_mode, REGNO (reg));
                  rtx x;
                  int shift = (UNITS_PER_WORD - size) * BITS_PER_UNIT;
-                 x = expand_binop (word_mode, ashl_optab, ri,
-                                   GEN_INT (shift), ri, 1, OPTAB_WIDEN);
-                 if (x != ri)
-                   emit_move_insn (ri, x);
+
+                 /* Assigning REG here rather than a temp makes CALL_FUSAGE
+                    report the whole reg as used.  Strictly speaking, the
+                    call only uses SIZE bytes at the msb end, but it doesn't
+                    seem worth generating rtl to say that.  */
+                 reg = gen_rtx_REG (word_mode, REGNO (reg));
+                 x = expand_binop (word_mode, ashl_optab, reg,
+                                   GEN_INT (shift), reg, 1, OPTAB_WIDEN);
+                 if (x != reg)
+                   emit_move_insn (reg, x);
                }
 #endif
            }