aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1992-07-17 05:58:38 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1992-07-17 05:58:38 -0400
commit0c2e838b251178be0a1eb709fc9e3d86d52f6577 (patch)
tree4bbefe3d62dd882a07050a8ba1268d442bf34fd9 /gcc
parent0dadecf68133e62ab48b9649edbff5daf83a370f (diff)
downloadgcc-0c2e838b251178be0a1eb709fc9e3d86d52f6577.zip
gcc-0c2e838b251178be0a1eb709fc9e3d86d52f6577.tar.gz
gcc-0c2e838b251178be0a1eb709fc9e3d86d52f6577.tar.bz2
(instantiate_decls{,_1}): Don't do instantiation here if the address
is mode-dependent. From-SVN: r1615
Diffstat (limited to 'gcc')
-rw-r--r--gcc/function.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/function.c b/gcc/function.c
index 37a0f47..87db0bb 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -1902,12 +1902,16 @@ instantiate_decls (fndecl, valid_only)
/* Process all parameters of the function. */
for (decl = DECL_ARGUMENTS (fndecl); decl; decl = TREE_CHAIN (decl))
{
- if (DECL_RTL (decl) && GET_CODE (DECL_RTL (decl)) == MEM)
+ if (DECL_RTL (decl) && GET_CODE (DECL_RTL (decl)) == MEM
+ && (! valid_only
+ || ! mode_dependent_address_p (XEXP (DECL_RTL (decl), 0))))
instantiate_virtual_regs_1 (&XEXP (DECL_RTL (decl), 0),
(valid_only ? DECL_RTL (decl) : NULL_RTX),
0);
if (DECL_INCOMING_RTL (decl)
- && GET_CODE (DECL_INCOMING_RTL (decl)) == MEM)
+ && GET_CODE (DECL_INCOMING_RTL (decl)) == MEM
+ && (! valid_only
+ || ! mode_dependent_address_p (XEXP (DECL_INCOMING_RTL (decl), 0))))
instantiate_virtual_regs_1 (&XEXP (DECL_INCOMING_RTL (decl), 0),
(valid_only ? DECL_INCOMING_RTL (decl)
: NULL_RTX),
@@ -1938,7 +1942,9 @@ instantiate_decls_1 (let, valid_only)
tree t;
for (t = BLOCK_VARS (let); t; t = TREE_CHAIN (t))
- if (DECL_RTL (t) && GET_CODE (DECL_RTL (t)) == MEM)
+ if (DECL_RTL (t) && GET_CODE (DECL_RTL (t)) == MEM
+ && (! valid_only
+ || ! mode_dependent_address_p (XEXP (DECL_RTL (t), 0))))
instantiate_virtual_regs_1 (& XEXP (DECL_RTL (t), 0),
valid_only ? DECL_RTL (t) : NULL_RTX, 0);