diff --git a/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp b/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp --- a/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp +++ b/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp @@ -26,6 +26,7 @@ #include "mlir/IR/OpImplementation.h" #include "mlir/IR/PatternMatch.h" #include "mlir/IR/TypeUtilities.h" +#include "mlir/Transforms/InliningUtils.h" #include "llvm/ADT/TypeSwitch.h" using namespace mlir; @@ -102,6 +103,20 @@ return static_cast(isKernelAttr); } +namespace { +/// This class defines the interface for handling inlining with gpu +/// operations. +struct GPUInlinerInterface : public DialectInlinerInterface { + using DialectInlinerInterface::DialectInlinerInterface; + + /// All gpu dialect ops can be inlined. + bool isLegalToInline(Operation *, Region *, bool, + BlockAndValueMapping &) const final { + return true; + } +}; +} // namespace + void GPUDialect::initialize() { addTypes(); addTypes(); @@ -109,6 +124,7 @@ #define GET_OP_LIST #include "mlir/Dialect/GPU/GPUOps.cpp.inc" >(); + addInterfaces(); } Type GPUDialect::parseType(DialectAsmParser &parser) const {