[taken from gcc-2.95.3-latest-cvs]

2001-03-16  Jakub Jelinek  <jakub@redhat.com>
	* loop.c (combine_movables): Restrict combinations of constants with
	different modes so that we don't introduce SUBREGs into memory
	addresses.


git-svn-id: file:///srv/svn/repos/haiku/trunk/buildtools@9595 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Oliver Tappe 2004-10-28 18:23:35 +00:00
parent da36187c7a
commit 0e9863ca9a

View File

@ -1481,10 +1481,16 @@ combine_movables (movables, nregs)
width as M1. The check for integer is redundant, but
safe, since the only case of differing destination
modes with equal sources is when both sources are
VOIDmode, i.e., CONST_INT. */
VOIDmode, i.e., CONST_INT.
For 2.95, don't do this if the mode of M1 is Pmode.
This prevents us from substituting SUBREGs for REGs
in memory accesses; not all targets are prepared to
handle this properly. */
(GET_MODE (m->set_dest) == GET_MODE (m1->set_dest)
|| (GET_MODE_CLASS (GET_MODE (m->set_dest)) == MODE_INT
&& GET_MODE_CLASS (GET_MODE (m1->set_dest)) == MODE_INT
&& GET_MODE (m1->set_dest) != Pmode
&& (GET_MODE_BITSIZE (GET_MODE (m->set_dest))
>= GET_MODE_BITSIZE (GET_MODE (m1->set_dest)))))
/* See if the source of M1 says it matches M. */