[llvm-branch-commits] [mlir] [mlir][CF] Split `cf-to-llvm` from `func-to-llvm` (PR #120580)
Markus Böck via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Dec 19 07:07:12 PST 2024
================
@@ -94,106 +94,111 @@ struct AssertOpLowering : public ConvertOpToLLVMPattern<cf::AssertOp> {
bool abortOnFailedAssert = true;
};
-/// The cf->LLVM lowerings for branching ops require that the blocks they jump
-/// to first have updated types which should be handled by a pattern operating
-/// on the parent op.
-static LogicalResult verifyMatchingValues(ConversionPatternRewriter &rewriter,
- ValueRange operands,
- ValueRange blockArgs, Location loc,
- llvm::StringRef messagePrefix) {
- for (const auto &idxAndTypes :
- llvm::enumerate(llvm::zip(blockArgs, operands))) {
- int64_t i = idxAndTypes.index();
- Value argValue =
- rewriter.getRemappedValue(std::get<0>(idxAndTypes.value()));
- Type operandType = std::get<1>(idxAndTypes.value()).getType();
- // In the case of an invalid jump, the block argument will have been
- // remapped to an UnrealizedConversionCast. In the case of a valid jump,
- // there might still be a no-op conversion cast with both types being equal.
- // Consider both of these details to see if the jump would be invalid.
- if (auto op = dyn_cast_or_null<UnrealizedConversionCastOp>(
- argValue.getDefiningOp())) {
- if (op.getOperandTypes().front() != operandType) {
- return rewriter.notifyMatchFailure(loc, [&](Diagnostic &diag) {
- diag << messagePrefix;
- diag << "mismatched types from operand # " << i << " ";
- diag << operandType;
- diag << " not compatible with destination block argument type ";
- diag << op.getOperandTypes().front();
- diag << " which should be converted with the parent op.";
- });
- }
- }
- }
- return success();
+/// Helper function for converting branch ops. This function converts the
+/// signature of the given block. If the new block signature is different from
+/// `expectedTypes`, returns "failure".
+static FailureOr<Block *> getConvertedBlock(ConversionPatternRewriter &rewriter,
+ const TypeConverter *converter,
+ Operation *branchOp, Block *block,
+ TypeRange expectedTypes) {
----------------
zero9178 wrote:
(non-actionable side note): Feels like this could be part of dialect conversion in the future 🙂 Similar to `remapValues` but for successors
https://github.com/llvm/llvm-project/pull/120580
More information about the llvm-branch-commits
mailing list