function.c (assign_parms): Convert arguments passed by reference to the right mode.
authorAlexandre Oliva <aoliva@redhat.com>
Fri, 29 Dec 2000 08:38:19 +0000 (08:38 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Fri, 29 Dec 2000 08:38:19 +0000 (08:38 +0000)
* function.c (assign_parms): Convert arguments passed by
reference to the right mode.

From-SVN: r38528

gcc/ChangeLog
gcc/function.c

index 7a306e5604221279056286699186c04c41fd6a59..63a9049ad00f6c35ae0ff9a6fc34697d07185d29 100644 (file)
@@ -1,3 +1,8 @@
+2000-12-29  Alexandre Oliva  <aoliva@redhat.com>
+
+       * function.c (assign_parms): Convert arguments passed by
+       reference to the right mode.
+
 2000-12-28  Geoffrey Keating  <geoffk@redhat.com>
 
        * c-parse.in (select_or_iter_stmt): Use truthvalue_conversion
index 0dabd918ea4d95f46b4b35bde9c1f51a19f9838e..278c432c38c7208cf8a3b1b103696c4943d3a103 100644 (file)
@@ -4726,7 +4726,22 @@ assign_parms (fndecl)
                 Pmode above.  We must use the actual mode of the parm.  */
              parmreg = gen_reg_rtx (TYPE_MODE (TREE_TYPE (parm)));
              mark_user_reg (parmreg);
-             emit_move_insn (parmreg, DECL_RTL (parm));
+             if (GET_MODE (parmreg) != GET_MODE (DECL_RTL (parm)))
+               {
+                 rtx tempreg = gen_reg_rtx (GET_MODE (DECL_RTL (parm)));
+
+                 push_to_sequence (conversion_insns);
+                 emit_move_insn (tempreg, DECL_RTL (parm));
+                 DECL_RTL (parm)
+                   = convert_to_mode (GET_MODE (parmreg), tempreg,
+                                      TREE_UNSIGNED (TREE_TYPE (parm)));
+                 emit_move_insn (parmreg, DECL_RTL (parm));
+                 conversion_insns = get_insns();
+                 did_conversion = 1;
+                 end_sequence ();
+               }
+             else
+               emit_move_insn (parmreg, DECL_RTL (parm));
              DECL_RTL (parm) = parmreg;
              /* STACK_PARM is the pointer, not the parm, and PARMREG is
                 now the parm.  */