On Mon, Dec 07, 2015 at 11:15:33PM -0700, Jeff Law wrote: > > First in the series. This merely refactors code from tree-ssa-sccvn.c into > domwalk.c so that other walkers can use it as they see fit. > > > There's an initialization function which sets all edges to executable. > > There's a test function to see if a block is reachable. > > There's a propagation function to propagate the unreachable property to > edges. > > Finally a function to clear m_unreachable_dom. I consider this a wart. > Essentially that data member contains the highest unreachable block in the > dominator tree. Once we've finished processing that block's children, we > need to clear the member. Ideally clients wouldn't need to call this member > function.
Hmm, I expect you thought about this, but why not always see if we need to clear it before calling after_dom_children () ? I think that would amount to an extra compare of a register and cached memory (we're just about to use the vtable pointer anyway) so I expect that wouldn't effect performance significantly. Thinking about this more I wonder if we could move more of this into the dom walker, and skip calling before / after dom_children on unreachable blocks all together. That would seem to work for sccvn, but I'm not sure about what tree-ssa-dom.c is doing with the mark pushing and clearing. Trev