diff options
author | Bernd Schmidt <bernds@codesourcery.com> | 2010-09-29 21:12:48 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2010-09-29 21:12:48 +0000 |
commit | 907c53bbdf5deda5bb247f535af5fc1f1968946d (patch) | |
tree | c95bf16b6f5cb0dfca7aae4fa3bafd797d79393c | |
parent | 2293974419a6541fb6425249f1340e96a3fb0766 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/reload1.c | 6 |
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; } |