This revision adds support for generating utilities for passes such as options/statistics/etc. that can be inferred from the tablegen definition. This removes additional boilerplate from the pass, and also makes it easier to remove the reliance on the pass registry to provide certain things(e.g. the pass argument). Differential Revision: https://reviews.llvm.org/D76659
55 lines
1.9 KiB
C++
55 lines
1.9 KiB
C++
//===- ConvertStandardToSPIRVPass.cpp - Convert Std Ops to SPIR-V Ops -----===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file implements a pass to convert MLIR standard ops into the SPIR-V
|
|
// ops.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "mlir/Conversion/StandardToSPIRV/ConvertStandardToSPIRVPass.h"
|
|
#include "mlir/Conversion/StandardToSPIRV/ConvertStandardToSPIRV.h"
|
|
#include "mlir/Dialect/SPIRV/SPIRVDialect.h"
|
|
#include "mlir/Dialect/SPIRV/SPIRVLowering.h"
|
|
#include "mlir/Pass/Pass.h"
|
|
|
|
using namespace mlir;
|
|
|
|
namespace {
|
|
/// A pass converting MLIR Standard operations into the SPIR-V dialect.
|
|
class ConvertStandardToSPIRVPass
|
|
: public ModulePass<ConvertStandardToSPIRVPass> {
|
|
/// Include the generated pass utilities.
|
|
#define GEN_PASS_ConvertStandardToSPIRV
|
|
#include "mlir/Conversion/Passes.h.inc"
|
|
|
|
void runOnModule() override;
|
|
};
|
|
} // namespace
|
|
|
|
void ConvertStandardToSPIRVPass::runOnModule() {
|
|
MLIRContext *context = &getContext();
|
|
ModuleOp module = getModule();
|
|
|
|
auto targetAttr = spirv::lookupTargetEnvOrDefault(module);
|
|
std::unique_ptr<ConversionTarget> target =
|
|
spirv::SPIRVConversionTarget::get(targetAttr);
|
|
|
|
SPIRVTypeConverter typeConverter(targetAttr);
|
|
OwningRewritePatternList patterns;
|
|
populateStandardToSPIRVPatterns(context, typeConverter, patterns);
|
|
populateBuiltinFuncToSPIRVPatterns(context, typeConverter, patterns);
|
|
|
|
if (failed(applyPartialConversion(module, *target, patterns))) {
|
|
return signalPassFailure();
|
|
}
|
|
}
|
|
|
|
std::unique_ptr<OpPassBase<ModuleOp>> mlir::createConvertStandardToSPIRVPass() {
|
|
return std::make_unique<ConvertStandardToSPIRVPass>();
|
|
}
|