Setup OpBuilder to support detached block in loopUnrollByFactor (NFC)
authorMehdi Amini <joker.eph@gmail.com>
Thu, 1 Apr 2021 23:34:03 +0000 (23:34 +0000)
committerMehdi Amini <joker.eph@gmail.com>
Thu, 1 Apr 2021 23:34:03 +0000 (23:34 +0000)
Setting the builder from a block is looking up for a parent operation
to get a context, instead by setting up the builder with an explicit
context we can support invoking this helper in absence of a parent
operation.

mlir/lib/Transforms/Utils/LoopUtils.cpp

index 5aaa8fa..e9bc2eb 100644 (file)
@@ -1268,8 +1268,9 @@ LogicalResult mlir::loopUnrollByFactor(scf::ForOp forOp,
 
   // Create epilogue clean up loop starting at 'upperBoundUnrolled'.
   if (generateEpilogueLoop) {
-    OpBuilder epilogueBuilder(forOp->getBlock(),
-                              std::next(Block::iterator(forOp)));
+    OpBuilder epilogueBuilder(forOp->getContext());
+    epilogueBuilder.setInsertionPoint(forOp->getBlock(),
+                                      std::next(Block::iterator(forOp)));
     auto epilogueForOp = cast<scf::ForOp>(epilogueBuilder.clone(*forOp));
     epilogueForOp.setLowerBound(upperBoundUnrolled);