This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug optimization/12958] [3.3/3.4 regression] Spill failure when compiling FLAC
- From: "ebotcazou at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 11 Nov 2003 18:11:11 -0000
- Subject: [Bug optimization/12958] [3.3/3.4 regression] Spill failure when compiling FLAC
- References: <20031108041002.12958.aaronw@attbi.com>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From ebotcazou at gcc dot gnu dot org 2003-11-11 18:11 -------
The compiler fails to find a register in the class I64_REGS although %o5 and %o7
are available, because HARD_REGNO_MODE_OK returns 0 for them on DImode. It turns
out that hard_regno_mode_classes is hard_32bit_mode_classes even with -mcpu=v9
so, since %o5 and %o7 are odd-numbered, they can't hold a double-word quantity.
Tweaking HARD_REGNO_MODE_OK is not sufficient, because HARD_REGNO_NREGS returns
2 for both registers on DImode and %o6 and %l0 are not usable.
I think this is fixable neither for 3.3.x nor for the upcoming 3.4 release
because this would be too pervasive a change. The workaround is to compile with
-mcpu=v8.
David, I think this would be a good testcase for the "64-bit operations with
32-bit ABI" stuff.
--
What |Removed |Added
----------------------------------------------------------------------------
CC| |davem at redhat dot com
Severity|critical |normal
Target Milestone|3.3.3 |tree-ssa
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12958