Reapply "Reland "[mlir][Affine] Handle null parent op in getAffineParallelInductionVarOwner" (#142785)"

This reverts commit 178b64e75b.

The author misread the report of the failure, and thought that it broke
the CI again. Reland the fix.
This commit is contained in:
hanhanW
2025-06-04 09:05:15 -07:00
parent 178b64e75b
commit d96447b4d3
7 changed files with 99 additions and 1 deletions

View File

@@ -2667,7 +2667,7 @@ AffineParallelOp mlir::affine::getAffineParallelInductionVarOwner(Value val) {
if (!ivArg || !ivArg.getOwner())
return nullptr;
Operation *containingOp = ivArg.getOwner()->getParentOp();
auto parallelOp = dyn_cast<AffineParallelOp>(containingOp);
auto parallelOp = dyn_cast_if_present<AffineParallelOp>(containingOp);
if (parallelOp && llvm::is_contained(parallelOp.getIVs(), val))
return parallelOp;
return nullptr;

View File

@@ -0,0 +1,10 @@
// RUN: mlir-opt -test-memref-to-llvm-with-transforms %s | FileCheck %s
// Checks that the program does not crash. The functionality of the pattern is
// already checked in test/Dialect/MemRef/*.mlir
func.func @subview_folder(%arg0: memref<100x100xf32>, %arg1: index, %arg2: index, %arg3: index, %arg4: index) -> memref<?x?xf32, strided<[100, 1], offset: ?>> {
%subview = memref.subview %arg0[%arg1, %arg2] [%arg3, %arg4] [1, 1] : memref<100x100xf32> to memref<?x?xf32, strided<[100, 1], offset: ?>>
return %subview : memref<?x?xf32, strided<[100, 1], offset: ?>>
}
// CHECK-LABEL: llvm.func @subview_folder

View File

@@ -1,4 +1,5 @@
add_subdirectory(ConvertToSPIRV)
add_subdirectory(FuncToLLVM)
add_subdirectory(MathToVCIX)
add_subdirectory(MemRefToLLVM)
add_subdirectory(VectorToSPIRV)

View File

@@ -0,0 +1,22 @@
# Exclude tests from libMLIR.so
add_mlir_library(MLIRTestMemRefToLLVMWithTransforms
TestMemRefToLLVMWithTransforms.cpp
EXCLUDE_FROM_LIBMLIR
LINK_LIBS PUBLIC
MLIRTestDialect
)
mlir_target_link_libraries(MLIRTestMemRefToLLVMWithTransforms PUBLIC
MLIRFuncToLLVM
MLIRLLVMCommonConversion
MLIRLLVMDialect
MLIRMemRefTransforms
MLIRPass
)
target_include_directories(MLIRTestMemRefToLLVMWithTransforms
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/../../Dialect/Test
${CMAKE_CURRENT_BINARY_DIR}/../../Dialect/Test
)

View File

@@ -0,0 +1,62 @@
//===- TestMemRefToLLVMWithTransforms.cpp ---------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "mlir/Conversion/FuncToLLVM/ConvertFuncToLLVM.h"
#include "mlir/Conversion/LLVMCommon/ConversionTarget.h"
#include "mlir/Conversion/LLVMCommon/LoweringOptions.h"
#include "mlir/Conversion/LLVMCommon/TypeConverter.h"
#include "mlir/Conversion/MemRefToLLVM/MemRefToLLVM.h"
#include "mlir/Dialect/Func/IR/FuncOps.h"
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
#include "mlir/Dialect/MemRef/Transforms/Transforms.h"
#include "mlir/IR/PatternMatch.h"
#include "mlir/Pass/Pass.h"
using namespace mlir;
namespace {
struct TestMemRefToLLVMWithTransforms
: public PassWrapper<TestMemRefToLLVMWithTransforms,
OperationPass<ModuleOp>> {
MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TestMemRefToLLVMWithTransforms)
void getDependentDialects(DialectRegistry &registry) const final {
registry.insert<LLVM::LLVMDialect>();
}
StringRef getArgument() const final {
return "test-memref-to-llvm-with-transforms";
}
StringRef getDescription() const final {
return "Tests conversion of MemRef dialects + `func.func` to LLVM dialect "
"with MemRef transforms.";
}
void runOnOperation() override {
MLIRContext *ctx = &getContext();
LowerToLLVMOptions options(ctx);
LLVMTypeConverter typeConverter(ctx, options);
RewritePatternSet patterns(ctx);
memref::populateExpandStridedMetadataPatterns(patterns);
populateFuncToLLVMConversionPatterns(typeConverter, patterns);
LLVMConversionTarget target(getContext());
if (failed(applyPartialConversion(getOperation(), target,
std::move(patterns))))
signalPassFailure();
}
};
} // namespace
namespace mlir::test {
void registerTestMemRefToLLVMWithTransforms() {
PassRegistration<TestMemRefToLLVMWithTransforms>();
}
} // namespace mlir::test

View File

@@ -28,6 +28,7 @@ if(MLIR_INCLUDE_TESTS)
MLIRMathTestPasses
MLIRTestMathToVCIX
MLIRMemRefTestPasses
MLIRTestMemRefToLLVMWithTransforms
MLIRMeshTest
MLIRNVGPUTestPasses
MLIRSCFTestPasses

View File

@@ -130,6 +130,7 @@ void registerTestMathToVCIXPass();
void registerTestIrdlTestDialectConversionPass();
void registerTestMemRefDependenceCheck();
void registerTestMemRefStrideCalculation();
void registerTestMemRefToLLVMWithTransforms();
void registerTestMeshReshardingSpmdizationPass();
void registerTestMeshSimplificationsPass();
void registerTestMultiBuffering();
@@ -275,6 +276,7 @@ void registerTestPasses() {
mlir::test::registerTestMathToVCIXPass();
mlir::test::registerTestMemRefDependenceCheck();
mlir::test::registerTestMemRefStrideCalculation();
mlir::test::registerTestMemRefToLLVMWithTransforms();
mlir::test::registerTestMeshReshardingSpmdizationPass();
mlir::test::registerTestMeshSimplificationsPass();
mlir::test::registerTestMultiBuffering();