My Project
SideEffectsInterface.h
Go to the documentation of this file.
1 //===- SideEffectsInterface.h - dialect interface modeling side effects ---===//
2 //
3 // Part of the MLIR 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 //
9 // This file specifies a dialect interface to model side-effects.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef MLIR_TRANSFORMS_SIDEEFFECTSINTERFACE_H_
14 #define MLIR_TRANSFORMS_SIDEEFFECTSINTERFACE_H_
15 
17 #include "mlir/IR/Operation.h"
18 
19 namespace mlir {
20 
26  : public DialectInterface::Base<SideEffectsDialectInterface> {
27 public:
28  SideEffectsDialectInterface(Dialect *dialect) : Base(dialect) {}
29 
31  Never, /* the operation has no side-effects */
32  Recursive, /* the operation has side-effects if a contained operation has */
33  Always /* the operation has side-effects */
34  };
35 
38  if (op->hasNoSideEffect())
39  return Never;
40  return Always;
41  };
42 };
43 
45  : public DialectInterfaceCollection<SideEffectsDialectInterface> {
46 public:
50 
52  // First check generic trait.
53  if (op->hasNoSideEffect())
54  return SideEffecting::Never;
55  if (auto handler = getInterfaceFor(op))
56  return handler->isSideEffecting(op);
57 
58  return SideEffecting::Always;
59  }
60 };
61 
62 } // namespace mlir
63 
64 #endif // MLIR_TRANSFORMS_SIDEEFFECTSINTERFACE_H_
Definition: InferTypeOpInterface.cpp:20
Definition: Operation.h:27
Definition: DialectInterface.h:27
SideEffectsInterface(MLIRContext *ctx)
Definition: SideEffectsInterface.h:48
Definition: DialectInterface.h:150
SideEffecting
Definition: SideEffectsInterface.h:30
Definition: SideEffectsInterface.h:32
bool hasNoSideEffect()
Returns whether the operation has side-effects.
Definition: Operation.h:456
Definition: SideEffectsInterface.h:25
Definition: Dialect.h:39
Definition: SideEffectsInterface.h:44
Definition: SideEffectsInterface.h:31
Definition: MLIRContext.h:34
SideEffecting isSideEffecting(Operation *op) const
Definition: SideEffectsInterface.h:51
Definition: SideEffectsInterface.h:33
SideEffectsDialectInterface(Dialect *dialect)
Definition: SideEffectsInterface.h:28
virtual SideEffecting isSideEffecting(Operation *op) const
Checks whether the given operation has side-effects.
Definition: SideEffectsInterface.h:37