loop.c (move_movables): Note issues with replacing REGs with SUBREGs.

�
        * loop.c (move_movables): Note issues with replacing REGs with
        SUBREGs.
        * mips.h (GO_IF_LEGITIMATE_ADDRESS): Handle SUBREGs properly.

From-SVN: r27573
This commit is contained in:
Jeffrey A Law 1999-06-17 13:29:11 +00:00 committed by Jeff Law
parent 048f60dcb1
commit 51f0646f8a
3 changed files with 29 additions and 3 deletions

View File

@ -1,3 +1,9 @@
Thu Jun 17 14:25:08 1999 Jeffrey A Law (law@cygnus.com)
* loop.c (move_movables): Note issues with replacing REGs with
SUBREGs.
* mips.h (GO_IF_LEGITIMATE_ADDRESS): Handle SUBREGs properly.
Thu Jun 17 13:28:30 1999 David O'Brien <obrien@FreeBSD.org>
* i386/freebsd-elf.h (LINK_SPEC): Fix typo.

View File

@ -2858,6 +2858,9 @@ typedef struct mips_args {
GO_DEBUG_RTX (xinsn); \
} \
\
while (GET_CODE (xinsn) == SUBREG) \
xinsn = SUBREG_REG (xinsn); \
\
/* The mips16 can only use the stack pointer as a base register when \
loading SImode or DImode values. */ \
if (GET_CODE (xinsn) == REG && REG_MODE_OK_FOR_BASE_P (xinsn, MODE)) \
@ -2873,6 +2876,8 @@ typedef struct mips_args {
register rtx xlow0 = XEXP (xinsn, 0); \
register rtx xlow1 = XEXP (xinsn, 1); \
\
while (GET_CODE (xlow0) == SUBREG) \
xlow0 = SUBREG_REG (xlow0); \
if (GET_CODE (xlow0) == REG \
&& REG_MODE_OK_FOR_BASE_P (xlow0, MODE) \
&& mips_check_split (xlow1, MODE)) \
@ -2883,8 +2888,16 @@ typedef struct mips_args {
{ \
register rtx xplus0 = XEXP (xinsn, 0); \
register rtx xplus1 = XEXP (xinsn, 1); \
register enum rtx_code code0 = GET_CODE (xplus0); \
register enum rtx_code code1 = GET_CODE (xplus1); \
register enum rtx_code code0; \
register enum rtx_code code1; \
\
while (GET_CODE (xplus0) == SUBREG) \
xplus0 = SUBREG_REG (xplus0); \
code0 = GET_CODE (xplus0); \
\
while (GET_CODE (xplus1) == SUBREG) \
xplus1 = SUBREG_REG (xplus1); \
code1 = GET_CODE (xplus1); \
\
/* The mips16 can only use the stack pointer as a base register \
when loading SImode or DImode values. */ \

View File

@ -2170,7 +2170,14 @@ move_movables (movables, threshold, insn_count, loop_start, end, nregs)
/* Schedule the reg loaded by M1
for replacement so that shares the reg of M.
If the modes differ (only possible in restricted
circumstances, make a SUBREG. */
circumstances, make a SUBREG.
Note this assumes that the target dependent files
treat REG and SUBREG equally, including within
GO_IF_LEGITIMATE_ADDRESS and in all the
predicates since we never verify that replacing the
original register with a SUBREG results in a
recognizable insn. */
if (GET_MODE (m->set_dest) == GET_MODE (m1->set_dest))
reg_map[m1->regno] = m->set_dest;
else