From 9dec91d433ffb66758a7927576c2e8071e28d9f0 Mon Sep 17 00:00:00 2001 From: Steve Ellcey Date: Fri, 3 Sep 2004 17:52:08 +0000 Subject: [PATCH] ia64.c (ia64_function_arg): Use PARALLEL even if there is only one reg. * 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 | 6 ++++++ gcc/config/ia64/ia64.c | 18 ++---------------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 71218fc1953..23735e6d0fc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-09-03 Steve Ellcey + + * 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 PR c/7054 diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index 1b9ac8ee963..8921a8a7e92 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -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); -- 2.30.2