function.c (fixup_var_refs_1): For paradoxical (subreg VAR), replace VAR, don't try the subreg.
* function.c (fixup_var_refs_1) <SET, handling VAR in SET_SRC>: For paradoxical (subreg VAR), replace VAR, don't try the subreg. From-SVN: r52217
This commit is contained in:
parent
4b72e8edac
commit
1ab3e58a2f
@ -1,3 +1,8 @@
|
||||
2002-04-12 Hans-Peter Nilsson <hp@bitrange.com>
|
||||
|
||||
* function.c (fixup_var_refs_1) <SET, handling VAR in SET_SRC>:
|
||||
For paradoxical (subreg VAR), replace VAR, don't try the subreg.
|
||||
|
||||
Fri Apr 12 10:51:38 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
||||
|
||||
* sh.c (broken_move): Constant 0. / 1. load is OK if there is
|
||||
|
@ -2370,15 +2370,29 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements, no_share)
|
||||
{
|
||||
rtx pat, last;
|
||||
|
||||
replacement = find_fixup_replacement (replacements, SET_SRC (x));
|
||||
if (replacement->new)
|
||||
SET_SRC (x) = replacement->new;
|
||||
else if (GET_CODE (SET_SRC (x)) == SUBREG)
|
||||
SET_SRC (x) = replacement->new
|
||||
= fixup_memory_subreg (SET_SRC (x), insn, 0);
|
||||
if (GET_CODE (SET_SRC (x)) == SUBREG
|
||||
&& (GET_MODE_SIZE (GET_MODE (SET_SRC (x)))
|
||||
> GET_MODE_SIZE (GET_MODE (var))))
|
||||
{
|
||||
/* This (subreg VAR) is now a paradoxical subreg. We need
|
||||
to replace VAR instead of the subreg. */
|
||||
replacement = find_fixup_replacement (replacements, var);
|
||||
if (replacement->new == NULL_RTX)
|
||||
replacement->new = gen_reg_rtx (GET_MODE (var));
|
||||
SUBREG_REG (SET_SRC (x)) = replacement->new;
|
||||
}
|
||||
else
|
||||
SET_SRC (x) = replacement->new
|
||||
= fixup_stack_1 (SET_SRC (x), insn);
|
||||
{
|
||||
replacement = find_fixup_replacement (replacements, SET_SRC (x));
|
||||
if (replacement->new)
|
||||
SET_SRC (x) = replacement->new;
|
||||
else if (GET_CODE (SET_SRC (x)) == SUBREG)
|
||||
SET_SRC (x) = replacement->new
|
||||
= fixup_memory_subreg (SET_SRC (x), insn, 0);
|
||||
else
|
||||
SET_SRC (x) = replacement->new
|
||||
= fixup_stack_1 (SET_SRC (x), insn);
|
||||
}
|
||||
|
||||
if (recog_memoized (insn) >= 0)
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user