aboutsummaryrefslogtreecommitdiff
path: root/gcc/loop-invariant.c
diff options
context:
space:
mode:
authorZdenek Dvorak <dvorakz@suse.cz>2006-02-13 12:21:23 +0100
committerZdenek Dvorak <rakdver@gcc.gnu.org>2006-02-13 11:21:23 +0000
commit3e8b04461f0106f74256a92df8aae1fd88e086c6 (patch)
tree934621970c423e615e444a8421dba6db457cfcfb /gcc/loop-invariant.c
parent28c84d634e56c98a867970eb62ce1224556ba7e1 (diff)
downloadgcc-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.c11
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);
}
}