
Support extra concrete class declarations and definitions under NativeTrait that get injected into the class that specifies the trait. Extra declarations and definitions can be passed in as template arguments for NativeOpTraitNativeAttrTrait and NativeTypeTrait. Usage examples of this feature include: - Creating a wrapper Trait for authoring inferReturnTypes with the OpAdaptor by specifying necessary Op specific declarations and definitions directly in the trait - Refactoring the InferTensorType trait Reviewed By: jpienaar Differential Revision: https://reviews.llvm.org/D154731
43 lines
1.7 KiB
C++
43 lines
1.7 KiB
C++
//===- OpClass.cpp - Implementation of an Op Class ------------------------===//
|
|
//
|
|
// 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 "OpClass.h"
|
|
|
|
using namespace mlir;
|
|
using namespace mlir::tblgen;
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// OpClass definitions
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
OpClass::OpClass(StringRef name, std::string extraClassDeclaration,
|
|
std::string extraClassDefinition)
|
|
: Class(name.str()),
|
|
extraClassDeclaration(std::move(extraClassDeclaration)),
|
|
extraClassDefinition(std::move(extraClassDefinition)),
|
|
parent(addParent("::mlir::Op")) {
|
|
parent.addTemplateParam(getClassName().str());
|
|
declare<VisibilityDeclaration>(Visibility::Public);
|
|
/// Inherit functions from Op.
|
|
declare<UsingDeclaration>("Op::Op");
|
|
declare<UsingDeclaration>("Op::print");
|
|
/// Type alias for the adaptor class.
|
|
declare<UsingDeclaration>("Adaptor", className + "Adaptor");
|
|
declare<UsingDeclaration>("GenericAdaptor",
|
|
className + "GenericAdaptor<RangeT>")
|
|
->addTemplateParam("RangeT");
|
|
declare<UsingDeclaration>(
|
|
"FoldAdaptor", "GenericAdaptor<::llvm::ArrayRef<::mlir::Attribute>>");
|
|
}
|
|
|
|
void OpClass::finalize() {
|
|
Class::finalize();
|
|
declare<VisibilityDeclaration>(Visibility::Public);
|
|
declare<ExtraClassDeclaration>(extraClassDeclaration, extraClassDefinition);
|
|
}
|