calls.c (emit_library_call_value_1): Handle partial registers correctly when building...
authorBernd Schmidt <bernd.schmidt@analog.com>
Wed, 28 Feb 2007 00:37:09 +0000 (00:37 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Wed, 28 Feb 2007 00:37:09 +0000 (00:37 +0000)
* calls.c (emit_library_call_value_1): Handle partial registers
correctly when building up CALL_INSN_FUNCTION_USAGE.

From-SVN: r122396

gcc/ChangeLog
gcc/calls.c

index 888ac2e61941a6171b929a3cb2537816852d673b..a8f41702d313a90308b327d252d6c1bec455cc16 100644 (file)
@@ -1,3 +1,8 @@
+2007-02-28  Bernd Schmidt  <bernd.schmidt@analog.com>
+
+       * calls.c (emit_library_call_value_1): Handle partial registers
+       correctly when building up CALL_INSN_FUNCTION_USAGE.
+       
 2007-02-27  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
 
        * pa/predicates.md (move_src_operand): Allow zero for mode.
index d9ba08c0ddb2db1ba991074ceec3bfe24cea06dc..8723e1f4fae8ccecbbc0a6bb53cfad81d4913329 100644 (file)
@@ -3774,7 +3774,18 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
       if (reg != 0 && GET_CODE (reg) == PARALLEL)
        use_group_regs (&call_fusage, reg);
       else if (reg != 0)
-       use_reg (&call_fusage, reg);
+        {
+         int partial = argvec[count].partial;
+         if (partial)
+           {
+             int nregs;
+              gcc_assert (partial % UNITS_PER_WORD == 0);
+             nregs = partial / UNITS_PER_WORD;
+             use_regs (&call_fusage, REGNO (reg), nregs);
+           }
+         else
+           use_reg (&call_fusage, reg);
+       }
     }
 
   /* Pass the function the address in which to return a structure value.  */