29#include "llvm/Support/DebugLog.h"
30#include "llvm/Support/LogicalResult.h"
31#include "llvm/Support/raw_ostream.h"
33#define DEBUG_TYPE "nvvm-to-llvm"
36#define GEN_PASS_DEF_CONVERTNVVMTOLLVMPASS
37#include "mlir/Conversion/Passes.h.inc"
47 using OpInterfaceRewritePattern<
48 BasicPtxBuilderInterface>::OpInterfaceRewritePattern;
50 PtxLowering(MLIRContext *context, PatternBenefit benefit = 2)
51 : OpInterfaceRewritePattern(context, benefit) {}
53 LogicalResult matchAndRewrite(BasicPtxBuilderInterface op,
54 PatternRewriter &rewriter)
const override {
55 if (op.hasIntrinsic()) {
56 LDBG() <<
"Ptx Builder does not lower \n\t" << op;
60 SmallVector<std::pair<Value, PTXRegisterMod>> asmValues;
61 LDBG() << op.getPtx();
63 bool needsManualMapping = op.getAsmValues(rewriter, asmValues);
64 PtxBuilder
generator(op, rewriter, needsManualMapping);
65 for (
auto &[asmValue, modifier] : asmValues) {
66 LDBG() << asmValue <<
"\t Modifier : " << modifier;
76struct ConvertNVVMToLLVMPass
80 void getDependentDialects(DialectRegistry ®istry)
const override {
81 registry.
insert<LLVM::LLVMDialect, NVVM::NVVMDialect>();
84 void runOnOperation()
override {
86 target.addLegalDialect<::mlir::LLVM::LLVMDialect>();
90 applyPartialConversion(getOperation(),
target, std::move(pattern))))
96struct NVVMToLLVMDialectInterface :
public ConvertToLLVMPatternInterface {
97 NVVMToLLVMDialectInterface(Dialect *dialect)
98 : ConvertToLLVMPatternInterface(dialect) {}
100 void loadDependentDialects(MLIRContext *context)
const final {
101 context->loadDialect<NVVMDialect>();
106 void populateConvertToLLVMConversionPatterns(
107 ConversionTarget &
target, LLVMTypeConverter &typeConverter,
108 RewritePatternSet &patterns)
const final {
121 dialect->addInterfaces<NVVMToLLVMDialectInterface>();
static const mlir::GenInfo * generator
The DialectRegistry maps a dialect namespace to a constructor for the matching dialect.
bool addExtension(TypeID extensionID, std::unique_ptr< DialectExtensionBase > extension)
Add the given extension to the registry.
MLIRContext is the top-level object for a collection of MLIR operations.
MLIRContext * getContext() const
RewritePatternSet & add(ConstructorArg &&arg, ConstructorArgs &&...args)
Add an instance of each of the pattern types 'Ts' to the pattern list with the given arguments.
Include the generated interface declarations.
void populateNVVMToLLVMConversionPatterns(RewritePatternSet &patterns)
void registerConvertNVVMToLLVMInterface(DialectRegistry ®istry)
OpInterfaceRewritePattern is a wrapper around RewritePattern that allows for matching and rewriting a...