[mlir][mlir-spirv-cpu-runner] Move MLIR pass pipeline to mlir-opt (#113594)
Adds a new mlir-opt test-only pass, -test-spirv-cpu-runner-pipeline, which runs the set of MLIR passes needed for the mlir-spirv-cpu-runner, and removes them from the runner. The tests are changed to invoke mlir-opt with this flag before running the runner. The eventual goal is to move all host/device code generation steps out of the runner, like with some of the other runners. Recommit of17e9752267. It was reverted due to a build failure, but the build failure had in fact already been fixed ine7302319b5.
This commit is contained in:
@@ -3,6 +3,7 @@ get_property(conversion_libs GLOBAL PROPERTY MLIR_CONVERSION_LIBS)
|
||||
add_mlir_library(MLIRTestPass
|
||||
TestDynamicPipeline.cpp
|
||||
TestPassManager.cpp
|
||||
TestSPIRVCPURunnerPipeline.cpp
|
||||
|
||||
EXCLUDE_FROM_LIBMLIR
|
||||
|
||||
|
||||
47
mlir/test/lib/Pass/TestSPIRVCPURunnerPipeline.cpp
Normal file
47
mlir/test/lib/Pass/TestSPIRVCPURunnerPipeline.cpp
Normal file
@@ -0,0 +1,47 @@
|
||||
//===------------------ TestSPIRVCPURunnerPipeline.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
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Implements a pipeline for use by mlir-spirv-cpu-runner tests.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "mlir/Conversion/GPUToSPIRV/GPUToSPIRVPass.h"
|
||||
#include "mlir/Conversion/SPIRVToLLVM/SPIRVToLLVMPass.h"
|
||||
#include "mlir/Dialect/GPU/Transforms/Passes.h"
|
||||
#include "mlir/Dialect/SPIRV/IR/SPIRVOps.h"
|
||||
#include "mlir/Dialect/SPIRV/Transforms/Passes.h"
|
||||
#include "mlir/Pass/PassManager.h"
|
||||
|
||||
using namespace mlir;
|
||||
|
||||
namespace {
|
||||
|
||||
void buildTestSPIRVCPURunnerPipeline(OpPassManager &passManager) {
|
||||
passManager.addPass(createGpuKernelOutliningPass());
|
||||
passManager.addPass(createConvertGPUToSPIRVPass(/*mapMemorySpace=*/true));
|
||||
|
||||
OpPassManager &nestedPM = passManager.nest<spirv::ModuleOp>();
|
||||
nestedPM.addPass(spirv::createSPIRVLowerABIAttributesPass());
|
||||
nestedPM.addPass(spirv::createSPIRVUpdateVCEPass());
|
||||
passManager.addPass(createLowerHostCodeToLLVMPass());
|
||||
passManager.addPass(createConvertSPIRVToLLVMPass());
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace mlir {
|
||||
namespace test {
|
||||
void registerTestSPIRVCPURunnerPipeline() {
|
||||
PassPipelineRegistration<>(
|
||||
"test-spirv-cpu-runner-pipeline",
|
||||
"Runs a series of passes for lowering SPIR-V-dialect MLIR to "
|
||||
"LLVM-dialect MLIR intended for mlir-spirv-cpu-runner.",
|
||||
buildTestSPIRVCPURunnerPipeline);
|
||||
}
|
||||
} // namespace test
|
||||
} // namespace mlir
|
||||
@@ -1,4 +1,5 @@
|
||||
// RUN: mlir-spirv-cpu-runner %s -e main --entry-point-result=void --shared-libs=%mlir_runner_utils,%mlir_test_spirv_cpu_runner_c_wrappers \
|
||||
// RUN: mlir-opt %s -test-spirv-cpu-runner-pipeline \
|
||||
// RUN: | mlir-spirv-cpu-runner - -e main --entry-point-result=void --shared-libs=%mlir_runner_utils,%mlir_test_spirv_cpu_runner_c_wrappers \
|
||||
// RUN: | FileCheck %s
|
||||
|
||||
// CHECK: [8, 8, 8, 8, 8, 8]
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// RUN: mlir-spirv-cpu-runner %s -e main --entry-point-result=void --shared-libs=%mlir_runner_utils,%mlir_test_spirv_cpu_runner_c_wrappers \
|
||||
// RUN: mlir-opt %s -test-spirv-cpu-runner-pipeline \
|
||||
// RUN: | mlir-spirv-cpu-runner - -e main --entry-point-result=void --shared-libs=%mlir_runner_utils,%mlir_test_spirv_cpu_runner_c_wrappers \
|
||||
// RUN: | FileCheck %s
|
||||
|
||||
// CHECK: data =
|
||||
|
||||
@@ -142,6 +142,7 @@ void registerTestSCFWhileOpBuilderPass();
|
||||
void registerTestSCFWrapInZeroTripCheckPasses();
|
||||
void registerTestShapeMappingPass();
|
||||
void registerTestSliceAnalysisPass();
|
||||
void registerTestSPIRVCPURunnerPipeline();
|
||||
void registerTestSPIRVFuncSignatureConversion();
|
||||
void registerTestSPIRVVectorUnrolling();
|
||||
void registerTestTensorCopyInsertionPass();
|
||||
@@ -278,6 +279,7 @@ void registerTestPasses() {
|
||||
mlir::test::registerTestSCFWrapInZeroTripCheckPasses();
|
||||
mlir::test::registerTestShapeMappingPass();
|
||||
mlir::test::registerTestSliceAnalysisPass();
|
||||
mlir::test::registerTestSPIRVCPURunnerPipeline();
|
||||
mlir::test::registerTestSPIRVFuncSignatureConversion();
|
||||
mlir::test::registerTestSPIRVVectorUnrolling();
|
||||
mlir::test::registerTestTensorCopyInsertionPass();
|
||||
|
||||
@@ -12,18 +12,12 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h"
|
||||
#include "mlir/Conversion/GPUToSPIRV/GPUToSPIRVPass.h"
|
||||
#include "mlir/Conversion/SPIRVToLLVM/SPIRVToLLVMPass.h"
|
||||
#include "mlir/Dialect/Arith/IR/Arith.h"
|
||||
#include "mlir/Dialect/Func/IR/FuncOps.h"
|
||||
#include "mlir/Dialect/GPU/IR/GPUDialect.h"
|
||||
#include "mlir/Dialect/GPU/Transforms/Passes.h"
|
||||
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
|
||||
#include "mlir/Dialect/MemRef/IR/MemRef.h"
|
||||
#include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h"
|
||||
#include "mlir/Dialect/SPIRV/IR/SPIRVOps.h"
|
||||
#include "mlir/Dialect/SPIRV/Transforms/Passes.h"
|
||||
#include "mlir/ExecutionEngine/JitRunner.h"
|
||||
#include "mlir/ExecutionEngine/OptUtils.h"
|
||||
#include "mlir/Pass/Pass.h"
|
||||
@@ -75,23 +69,6 @@ convertMLIRModule(Operation *op, llvm::LLVMContext &context) {
|
||||
return mainModule;
|
||||
}
|
||||
|
||||
static LogicalResult runMLIRPasses(Operation *module,
|
||||
JitRunnerOptions &options) {
|
||||
PassManager passManager(module->getContext(),
|
||||
module->getName().getStringRef());
|
||||
if (failed(applyPassManagerCLOptions(passManager)))
|
||||
return failure();
|
||||
passManager.addPass(createGpuKernelOutliningPass());
|
||||
passManager.addPass(createConvertGPUToSPIRVPass(/*mapMemorySpace=*/true));
|
||||
|
||||
OpPassManager &nestedPM = passManager.nest<spirv::ModuleOp>();
|
||||
nestedPM.addPass(spirv::createSPIRVLowerABIAttributesPass());
|
||||
nestedPM.addPass(spirv::createSPIRVUpdateVCEPass());
|
||||
passManager.addPass(createLowerHostCodeToLLVMPass());
|
||||
passManager.addPass(createConvertSPIRVToLLVMPass());
|
||||
return passManager.run(module);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
llvm::InitLLVM y(argc, argv);
|
||||
|
||||
@@ -99,7 +76,6 @@ int main(int argc, char **argv) {
|
||||
llvm::InitializeNativeTargetAsmPrinter();
|
||||
|
||||
mlir::JitRunnerConfig jitRunnerConfig;
|
||||
jitRunnerConfig.mlirTransformer = runMLIRPasses;
|
||||
jitRunnerConfig.llvmModuleBuilder = convertMLIRModule;
|
||||
|
||||
mlir::DialectRegistry registry;
|
||||
|
||||
Reference in New Issue
Block a user