[PATCH] D77341: [DomTree] Replace ChildrenGetter with GraphTraits over GraphDiff.

Jakub Kuderski via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 2 20:04:32 PDT 2020


kuhar added inline comments.


================
Comment at: llvm/include/llvm/IR/CFGDiff.h:199
+namespace {
+template <bool B> struct reverse_if_helper;
+template <> struct reverse_if_helper<true> {
----------------
You can use two helper functions taking `integral_constant<bool, true/false>` tags -- should be less verbose


================
Comment at: llvm/include/llvm/Support/GenericDomTreeConstruction.h:89
     bool IsRecalculated = false;
+    GraphDiffT *PreViewOfCFG;
+    const size_t NumLegalized;
----------------
nit: Why pointer instead of keeping a reference?


================
Comment at: llvm/include/llvm/Support/GenericDomTreeConstruction.h:177
       constexpr bool Direction = IsReverse != IsPostDom;  // XOR.
-      for (const NodePtr Succ :
-           ChildrenGetter<Direction>::Get(BB, BatchUpdates)) {
+      typedef
+          typename std::conditional<Direction, Inverse<NodePtr>, NodePtr>::type
----------------
nit: use `using` instead of `typefef`.


================
Comment at: llvm/include/llvm/Support/GenericDomTreeConstruction.h:178
+      typedef
+          typename std::conditional<Direction, Inverse<NodePtr>, NodePtr>::type
+              IsRevType;
----------------
nit: can we use `std::conditional_t<...>` in c++14 to get rid of `typename` and `::type`? Or does it make some buildbots unhappy?


================
Comment at: llvm/include/llvm/Support/GenericDomTreeConstruction.h:179
+          typename std::conditional<Direction, Inverse<NodePtr>, NodePtr>::type
+              IsRevType;
+      using GraphDiffBBPair = std::pair<const GraphDiffT *, IsRevType>;
----------------
nit: I don't find this name very informative. Maybe something like `DirectedBB`?


================
Comment at: llvm/include/llvm/Support/GenericDomTreeConstruction.h:183
+          BatchUpdates ? BatchUpdates->PreViewOfCFG : EmptyGD.get();
+      std::pair<const GraphDiffT *, NodePtr> GDNodePair =
+          std::make_pair(GDTmp, BB);
----------------
`std::pair<const GraphDiffT *, NodePtr> GDNodePair(GDTmp, BB)`


================
Comment at: llvm/include/llvm/Support/GenericDomTreeConstruction.h:185
+          std::make_pair(GDTmp, BB);
+      for (auto &Pair : children<GraphDiffBBPair>(GDNodePair)) {
+        const NodePtr Succ = Pair.second;
----------------
Won't children infer the template parameter based on the passes value? I don't get why the template argument type is a pair where the second argument is a directed nodeptr, but the runtime value is always a plain nodeptr. Couldn't the second pair type also be directed for `GDNodePair`?


================
Comment at: llvm/include/llvm/Support/GenericDomTreeConstruction.h:186
+      for (auto &Pair : children<GraphDiffBBPair>(GDNodePair)) {
+        const NodePtr Succ = Pair.second;
         const auto SIT = NodeToInfo.find(Succ);
----------------
Could this new code be a hoisted into a helper function?


================
Comment at: llvm/include/llvm/Support/GenericDomTreeConstruction.h:1146
       if (Update.getKind() == UpdateKind::Insert)
-        DT.insertEdge(Update.getFrom(), Update.getTo());
+        InsertEdge(DT, nullptr, Update.getFrom(), Update.getTo());
       else
----------------
Could you add a comment next to the nullptr with the argument name?


================
Comment at: llvm/include/llvm/Support/GenericDomTreeConstruction.h:1543
+  // FIXME: Updated to use the PreViewCFG and behave the same as until now.
+  // This behavior is however incorrect; this actually needs the PostViewCFG.
+  GraphDiff<typename DomTreeT::NodePtr, DomTreeT::IsPostDominator> PreViewCFG(
----------------
Does this care about the direction (pre- or post-) at all, or does it need some CFG view? Why is pre-view incorrect?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D77341





More information about the cfe-commits mailing list