* config/ia64/ia64.c (ia64_function_arg): Use PARALLEL even if there
authorsje <sje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 3 Sep 2004 17:52:08 +0000 (17:52 +0000)
committersje <sje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 3 Sep 2004 17:52:08 +0000 (17:52 +0000)
is only one reg.
(ia64_function_value): Ditto.

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

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

index 71218fc..23735e6 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 1b9ac8e..8921a8a 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);