diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2002-02-14 19:27:21 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2002-02-14 19:27:21 +0000 |
commit | 4606272bc4fd9daccd4723530a650822a8527671 (patch) | |
tree | e36f8b6bc6513154e4262e917071e6980c5fc8e0 /gcc/function.c | |
parent | 0b46224d2bb618a97a700e985cedb42d25039d96 (diff) | |
download | gcc-4606272bc4fd9daccd4723530a650822a8527671.zip gcc-4606272bc4fd9daccd4723530a650822a8527671.tar.gz gcc-4606272bc4fd9daccd4723530a650822a8527671.tar.bz2 |
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
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/gcc/function.c b/gcc/function.c index d304b30..634e74b 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. */ |