aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@codesourcery.com>2010-09-29 21:12:48 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2010-09-29 21:12:48 +0000
commit907c53bbdf5deda5bb247f535af5fc1f1968946d (patch)
treec95bf16b6f5cb0dfca7aae4fa3bafd797d79393c
parent2293974419a6541fb6425249f1340e96a3fb0766 (diff)
downloadgcc-907c53bbdf5deda5bb247f535af5fc1f1968946d.zip
gcc-907c53bbdf5deda5bb247f535af5fc1f1968946d.tar.gz
gcc-907c53bbdf5deda5bb247f535af5fc1f1968946d.tar.bz2
re PR c/45054 (struct-by-value-1.c fail.)
PR c/45054 * reload1.c (replace_pseudos_in): Use eliminate_regs_1, allowing invariants. Check for reg_equiv_invariant. (reload): Assert that spilled_pseudos is empty when returning. From-SVN: r164733
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/reload1.c6
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0c3f9ce..5da6057 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -11,6 +11,11 @@
costs_add_n_insns): New inline functions.
(get_full_rtx_cost): Declare.
+ PR c/45054
+ * reload1.c (replace_pseudos_in): Use eliminate_regs_1, allowing
+ invariants. Check for reg_equiv_invariant.
+ (reload): Assert that spilled_pseudos is empty when returning.
+
2010-09-29 Kai Tietz <kai.tietz@onevision.com>
* config/i386/mingw32.h (TARGET_64BIT): replaced by
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 1024cf1..202b757 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -588,7 +588,7 @@ replace_pseudos_in (rtx *loc, enum machine_mode mem_mode, rtx usage)
if (regno < FIRST_PSEUDO_REGISTER)
return;
- x = eliminate_regs (x, mem_mode, usage);
+ x = eliminate_regs_1 (x, mem_mode, usage, true, false);
if (x != *loc)
{
*loc = x;
@@ -598,6 +598,8 @@ replace_pseudos_in (rtx *loc, enum machine_mode mem_mode, rtx usage)
if (reg_equiv_constant[regno])
*loc = reg_equiv_constant[regno];
+ else if (reg_equiv_invariant[regno])
+ *loc = reg_equiv_invariant[regno];
else if (reg_equiv_mem[regno])
*loc = reg_equiv_mem[regno];
else if (reg_equiv_address[regno])
@@ -1316,6 +1318,8 @@ reload (rtx first, int global)
VEC_free (rtx_p, heap, substitute_stack);
+ gcc_assert (bitmap_empty_p (&spilled_pseudos));
+
return failure;
}