On 12/08/2015 07:27 AM, Richard Biener wrote:

I wonder if it makes more sense to integrate this with the
domwalker itself.  Add a constructor flag to it and do everything
in itself.  By letting the before_dom_children return a taken edge
(or NULL if unknown) it can drive the outgoing edge marking. And
the domwalk worker would simply not recurse to dom children for
unreachable blocks.

So interface-wise do
[ ... ]
Close :-)

If skip_unreachable_blocks is true, then we want the walker to initialize EDGE_EXECUTABLE automatically. So we drop the member initialization and constructor body from domwalk.h and instead have a ctor in domwalk.c where we can initialize the private members and set EDGE_EXECUTABLE as needed.

My first iteration let the clients clear EDGE_EXECUTABLE as they found conditionals that could be optimized. That was pretty clean and localized in sccvn & dom.

If we have the before_dom_children return the taken edge, then we have to twiddle all the clients due to the api change in before_dom_children. . There's ~18 in total, so it's not too bad.

2 of the 18 clearly need to use the skip_unreachable_blocks capability (dom and sccvn). 2 others might be able to use it (tree-ssa-pre.c and tree-ssa-propagate.c) I converted dom and sccvn, but not pre and the generic propagation engine.

I can submit the iteration which lets clients clear EDGE_EXECUTABLE, or the iteration where the clients return the taken edge (or NULL) from the before_dom_children callback.

Either is fine with me, so if you have a preference, let me know.

jeff

Reply via email to