rtlanal.c (subreg_get_info): Exit early for simple and common cases.

gcc/
2015-01-25  Alan Hayward  <alan.hayward@arm.com>

	* rtlanal.c (subreg_get_info): Exit early for simple and common
	cases.

From-SVN: r219957
This commit is contained in:
Alan Hayward 2015-01-21 17:53:04 +00:00 committed by Richard Sandiford
parent 122a5d603b
commit 9ab41c76dd
2 changed files with 21 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2015-01-21 Alan Hayward <alan.hayward@arm.com>
* rtlanal.c (subreg_get_info): Exit early for simple and common
cases.
2015-01-21 Richard Henderson <rth@redhat.com>
PR target/64669

View File

@ -3440,6 +3440,22 @@ subreg_get_info (unsigned int xregno, machine_mode xmode,
info->offset = offset / regsize_xmode;
return;
}
/* Quick exit for the simple and common case of extracting whole
subregisters from a multiregister value. */
/* ??? It would be better to integrate this into the code below,
if we can generalize the concept enough and figure out how
odd-sized modes can coexist with the other weird cases we support. */
if (!rknown
&& WORDS_BIG_ENDIAN == REG_WORDS_BIG_ENDIAN
&& regsize_xmode == regsize_ymode
&& (offset % regsize_ymode) == 0)
{
info->representable_p = true;
info->nregs = nregs_ymode;
info->offset = offset / regsize_ymode;
gcc_assert (info->offset + info->nregs <= nregs_xmode);
return;
}
}
/* Lowpart subregs are otherwise valid. */