From f231e307b43ec4e99a68363a7ef9ecb1bd32d70e Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Sat, 11 Dec 1993 08:33:22 -0500 Subject: [PATCH] (initialize_for_inline): Handle CONCAT when setting up parmdecl_map. (expand_inline_function): Make test for overlap of TARGET and args_vals[i] more conservative. From-SVN: r6207 --- gcc/integrate.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/gcc/integrate.c b/gcc/integrate.c index be439b9e9dc..fcba544145c 100644 --- a/gcc/integrate.c +++ b/gcc/integrate.c @@ -276,6 +276,17 @@ initialize_for_inline (fndecl, min_labelno, max_labelno, max_reg, copy) if (GET_CODE (p) == REG) parmdecl_map[REGNO (p)] = parms; + else if (GET_CODE (p) == CONCAT) + { + rtx preal = gen_realpart (GET_MODE (XEXP (p, 0)), p); + rtx pimag = gen_imagpart (GET_MODE (preal), p); + + if (GET_CODE (preal) == REG) + parmdecl_map[REGNO (preal)] = parms; + if (GET_CODE (pimag) == REG) + parmdecl_map[REGNO (pimag)] = parms; + } + /* This flag is cleared later if the function ever modifies the value of the parm. */ TREE_READONLY (parms) = 1; @@ -1273,9 +1284,7 @@ expand_inline_function (fndecl, parms, target, ignore, type, structure_value_add But if ARG_VALS[I] overlaps TARGET, these assumptions are wrong, so put ARG_VALS[I] into a fresh register. */ || (target != 0 - && (GET_CODE (arg_vals[i]) == REG - || GET_CODE (arg_vals[i]) == SUBREG - || GET_CODE (arg_vals[i]) == MEM) + && ! CONSTANT_P (arg_vals[i]) && reg_overlap_mentioned_p (arg_vals[i], target)) /* ??? We must always copy a SUBREG into a REG, because it might get substituted into an address, and not all ports correctly -- 2.30.2