This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug optimization/12958] [3.3/3.4 regression] Spill failure when compiling FLAC


------- 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]