dblaikie added a comment.

In D83088#2224297 <https://reviews.llvm.org/D83088#2224297>, @nhaehnle wrote:

>> Not sure that's the best place to be designing this fairly integral and 
>> complicated piece of infrastructure from, but hoping we can find some good 
>> places/solutions/etc.
>
> I sent an email to llvm-dev several weeks ago, but things seem to have moved 
> here. Either way is fine with me.

Yeah, sorry, I did see it - but didn't follow it in sufficient detail to 
understand the motivation/tradeoffs so well. (I do usually prefer to keep the 
design discussion on the design discussion threads, before worrying about the 
code specifics - but sometimes hard to understand it without code)

>> But I guess coming back to the original/broader design: What problems is 
>> this intended to solve? The inability to write non-template algorithms over 
>> graphs? What cost does that come with? Are there algorithms that are a bit 
>> too complicated/unwieldy when done as templates? 
>> If it's specifically the static/dynamic dispatch issue - I'm not sure the 
>> type erasure and runtime overhead may be worth the tradeoff here, though if 
>> it is - it'd be good to keep the non-dynamic version common, rather than now 
>> having GraphTraits and CfgTraits done a bit differently, etc.
>
> It's not just over graphs, but taking SSA values into account as well -- that 
> is the key distinction between GraphTraits and CfgTraits.

Not sure I follow - could you give an example of a graph where the GraphTraits 
concept of the Graph and the CfgTraits concept of the graph (or, perhaps more 
importantly - features of the graph/API surface area/properties you can expose 
through the CFG API/concept/thing but not through GraphTraits?

> The most immediate problem is divergence analysis, which is extremely complex 
> and difficult to get right. If I had tried to fight the accidental complexity 
> that comes with attempting to write such an algorithm as C++ templates in 
> addition to the inherent complexity of the algorithm at the same time, I'm 
> not sure I would have been able to produce anything workable at all.
>
> Frankly, I suspect that our dominator tree implementation also suffer because 
> of this, though at least dominator trees are much more well studied in the 
> academic literature, so that helps keep the inherent complexity under control.

I'm totally open to discussing making APIs more usable, for sure - though I'm 
thinking it's likely a concept (like containers in the C++ standard library) 
might be the better direction.

Perhaps some code samples showing how one would interact (probably not whole 
algorithms - maybe something simple like generating a dot diagram for a graph) 
with these things given different APIs (traits, concepts, and runtime 
polymorphism) - and implementations of each kind too.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83088/new/

https://reviews.llvm.org/D83088

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to