Ramana Radhakrishnan wrote:
> Hi , 
>
> I am working on integrating a private port into the Dataflow branch and
> am running into a couple of issues with ICEs in global.c  . The ICE is
> at gcc_assert ( REGS_LIVE (i)) at line 534 in global_alloc in
> global.c .. 
>
> However because of the way we generate calls in the backend with an
> extra clobber register for calculating the return address. The temporary
> which gets clobbered is here. 
>
> (call_insn:HI 32 29 34
> 4 ../../../../gnu/libgcc/../gcc/unwind-dw2-fde.c:487 (parallel [
>             (set (reg:SI 1 $r1)
>                 (call (mem:SI (reg/v/f:SI 145 [ fde_compare ]) [0 S4
> A32])
>                     (const_int 0 [0x0])))
>             (use (const_int 0 [0x0]))
>             (clobber (reg:SI 31 $link))
>             (clobber (reg:SI 153))
>         ]) 40 {call_value_indirect} (expr_list:REG_DEAD (reg:SI 3 $c3)
>         (expr_list:REG_DEAD (reg:SI 2 $r2)
>             (nil)))
>     (expr_list:REG_DEP_TRUE (use (reg:SI 3 $r3))
>         (expr_list:REG_DEP_TRUE (use (reg:SI 2 $r2))
>             (expr_list:REG_DEP_TRUE (use (reg:SI 1 $r1 [ ob ]))
>                 (nil)))))
>
>
>
>
> Is it something to do with the way that REGS_EVER_LIVE is calculated ?
> If so where does this get updated in the new infrastructure. I am still
> feeling my way through the df code , so any help would be appreciated.
> Thanks in advance. 
>
> This is with revision 123253 of the DF branch which is slightly older .
> I am considering moving up but wanted to check before that . 
>
>
> cheers
> Ramana
>
>
>
>   
There may have been a few fixes that might help so you should try
updating first. 
There is a fix was that causes the REG_N... information to be rebuilt at
the start of global rather than reusing the info computed during local. 
If you are adding this pseudo very late, this will likely fix the problem.

Fixing your kind of bug was not the reason for this fix.   The fix
solves an issue where the regs live across a call computed during local
is different than the way it is computed during global. 

This kind of information is built by the RI problem when df_analyze is
called and that problem is not resolved when df_analyze is called inside
global.

Hope this fixes you issue.

Kenny
>
>
>
>
>
>
>
>   

Reply via email to