From: Joseph Myers Date: Thu, 21 Dec 2006 20:58:57 +0000 (+0000) Subject: rtlanal.c (subreg_get_info): Do not make register size computations for mode sizes... X-Git-Tag: releases/gcc-4.3.0~7870 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5f7fc2b8328f2ecebc668874dd541d9dcd46d17c;p=thirdparty%2Fgcc.git rtlanal.c (subreg_get_info): Do not make register size computations for mode sizes not divisible by the... * rtlanal.c (subreg_get_info): Do not make register size computations for mode sizes not divisible by the number of registers. From-SVN: r120119 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e450bd7ba1db..a6829c9d43b6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-12-21 Joseph Myers + + * rtlanal.c (subreg_get_info): Do not make register size + computations for mode sizes not divisible by the number of + registers. + 2006-12-21 Daniel Berlin * tree-ssa-structalias.c (build_constraint_graph): Insert complex diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index c45a020709f5..bc2da3c7e2a0 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -3028,12 +3028,12 @@ subreg_get_info (unsigned int xregno, enum machine_mode xmode, /* If registers store different numbers of bits in the different modes, we cannot generally form this subreg. */ if (!HARD_REGNO_NREGS_HAS_PADDING (xregno, xmode) - && !HARD_REGNO_NREGS_HAS_PADDING (xregno, ymode)) + && !HARD_REGNO_NREGS_HAS_PADDING (xregno, ymode) + && (GET_MODE_SIZE (xmode) % nregs_xmode) == 0 + && (GET_MODE_SIZE (ymode) % nregs_ymode) == 0) { regsize_xmode = GET_MODE_SIZE (xmode) / nregs_xmode; - gcc_assert (regsize_xmode * nregs_xmode == GET_MODE_SIZE (xmode)); regsize_ymode = GET_MODE_SIZE (ymode) / nregs_ymode; - gcc_assert (regsize_ymode * nregs_ymode == GET_MODE_SIZE (ymode)); if (!rknown && regsize_xmode > regsize_ymode && nregs_ymode > 1) { info->representable_p = false;