On Tue, 10 Apr 2012, Steven Bosscher wrote:
> On Tue, Apr 10, 2012 at 4:56 PM, Richard Guenther <rguent...@suse.de> wrote:
> > I'm sure more RTL optimiziation fallout will pop up - and I wonder
> > if we should simply avoid modifying the CFG all over the place and
> > instead do that in cleanup_cfg. Thus, in the if-conversion case,
> > simply do the speculation and leave the empty forwarder blocks
> > to be cleaned up by cleanup_cfg (or for CSE to leave unconditional
> > jumps conditional, as if (0/1), for example).
> The problem with that could be that if(0|1) is not a valid instruction
> for every machine. You may need to set a register (pseudo, or hard
> reg) that may not be available (e.g. if it is live).
Hmm. But we'd have such if(0|1) only in the short period between
the pass changing it to that and the next cleanup_cfg run, which would
ideally be right after that pass. Alternatively passes could leave
the CFG not updated (thus, keep dead edges) but update the conditional
jump instructions only.
That said, currently I'm following the idea of fixing up all places
that pop up ...