From: Alexandre Oliva Date: Thu, 14 Feb 2002 19:27:21 +0000 (+0000) Subject: function.c (assign_parms): Demote promoted argument passed by transparent reference. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4606272bc4fd9daccd4723530a650822a8527671;p=gcc.git function.c (assign_parms): Demote promoted argument passed by transparent reference. * function.c (assign_parms): Demote promoted argument passed by transparent reference. From-SVN: r49774 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 63b4eddcca9..e23395e7524 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-02-14 Alexandre Oliva + + * function.c (assign_parms): Demote promoted argument passed by + transparent reference. + 2001-02-14 Joel Sherrill * config/arm/rtems-elf.h, config/h8300/rtems.h: Removed redundant diff --git a/gcc/function.c b/gcc/function.c index d304b309c4e..634e74b4d62 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -4749,13 +4749,15 @@ assign_parms (fndecl) /* If we were passed a pointer but the actual value can safely live in a register, put it in one. */ if (passed_pointer && TYPE_MODE (TREE_TYPE (parm)) != BLKmode - && ! ((! optimize - && ! DECL_REGISTER (parm)) - || TREE_SIDE_EFFECTS (parm) - /* If -ffloat-store specified, don't put explicit - float variables into registers. */ - || (flag_float_store - && TREE_CODE (TREE_TYPE (parm)) == REAL_TYPE))) + /* If by-reference argument was promoted, demote it. */ + && (TYPE_MODE (TREE_TYPE (parm)) != GET_MODE (DECL_RTL (parm)) + || ! ((! optimize + && ! DECL_REGISTER (parm)) + || TREE_SIDE_EFFECTS (parm) + /* If -ffloat-store specified, don't put explicit + float variables into registers. */ + || (flag_float_store + && TREE_CODE (TREE_TYPE (parm)) == REAL_TYPE)))) { /* We can't use nominal_mode, because it will have been set to Pmode above. We must use the actual mode of the parm. */