This is the mail archive of the gcc@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]

Re: Coloring problem - Pass 0 for finding allocno costs


On 03/18/10 08:30, Frank Isamov wrote:

From the h file:


#define REG_CLASS_CONTENTS                                              \
  {
             \
    {0x00000000, 0x00000000, 0x00000000}, /* NO_REGS*/          \
    {0xFFFFFFFF, 0x0000FFFF, 0x00000000}, /* D_REGS*/          \
    {0x00000000, 0xFFFF0000, 0x0000FFFF}, /* R_REGS*/           \

ABI requires use of R registers for arguments and return value. Other
than that all of these instructions are more or less symmetrical in
sense of using D or R. So, an optimal choice would be use of R for
this example. And if D register is chosen, it involves additional copy
from R to D and back to R.
Define a union class which includes all the registers in D_REGS and R_REGS, then define IRA_COVER_CLASSES to that union class. When register classes are mostly symmetrical, except for stuff like argument passing, return values and the like, you usually get better code by defining IRA_COVER_CLASSES with a single union class rather than the component subclasses.

In fact, if the only reason D & R are separate is calling conventions, then I'd just drop them those classes completely and define GENERAL_REGISTERS. You would typically only define separate register classes if there are instructions which have to operate on specific subsets of the register file.


Jeff



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