[flang-commits] [flang] [mlir] [mlir][Transforms] Support 1:N mappings in `ConversionValueMapping` (PR #116524)
Markus Böck via flang-commits
flang-commits at lists.llvm.org
Fri Jan 3 06:04:57 PST 2025
================
@@ -53,6 +54,55 @@ static void logFailure(llvm::ScopedPrinter &os, StringRef fmt, Args &&...args) {
});
}
+/// Given two insertion points in the same block, choose the later one.
+static OpBuilder::InsertPoint
+chooseLaterInsertPointInBlock(OpBuilder::InsertPoint a,
+ OpBuilder::InsertPoint b) {
+ assert(a.getBlock() == b.getBlock() && "expected same block");
+ Block *block = a.getBlock();
+ if (a.getPoint() == block->begin())
+ return b;
+ if (b.getPoint() == block->begin())
+ return a;
+ if (a.getPoint()->isBeforeInBlock(&*b.getPoint()))
+ return b;
+ return a;
+}
+
+/// Helper function that chooses the insertion point among the two given ones
+/// that is later.
+// TODO: Extend DominanceInfo API to work with block iterators.
+static OpBuilder::InsertPoint chooseLaterInsertPoint(OpBuilder::InsertPoint a,
+ OpBuilder::InsertPoint b) {
+ // Case 1: Same block.
+ if (a.getBlock() == b.getBlock())
+ return chooseLaterInsertPointInBlock(a, b);
+
+ // Case 2: Different block, but same region.
+ if (a.getBlock()->getParent() == b.getBlock()->getParent()) {
+ DominanceInfo domInfo;
+ if (domInfo.properlyDominates(a.getBlock(), b.getBlock()))
+ return b;
+ if (domInfo.properlyDominates(b.getBlock(), a.getBlock()))
+ return a;
+ // Neither of the two blocks dominante each other.
+ llvm_unreachable("unable to find valid insertion point");
+ }
+
+ // Case 3: b's region contains a: choose a.
+ if (Operation *aParent = b.getBlock()->getParent()->findAncestorOpInRegion(
----------------
zero9178 wrote:
```suggestion
if (b.getBlock()->getParent()->findAncestorOpInRegion(
```
This variable is unused. Ditto below
https://github.com/llvm/llvm-project/pull/116524
More information about the flang-commits
mailing list