Changeset View
Changeset View
Standalone View
Standalone View
mlir/lib/Conversion/AVX512ToLLVM/ConvertAVX512ToLLVM.cpp
Show First 20 Lines • Show All 157 Lines • ▼ Show 20 Lines | void mlir::populateAVX512ToLLVMConversionPatterns( | ||||
patterns.insert<MaskRndScaleOpPS512Conversion, | patterns.insert<MaskRndScaleOpPS512Conversion, | ||||
MaskRndScaleOpPD512Conversion, | MaskRndScaleOpPD512Conversion, | ||||
ScaleFOpPS512Conversion, | ScaleFOpPS512Conversion, | ||||
ScaleFOpPD512Conversion>(ctx, converter); | ScaleFOpPD512Conversion>(ctx, converter); | ||||
// clang-format on | // clang-format on | ||||
} | } | ||||
namespace { | namespace { | ||||
struct ConvertAVX512ToLLVMPass : public ModulePass<ConvertAVX512ToLLVMPass> { | struct ConvertAVX512ToLLVMPass | ||||
: public OperationPass<ConvertAVX512ToLLVMPass, ModuleOp> { | |||||
/// Include the generated pass utilities. | /// Include the generated pass utilities. | ||||
#define GEN_PASS_ConvertAVX512ToLLVM | #define GEN_PASS_ConvertAVX512ToLLVM | ||||
#include "mlir/Conversion/Passes.h.inc" | #include "mlir/Conversion/Passes.h.inc" | ||||
void runOnModule() override; | void runOnOperation() override; | ||||
}; | }; | ||||
} // namespace | } // namespace | ||||
void ConvertAVX512ToLLVMPass::runOnModule() { | void ConvertAVX512ToLLVMPass::runOnOperation() { | ||||
// Convert to the LLVM IR dialect. | // Convert to the LLVM IR dialect. | ||||
OwningRewritePatternList patterns; | OwningRewritePatternList patterns; | ||||
LLVMTypeConverter converter(&getContext()); | LLVMTypeConverter converter(&getContext()); | ||||
populateAVX512ToLLVMConversionPatterns(converter, patterns); | populateAVX512ToLLVMConversionPatterns(converter, patterns); | ||||
populateVectorToLLVMConversionPatterns(converter, patterns); | populateVectorToLLVMConversionPatterns(converter, patterns); | ||||
populateStdToLLVMConversionPatterns(converter, patterns); | populateStdToLLVMConversionPatterns(converter, patterns); | ||||
ConversionTarget target(getContext()); | ConversionTarget target(getContext()); | ||||
target.addLegalDialect<LLVM::LLVMDialect>(); | target.addLegalDialect<LLVM::LLVMDialect>(); | ||||
target.addLegalDialect<LLVM::LLVMAVX512Dialect>(); | target.addLegalDialect<LLVM::LLVMAVX512Dialect>(); | ||||
target.addIllegalDialect<avx512::AVX512Dialect>(); | target.addIllegalDialect<avx512::AVX512Dialect>(); | ||||
target.addDynamicallyLegalOp<FuncOp>( | target.addDynamicallyLegalOp<FuncOp>( | ||||
[&](FuncOp op) { return converter.isSignatureLegal(op.getType()); }); | [&](FuncOp op) { return converter.isSignatureLegal(op.getType()); }); | ||||
if (failed( | if (failed(applyPartialConversion(getOperation(), target, patterns, | ||||
applyPartialConversion(getModule(), target, patterns, &converter))) { | &converter))) { | ||||
signalPassFailure(); | signalPassFailure(); | ||||
} | } | ||||
} | } | ||||
std::unique_ptr<OpPassBase<ModuleOp>> mlir::createConvertAVX512ToLLVMPass() { | std::unique_ptr<OpPassBase<ModuleOp>> mlir::createConvertAVX512ToLLVMPass() { | ||||
return std::make_unique<ConvertAVX512ToLLVMPass>(); | return std::make_unique<ConvertAVX512ToLLVMPass>(); | ||||
} | } |