mirror of git://gcc.gnu.org/git/gcc.git
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:
parent
e07b233d2e
commit
ecd49d513b
|
|
@ -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>,
|
2012-06-28 Alexandre Oliva <aoliva@redhat.com>,
|
||||||
Uros Bizjak <ubizjak@gmail.com>,
|
Uros Bizjak <ubizjak@gmail.com>,
|
||||||
Jakub Jelinek <jakub@redhat.com>
|
Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
|
||||||
|
|
@ -520,10 +520,13 @@ convert_move (rtx to, rtx from, int unsignedp)
|
||||||
/* No special multiword conversion insn; do it by hand. */
|
/* No special multiword conversion insn; do it by hand. */
|
||||||
start_sequence ();
|
start_sequence ();
|
||||||
|
|
||||||
/* Since we will turn this into a no conflict block, we must ensure
|
/* Since we will turn this into a no conflict block, we must ensure the
|
||||||
that the source does not overlap the target. */
|
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);
|
from = force_reg (from_mode, from);
|
||||||
|
|
||||||
/* Get a copy of FROM widened to a word, if necessary. */
|
/* Get a copy of FROM widened to a word, if necessary. */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue