MLIR  20.0.0git
MathDialect.cpp
Go to the documentation of this file.
1 //===- MathDialect.cpp - MLIR dialect for Math implementation -------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
13 
14 using namespace mlir;
15 using namespace mlir::math;
16 
17 #include "mlir/Dialect/Math/IR/MathOpsDialect.cpp.inc"
18 
19 namespace {
20 /// This class defines the interface for handling inlining with math
21 /// operations.
22 struct MathInlinerInterface : public DialectInlinerInterface {
24 
25  /// All operations within math ops can be inlined.
26  bool isLegalToInline(Operation *, Region *, bool, IRMapping &) const final {
27  return true;
28  }
29 };
30 } // namespace
31 
32 void mlir::math::MathDialect::initialize() {
33  addOperations<
34 #define GET_OP_LIST
35 #include "mlir/Dialect/Math/IR/MathOps.cpp.inc"
36  >();
37  addInterfaces<MathInlinerInterface>();
38  declarePromisedInterface<ConvertToLLVMPatternInterface, MathDialect>();
39 }
static bool isLegalToInline(InlinerInterface &interface, Region *src, Region *insertRegion, bool shouldCloneInlinedRegion, IRMapping &valueMapping)
Utility to check that all of the operations within 'src' can be inlined.
This is the interface that must be implemented by the dialects of operations to be inlined.
Definition: InliningUtils.h:44
DialectInlinerInterface(Dialect *dialect)
Definition: InliningUtils.h:46
This is a utility class for mapping one set of IR entities to another.
Definition: IRMapping.h:26
Operation is the basic unit of execution within MLIR.
Definition: Operation.h:88
This class contains a list of basic blocks and a link to the parent operation it is attached to.
Definition: Region.h:26
Include the generated interface declarations.