expr.c (convert_move): Latch mem integer inputs into a register before expanding a multi-instructions...

* expr.c (convert_move): Latch mem integer inputs into a
        register before expanding a multi-instructions sequence.

From-SVN: r189040
This commit is contained in:
Olivier Hainque 2012-06-28 07:56:40 +00:00 committed by Olivier Hainque
parent e07b233d2e
commit ecd49d513b
2 changed files with 11 additions and 3 deletions

View file

@ -1,3 +1,8 @@
2012-06-28 OLivier Hainque <hainque@adacore.com>
* expr.c (convert_move): Latch mem integer inputs into a
register before expanding a multi-instructions sequence.
2012-06-28 Alexandre Oliva <aoliva@redhat.com>,
Uros Bizjak <ubizjak@gmail.com>,
Jakub Jelinek <jakub@redhat.com>

View file

@ -520,10 +520,13 @@ convert_move (rtx to, rtx from, int unsignedp)
/* No special multiword conversion insn; do it by hand. */
start_sequence ();
/* Since we will turn this into a no conflict block, we must ensure
that the source does not overlap the target. */
/* Since we will turn this into a no conflict block, we must ensure the
the source does not overlap the target so force it into an isolated
register when maybe so. Likewise for any MEM input, since the
conversion sequence might require several references to it and we
must ensure we're getting the same value every time. */
if (reg_overlap_mentioned_p (to, from))
if (MEM_P (from) || reg_overlap_mentioned_p (to, from))
from = force_reg (from_mode, from);
/* Get a copy of FROM widened to a word, if necessary. */