I found if I define a new register class that covers both GR_REGS and PR_REGS, 
the issue can be solved. New IRA spill the predicate register to general 
regsister first instead of memory.  Is this right approach? 

 #define IRA_COVER_CLASSES           \
 {              \
   GRPR_REGS, M_REGS, BXBC_REGS, LIM_REG_CLASSES      \
 }

> -----Original Message-----
> From: gcc-ow...@gcc.gnu.org [mailto:gcc-ow...@gcc.gnu.org] On 
> Behalf Of Bingfeng Mei
> Sent: 02 January 2009 11:50
> To: gcc@gcc.gnu.org
> Cc: Vladimir Makarov
> Subject: [IRA] New register allocator question
> 
> Hello,
> I recently ported our GCC to new IRA by following mainline 
> development.  The only interface I added is 
> IRA_COVER_CLASSES. Our architecture has predicate register 
> file. When predicate register has to be spilled, the new IRA 
> produces inferior code to the old register allocator.  The 
> old allocator first tries to spill to general register file, 
> which is far cheaper on our architecture than spilling to 
> memory. The IRA always spills the predicate register to 
> memory directly.
>  
> #define IRA_COVER_CLASSES           \
> {              \
>   GR_REGS, PR_REGS, M_REGS, BXBC_REGS, LIM_REG_CLASSES      \
> }
>  
> Apart from above macro, what other interfaces/parameters I 
> can tune to change this behaviour in new IRA?  Thanks in advance.
>  
> Happy New Year,
> Bingfeng Mei
>  
> Broadcom UK.
> 
> 
> 

Reply via email to