diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bb4a382cf5a..33df7c513db 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-05-29 Roger Sayle + Richard Henderson + + * ifcvt.c (noce_emit_move_insn): Construct a SET pattern directly + if the RHS isn't suitable for calling emit_move_insn. + 2005-05-29 Kazu Hirata * tree-ssa-ccp.c (ccp_fold): Return immediately after calling diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c index 9575e62b2f1..5c822b64d95 100644 --- a/gcc/ifcvt.c +++ b/gcc/ifcvt.c @@ -691,7 +691,11 @@ noce_emit_move_insn (rtx x, rtx y) optab ot; start_sequence (); - insn = emit_move_insn (x, y); + /* Check that the SET_SRC is reasonable before calling emit_move_insn, + otherwise construct a suitable SET pattern ourselves. */ + insn = (OBJECT_P (y) || CONSTANT_P (y) || GET_CODE (y) == SUBREG) + ? emit_move_insn (x, y) + : emit_insn (gen_rtx_SET (VOIDmode, x, y)); seq = get_insns (); end_sequence();