summaryrefslogtreecommitdiffstats
path: root/gcc/varasm.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1993-04-25 17:00:40 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1993-04-25 17:00:40 +0000
commita1cd5e50187821713b0251d1134543c9ca102cba (patch)
tree63c1bf13ac8e4d259e06c71c2f84d981af1f96fb /gcc/varasm.c
parentb1e8696fb5cf908da2b971851174b544087c354b (diff)
downloadppe42-gcc-a1cd5e50187821713b0251d1134543c9ca102cba.tar.gz
ppe42-gcc-a1cd5e50187821713b0251d1134543c9ca102cba.zip
(make_decl_rtl): If a variable has an asm operand that refers to,
e.g., fp, make a distinct RTL for it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@4215 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r--gcc/varasm.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 50b348fe8c0..16bb816aac8 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -354,7 +354,16 @@ make_decl_rtl (decl, asmspec, top_level)
error ("global register variable follows a function definition");
if (TREE_THIS_VOLATILE (decl))
warning ("volatile register variables don't work as you might wish");
- DECL_RTL (decl) = gen_rtx (REG, DECL_MODE (decl), reg_number);
+
+ /* If the user specified one of the eliminables registers here,
+ e.g., FRAME_POINTER_REGNUM, we don't want to get this variable
+ confused with that register and be eliminated. Although this
+ usage is somewhat suspect, we nevertheless use the following
+ kludge to avoid setting DECL_RTL to frame_pointer_rtx. */
+
+ DECL_RTL (decl)
+ = gen_rtx (REG, DECL_MODE (decl), FIRST_PSEUDO_REGISTER);
+ REGNO (DECL_RTL (decl)) = reg_number;
REG_USERVAR_P (DECL_RTL (decl)) = 1;
if (top_level)
OpenPOWER on IntegriCloud