ia64.c (ia64_function_arg): Use PARALLEL even if there is only one reg.
authorSteve Ellcey <sje@cup.hp.com>
Fri, 3 Sep 2004 17:52:08 +0000 (17:52 +0000)
committerSteve Ellcey <sje@gcc.gnu.org>
Fri, 3 Sep 2004 17:52:08 +0000 (17:52 +0000)
* config/ia64/ia64.c (ia64_function_arg): Use PARALLEL even if there
is only one reg.
(ia64_function_value): Ditto.

From-SVN: r87038

gcc/ChangeLog
gcc/config/ia64/ia64.c

index 71218fc1953225252baccbd6f338306ea159cbae..23735e6d0fc17feb0b0408d23f81da639e8bbfc9 100644 (file)
@@ -1,3 +1,9 @@
+2004-09-03  Steve Ellcey  <sje@cup.hp.com>
+
+       * config/ia64/ia64.c (ia64_function_arg): Use PARALLEL even if there
+       is only one reg.
+       (ia64_function_value): Ditto.
+
 2004-09-03  Jan Beulich  <jbeulich@novell.com>
 
        PR c/7054
index 1b9ac8ee963d9b263fcc7c48e509bd8c74fd0495..8921a8a7e92642d47abb012a69578fddf66370ee 100644 (file)
@@ -3169,17 +3169,7 @@ ia64_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode, tree type,
          else if (gr_size > UNITS_PER_WORD)
            int_regs += gr_size / UNITS_PER_WORD;
        }
-
-      /* If we ended up using just one location, just return that one loc, but
-        change the mode back to the argument mode.  However, we can't do this
-        when hfa_mode is XFmode and mode is TImode.  In that case, we would
-        return a TImode reference to an FP reg, but FP regs can't hold TImode.
-        We need the PARALLEL to make this work.  This can happen for a union
-        containing a single __float80 member.  */
-      if (i == 1 && ! (hfa_mode == XFmode && mode == TImode))
-       return gen_rtx_REG (mode, REGNO (XEXP (loc[0], 0)));
-      else
-       return gen_rtx_PARALLEL (mode, gen_rtvec_v (i, loc));
+      return gen_rtx_PARALLEL (mode, gen_rtvec_v (i, loc));
     }
 
   /* Integral and aggregates go in general registers.  If we have run out of
@@ -3477,11 +3467,7 @@ ia64_function_value (tree valtype, tree func ATTRIBUTE_UNUSED)
                                      GEN_INT (offset));
          offset += hfa_size;
        }
-
-      if (i == 1)
-       return XEXP (loc[0], 0);
-      else
-       return gen_rtx_PARALLEL (mode, gen_rtvec_v (i, loc));
+      return gen_rtx_PARALLEL (mode, gen_rtvec_v (i, loc));
     }
   else if (FLOAT_TYPE_P (valtype) && mode != TFmode && mode != TCmode)
     return gen_rtx_REG (mode, FR_ARG_FIRST);