diff options
author | Zdenek Dvorak <dvorakz@suse.cz> | 2006-02-13 12:21:23 +0100 |
---|---|---|
committer | Zdenek Dvorak <rakdver@gcc.gnu.org> | 2006-02-13 11:21:23 +0000 |
commit | 3e8b04461f0106f74256a92df8aae1fd88e086c6 (patch) | |
tree | 934621970c423e615e444a8421dba6db457cfcfb /gcc/loop-invariant.c | |
parent | 28c84d634e56c98a867970eb62ce1224556ba7e1 (diff) | |
download | gcc-3e8b04461f0106f74256a92df8aae1fd88e086c6.zip gcc-3e8b04461f0106f74256a92df8aae1fd88e086c6.tar.gz gcc-3e8b04461f0106f74256a92df8aae1fd88e086c6.tar.bz2 |
re PR rtl-optimization/26222 (build failuring in libjava)
PR rtl-optimization/26222
* function.c (assign_stack_temp_for_type): Do not reuse stack slots
after tree->rtl expansion.
* loop-invariant.c (move_invariant_reg): Use force_operand on rhs
before passing it to emit_move_insn.
From-SVN: r110912
Diffstat (limited to 'gcc/loop-invariant.c')
-rw-r--r-- | gcc/loop-invariant.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/loop-invariant.c b/gcc/loop-invariant.c index fd787a9..eb6719e 100644 --- a/gcc/loop-invariant.c +++ b/gcc/loop-invariant.c @@ -1075,7 +1075,7 @@ move_invariant_reg (struct loop *loop, unsigned invno) struct invariant *repr = VEC_index (invariant_p, invariants, inv->eqto); unsigned i; basic_block preheader = loop_preheader_edge (loop)->src; - rtx reg, set; + rtx reg, set, seq, op; struct use *use; bitmap_iterator bi; @@ -1115,7 +1115,14 @@ move_invariant_reg (struct loop *loop, unsigned invno) } else { - emit_insn_after (gen_move_insn (reg, SET_SRC (set)), BB_END (preheader)); + start_sequence (); + op = force_operand (SET_SRC (set), reg); + if (op != reg) + emit_move_insn (reg, op); + seq = get_insns (); + end_sequence (); + + emit_insn_after (seq, BB_END (preheader)); delete_insn (inv->insn); } } |