mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-20 05:40:27 +08:00
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:
parent
122a5d603b
commit
9ab41c76dd
@ -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
|
||||
|
@ -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. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user