1 //===- SideEffects.cpp - SideEffect classes -------------------------------===//
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 #include "mlir/TableGen/SideEffects.h"
10 #include "llvm/TableGen/Record.h"
11 
12 using namespace mlir;
13 using namespace mlir::tblgen;
14 
15 //===----------------------------------------------------------------------===//
16 // SideEffect
17 //===----------------------------------------------------------------------===//
18 
19 StringRef SideEffect::getName() const {
20   return def->getValueAsString("effect");
21 }
22 
23 StringRef SideEffect::getBaseName() const {
24   return def->getValueAsString("baseEffect");
25 }
26 
27 StringRef SideEffect::getInterfaceTrait() const {
28   return def->getValueAsString("interfaceTrait");
29 }
30 
31 StringRef SideEffect::getResource() const {
32   auto value = def->getValueAsString("resource");
33   return value.empty() ? "::mlir::SideEffects::DefaultResource" : value;
34 }
35 
36 bool SideEffect::classof(const Operator::VariableDecorator *var) {
37   return var->getDef().isSubClassOf("SideEffect");
38 }
39 
40 //===----------------------------------------------------------------------===//
41 // SideEffectsTrait
42 //===----------------------------------------------------------------------===//
43 
44 Operator::var_decorator_range SideEffectTrait::getEffects() const {
45   auto *listInit = dyn_cast<llvm::ListInit>(def->getValueInit("effects"));
46   return {listInit->begin(), listInit->end()};
47 }
48 
49 bool SideEffectTrait::classof(const OpTrait *t) {
50   return t->getDef().isSubClassOf("SideEffectsTraitBase");
51 }
52