Copy a CONST_INT rtx in force_const_mem
authorIan Lance Taylor <ian@gcc.gnu.org>
Tue, 14 Jan 1997 20:32:22 +0000 (20:32 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Tue, 14 Jan 1997 20:32:22 +0000 (20:32 +0000)
From-SVN: r13490

gcc/varasm.c

index a13540932aea0d6d876a1d8946c8c91684b7471b..c62fd7e6d99fc777f915f50297f0214c7b8b0bd2 100644 (file)
@@ -3407,19 +3407,25 @@ force_const_mem (mode, x)
       pool_offset &= ~ (align - 1);
 
       /* If RTL is not being placed into the saveable obstack, make a
-        copy of X that is in the saveable obstack in case we are being
-        called from combine or some other phase that discards memory
-        it allocates.  We need only do this if it is a CONST, since
-        no other RTX should be allocated in this situation.  */
+        copy of X that is in the saveable obstack in case we are
+        being called from combine or some other phase that discards
+        memory it allocates.  We used to only do this if it is a
+        CONST; however, reload can allocate a CONST_INT when
+        eliminating registers.  */
       if (rtl_obstack != saveable_obstack
-         && GET_CODE (x) == CONST)
+         && (GET_CODE (x) == CONST || GET_CODE (x) == CONST_INT))
        {
          push_obstacks_nochange ();
          rtl_in_saveable_obstack ();
 
-         x = gen_rtx (CONST, GET_MODE (x), 
-                      gen_rtx (PLUS, GET_MODE (x), 
-                               XEXP (XEXP (x, 0), 0), XEXP (XEXP (x, 0), 1)));
+         if (GET_CODE (x) == CONST)
+           x = gen_rtx (CONST, GET_MODE (x), 
+                        gen_rtx (PLUS, GET_MODE (x), 
+                                 XEXP (XEXP (x, 0), 0),
+                                 XEXP (XEXP (x, 0), 1)));
+         else
+           x = GEN_INT (INTVAL (x));
+
          pop_obstacks ();
        }