diff options
author | Joseph Myers <joseph@codesourcery.com> | 2007-01-02 00:38:21 +0000 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2007-01-02 00:38:21 +0000 |
commit | a446b4e815275c0ba3ea5e2119b0084284777ac7 (patch) | |
tree | 3a591d5196a5a6c1c2ecdc330d7d323242f600da /gcc/rtlanal.c | |
parent | 27c293ef97537edd7745e096ebf92c8e8b20d85b (diff) | |
download | gcc-a446b4e815275c0ba3ea5e2119b0084284777ac7.zip gcc-a446b4e815275c0ba3ea5e2119b0084284777ac7.tar.gz gcc-a446b4e815275c0ba3ea5e2119b0084284777ac7.tar.bz2 |
re PR middle-end/30311 (revision 120211 failed to compile perlbench)
gcc:
PR middle-end/30311
* caller-save.c (add_stored_regs): Only handle SUBREGs if inner
REG is a hard register. Do not modify REG before calling
subreg_nregs.
* rtlanal.c (subreg_get_info): Don't assert size of XMODE is a
multiple of the size of YMODE for certain lowpart cases.
gcc/testsuite:
* gcc.c-torture/compile/pr30311.c: New test.
From-SVN: r120329
Diffstat (limited to 'gcc/rtlanal.c')
-rw-r--r-- | gcc/rtlanal.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index bc2da3c..2d15663 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -1,6 +1,6 @@ /* Analyze RTL for GNU compiler. Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of GCC. @@ -3057,6 +3057,13 @@ subreg_get_info (unsigned int xregno, enum machine_mode xmode, { info->representable_p = true; rknown = true; + + if (offset == 0 || nregs_xmode == nregs_ymode) + { + info->offset = 0; + info->nregs = nregs_ymode; + return; + } } /* This should always pass, otherwise we don't know how to verify |