]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
calls.c (load_register_parameters): Arrange for call_fusage to report the whole regis...
authorAlan Modra <amodra@bigpond.net.au>
Wed, 6 Aug 2003 03:26:17 +0000 (03:26 +0000)
committerAlan Modra <amodra@gcc.gnu.org>
Wed, 6 Aug 2003 03:26:17 +0000 (12:56 +0930)
* calls.c (load_register_parameters): Arrange for call_fusage to
report the whole register as used when shifting to the msb.

From-SVN: r70201

gcc/ChangeLog
gcc/calls.c

index ac596b0089f7eaee8597c96714825be7ee292663..e3774ae70fa053e0bf629cbb99eedb5fdc574c96 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 26937c3775bae0125515d71adba8b473e295671c..bdb4288100f752bb1d7baa16aefde6dfd36eca9f 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
            }