From c0560887e8974b500bf3d240f4f9e9d296071f0d Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 14 Jan 1997 20:32:22 +0000 Subject: Copy a CONST_INT rtx in force_const_mem From-SVN: r13490 --- gcc/varasm.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'gcc/varasm.c') diff --git a/gcc/varasm.c b/gcc/varasm.c index a135409..c62fd7e 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -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 (); } -- cgit v1.1