Hello,
If you're interested, the LLVM critical edge splitter updates
dominator
sets, immediate dominators, dominator trees, and dominance
frontiers (in
significantly less than 150 LOC). The code is here:
http://llvm.cs.uiuc.edu/doxygen/BreakCriticalEdges_8cpp-source.html
I'm not sure that I understand what the problem is with
presplitting all
edges, but at least this will give you a nice simple incremental
way to do
it without recalculating the world. :)
the real problem for me is that things like splitting the edges
should
just work. Yes, recalculating the dominance information is feasible,
but unnecessary, in this particular case.
Why doesn't edge splitting work? What's the sticky part about it?
It's a
trivially simple operation... the link above contains the code to
insert
blocks and update PHI nodes as appropriate as well. What am I missing
here?
that we managed to make such an ugly intermediate representation that
this triviality became 500 lines of code; fortunately we are slowly
getting it saner (and are introducing stupid bugs like this one in the
progress).