Skip to content

Commit 926a19b

Browse files
[mlir][Transforms][NFC] Remove SplitBlockRewrite (#82777)
When splitting a block during a dialect conversion, a `SplitBlockRewrite` object is stored in the dialect conversion state. This commit removes `SplitBlockRewrite`. Instead, a combination of `CreateBlockRewrite` and multiple `MoveOperationRewrite` is used. This change simplifies the internal state of the dialect conversion and is also needed to properly support listeners. `RewriteBase::splitBlock` is now no longer virtual. All necessary information for committing/rolling back a split block rewrite can be deduced from `Listener::notifyBlockInserted` and `Listener::notifyOperationInserted` (which is also called when moving an operation).
1 parent 0e42289 commit 926a19b

File tree

3 files changed

+1
-46
lines changed

3 files changed

+1
-46
lines changed

mlir/include/mlir/IR/PatternMatch.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ class RewriterBase : public OpBuilder {
579579

580580
/// Split the operations starting at "before" (inclusive) out of the given
581581
/// block into a new block, and return it.
582-
virtual Block *splitBlock(Block *block, Block::iterator before);
582+
Block *splitBlock(Block *block, Block::iterator before);
583583

584584
/// Unlink this operation from its current block and insert it right before
585585
/// `existingOp` which may be in the same or another block in the same

mlir/include/mlir/Transforms/DialectConversion.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -741,9 +741,6 @@ class ConversionPatternRewriter final : public PatternRewriter {
741741
/// implemented for dialect conversion.
742742
void eraseBlock(Block *block) override;
743743

744-
/// PatternRewriter hook for splitting a block into two parts.
745-
Block *splitBlock(Block *block, Block::iterator before) override;
746-
747744
/// PatternRewriter hook for inlining the ops of a block into another block.
748745
void inlineBlockBefore(Block *source, Block *dest, Block::iterator before,
749746
ValueRange argValues = std::nullopt) override;

mlir/lib/Transforms/Utils/DialectConversion.cpp

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,6 @@ class IRRewrite {
192192
EraseBlock,
193193
InlineBlock,
194194
MoveBlock,
195-
SplitBlock,
196195
BlockTypeConversion,
197196
ReplaceBlockArg,
198197
// Operation rewrites
@@ -400,30 +399,6 @@ class MoveBlockRewrite : public BlockRewrite {
400399
Block *insertBeforeBlock;
401400
};
402401

403-
/// Splitting of a block. This rewrite is immediately reflected in the IR.
404-
class SplitBlockRewrite : public BlockRewrite {
405-
public:
406-
SplitBlockRewrite(ConversionPatternRewriterImpl &rewriterImpl, Block *block,
407-
Block *originalBlock)
408-
: BlockRewrite(Kind::SplitBlock, rewriterImpl, block),
409-
originalBlock(originalBlock) {}
410-
411-
static bool classof(const IRRewrite *rewrite) {
412-
return rewrite->getKind() == Kind::SplitBlock;
413-
}
414-
415-
void rollback() override {
416-
// Merge back the block that was split out.
417-
originalBlock->getOperations().splice(originalBlock->end(),
418-
block->getOperations());
419-
eraseBlock(block);
420-
}
421-
422-
private:
423-
// The original block from which this block was split.
424-
Block *originalBlock;
425-
};
426-
427402
/// This structure contains the information pertaining to an argument that has
428403
/// been converted.
429404
struct ConvertedArgInfo {
@@ -883,9 +858,6 @@ struct ConversionPatternRewriterImpl : public RewriterBase::Listener {
883858
void notifyBlockInserted(Block *block, Region *previous,
884859
Region::iterator previousIt) override;
885860

886-
/// Notifies that a block was split.
887-
void notifySplitBlock(Block *block, Block *continuation);
888-
889861
/// Notifies that a block is being inlined into another block.
890862
void notifyBlockBeingInlined(Block *block, Block *srcBlock,
891863
Block::iterator before);
@@ -1522,11 +1494,6 @@ void ConversionPatternRewriterImpl::notifyBlockInserted(
15221494
appendRewrite<MoveBlockRewrite>(block, previous, prevBlock);
15231495
}
15241496

1525-
void ConversionPatternRewriterImpl::notifySplitBlock(Block *block,
1526-
Block *continuation) {
1527-
appendRewrite<SplitBlockRewrite>(continuation, block);
1528-
}
1529-
15301497
void ConversionPatternRewriterImpl::notifyBlockBeingInlined(
15311498
Block *block, Block *srcBlock, Block::iterator before) {
15321499
appendRewrite<InlineBlockRewrite>(block, srcBlock, before);
@@ -1665,15 +1632,6 @@ ConversionPatternRewriter::getRemappedValues(ValueRange keys,
16651632
results);
16661633
}
16671634

1668-
Block *ConversionPatternRewriter::splitBlock(Block *block,
1669-
Block::iterator before) {
1670-
assert(!impl->wasOpReplaced(block->getParentOp()) &&
1671-
"attempting to split a block within a replaced/erased op");
1672-
auto *continuation = block->splitBlock(before);
1673-
impl->notifySplitBlock(block, continuation);
1674-
return continuation;
1675-
}
1676-
16771635
void ConversionPatternRewriter::inlineBlockBefore(Block *source, Block *dest,
16781636
Block::iterator before,
16791637
ValueRange argValues) {

0 commit comments

Comments
 (0)