================ @@ -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 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits