[all-commits] [llvm/llvm-project] 9eb8e7: [MLIR][PDL] Clear up the terminology in the root o...

Stanislav Funiak via All-commits all-commits at lists.llvm.org
Wed Dec 22 11:10:40 PST 2021

  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 9eb8e7b176e9fc38c8df86bd927663c6409ac262
  Author: Stanislav Funiak <stano at cerebras.net>
  Date:   2021-12-22 (Wed, 22 Dec 2021)

  Changed paths:
    M mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp
    M mlir/lib/Conversion/PDLToPDLInterp/RootOrdering.cpp
    M mlir/lib/Conversion/PDLToPDLInterp/RootOrdering.h

  Log Message:
  [MLIR][PDL] Clear up the terminology in the root ordering graph.

Previously, we defined a struct named `RootOrderingCost`, which stored the cost (a pair consisting of the depth of the connector and a tie breaking ID), as well as the connector itself. This created some confusion, because we would sometimes write, e.g., `cost.cost.first` (the first `cost` referring to the struct, the second one referring to the `cost` field, and `first` referring to the depth). In order to address this confusion, here we rename `RootOrderingCost` to `RootOrderingEntry` (keeping the fields and their names as-is).

This clarification exposed non-determinism in the optimal branching algorithm. When choosing the best local parent, we were previuosly only considering its depth (`cost.first`) and not the tie-breaking ID (`cost.second`). This led to non-deterministic choice of the parent when multiple potential parents had the same depth. The solution is to compare both the depth and the tie-breaking ID.

Testing: Rely on existing unit tests. Non-detgerminism is hard to unit-test.

Reviewed By: rriddle, Mogball

Differential Revision: https://reviews.llvm.org/D116079

More information about the All-commits mailing list