[RFC] Fix PR rtl-optimization/33732

Eric Botcazou ebotcazou@libertysurf.fr
Tue Nov 6 13:34:00 GMT 2007


>    Can't df be used to update the REG_DEAD notes right after renumbering
> pseudos into hard regs? IMHO that'd be better than making a part of reload
> handle REG_DEAD notes specially.

We already do that though, see PR middle-end/20973.

> It's difficult enough as it is to predict what reload will do for a given
> input. Also, there may well be other places in reload which are fooled by
> incorrect REG_DEAD notes. 

Of course all of them (3) would need to be updated (like for the above PR).

>    Currently, we stop df from keeping its data up-to-date shortly before
> calling reload() (in two places in global.c). Suppose we move that into
> reload1.c/reload() itself after this bit:
>
>   /* Alter each pseudo-reg rtx to contain its hard reg number.
>      Assign stack slots to the pseudos that lack hard regs or equivalents.
>      Do not touch virtual registers.  */
>
>   for (i = LAST_VIRTUAL_REGISTER + 1; i < max_regno; i++)
>     alter_reg (i, -1);
>
>    At this point, df should be able to update the REG_DEAD notes. Then we
> can turn off df rescanning for the rest of reload.

I'm not a specialist of DF so I don't know whether this is realistically 
doable, but the comment doesn't sound very encouraging:

      /* There is just too much going on in the register allocators to
	 keep things up to date.  At the end we have to rescan anyway
	 because things change when the reload_completed flag is set.  
	 So we just turn off scanning and we will rescan by hand.  

	 However, we needed to do the rescanning before this point to
	 get the new insns scanned inserted by local_alloc scanned for
	 global_conflicts.  */
      df_set_flags (DF_NO_INSN_RESCAN);


Comments on this comment?

-- 
Eric Botcazou



More information about the Gcc-patches mailing list