From: Richard Henderson Date: Wed, 23 May 2001 22:53:54 +0000 (-0700) Subject: * integrate.c (expand_inline_function): Handle CONCAT DECL_RESULT. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9688f9ada6db1aa893b02fdaf01c4222f904c73f;p=gcc.git * integrate.c (expand_inline_function): Handle CONCAT DECL_RESULT. From-SVN: r42515 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 14102e11d02..a62306dd084 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2001-05-23 Richard Henderson + + * integrate.c (expand_inline_function): Handle CONCAT DECL_RESULT. + 2001-05-23 Neil Booth * cpp.texi: Update for handling of charconsts. diff --git a/gcc/integrate.c b/gcc/integrate.c index 29acaf2939f..9b7a4e74d51 100644 --- a/gcc/integrate.c +++ b/gcc/integrate.c @@ -1083,6 +1083,31 @@ expand_inline_function (fndecl, parms, target, ignore, type, else map->reg_map[REGNO (loc)] = reg_to_map; } + else if (GET_CODE (loc) == CONCAT) + { + enum machine_mode departing_mode = TYPE_MODE (type); + enum machine_mode arriving_mode + = GET_MODE (DECL_RTL (DECL_RESULT (fndecl))); + + if (departing_mode != arriving_mode) + abort (); + if (GET_CODE (XEXP (loc, 0)) != REG + || GET_CODE (XEXP (loc, 1)) != REG) + abort (); + + /* Don't use MEMs as direct targets because on some machines + substituting a MEM for a REG makes invalid insns. + Let the combiner substitute the MEM if that is valid. */ + if (target == 0 || GET_CODE (target) != REG + || GET_MODE (target) != departing_mode) + target = gen_reg_rtx (departing_mode); + + if (GET_CODE (target) != CONCAT) + abort (); + + map->reg_map[REGNO (XEXP (loc, 0))] = XEXP (target, 0); + map->reg_map[REGNO (XEXP (loc, 1))] = XEXP (target, 1); + } else abort ();