[all-commits] [llvm/llvm-project] d4c41b: [mlir][Transforms] Dialect Conversion: Convert ent...
Matthias Springer via All-commits
all-commits at lists.llvm.org
Mon Nov 3 15:35:14 PST 2025
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: d4c41b7fa30be06b5250c0d5abc7a26a83420321
https://github.com/llvm/llvm-project/commit/d4c41b7fa30be06b5250c0d5abc7a26a83420321
Author: Matthias Springer <me at m-sp.org>
Date: 2025-11-03 (Mon, 03 Nov 2025)
Changed paths:
M mlir/lib/Transforms/Utils/DialectConversion.cpp
A mlir/test/Transforms/test-legalizer-no-materializations.mlir
M mlir/test/Transforms/test-legalizer.mlir
M mlir/test/lib/Dialect/Test/TestPatterns.cpp
Log Message:
-----------
[mlir][Transforms] Dialect Conversion: Convert entry block only (#165180)
When converting a function, convert only the entry block signature. The
remaining block signatures should be converted by the respective
branching ops. The `FuncToLLVM` / `ControlFlowToLLVM` patterns already
use that design.
```c++
struct BranchOpLowering : public ConvertOpToLLVMPattern<cf::BranchOp> {
LogicalResult
matchAndRewrite(cf::BranchOp op, OneToNOpAdaptor adaptor,
ConversionPatternRewriter &rewriter) const override {
// Convert successor block.
SmallVector<Value> flattenedAdaptor = flattenValues(adaptor.getOperands());
FailureOr<Block *> convertedBlock =
getConvertedBlock(rewriter, getTypeConverter(), op, op.getSuccessor(),
TypeRange(ValueRange(flattenedAdaptor)));
// ...
}
};
```
This is consistent with the fact that operations from unreachable blocks
are not put on the initial worklist.
With this change, parent ops are no longer recursively legalized when
inserting a block, simplifying the conversion driver a bit.
Note for LLVM integration: If you are seeing failures, make sure to:
- Drop `converter.isLegal(&op.getBody())` when checking the legality of
a function op. Only the entry block signature / function type should be
taken into account.
- If you need to convert all reachable blocks and are using `cf`
branching ops, add `populateCFStructuralTypeConversionsAndLegality`.
- If you need to convert all reachable blocks and are using custom
branching ops, implement and populate custom structural type conversion
patterns, similar to `populateCFStructuralTypeConversionsAndLegality`.
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list