re PR middle-end/30751 (internal compiler error: in extract_insn, at recog.c:2108)
PR middle-end/30751 * lower-subreg.c (resolve_simple_move): Decompose subregs in addresses. From-SVN: r121894
This commit is contained in:
parent
291f172e62
commit
30d18db484
2 changed files with 24 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2007-02-13 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
PR middle-end/30751
|
||||
* lower-subreg.c (resolve_simple_move): Decompose subregs in
|
||||
addresses.
|
||||
|
||||
2007-02-13 Stuart Hastings <stuart@apple.com>
|
||||
|
||||
* gcc/config/i386/i386.md (fixuns_truncdfhi2): Require SSE2.
|
||||
|
|
|
@ -501,7 +501,7 @@ resolve_subreg_use (rtx *px, void *data)
|
|||
that the note must be removed. */
|
||||
if (!x)
|
||||
{
|
||||
gcc_assert(!insn);
|
||||
gcc_assert (!insn);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -711,6 +711,23 @@ resolve_simple_move (rtx set, rtx insn)
|
|||
return insn;
|
||||
}
|
||||
|
||||
/* It's possible for the code to use a subreg of a decomposed
|
||||
register while forming an address. We need to handle that before
|
||||
passing the address to emit_move_insn. We pass NULL_RTX as the
|
||||
insn parameter to resolve_subreg_use because we can not validate
|
||||
the insn yet. */
|
||||
if (MEM_P (src) || MEM_P (dest))
|
||||
{
|
||||
int acg;
|
||||
|
||||
if (MEM_P (src))
|
||||
for_each_rtx (&XEXP (src, 0), resolve_subreg_use, NULL_RTX);
|
||||
if (MEM_P (dest))
|
||||
for_each_rtx (&XEXP (dest, 0), resolve_subreg_use, NULL_RTX);
|
||||
acg = apply_change_group ();
|
||||
gcc_assert (acg);
|
||||
}
|
||||
|
||||
/* If SRC is a register which we can't decompose, or has side
|
||||
effects, we need to move via a temporary register. */
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue