120dca522SRiver Riddle //===- SideEffects.cpp - SideEffect classes -------------------------------===//
220dca522SRiver Riddle //
320dca522SRiver Riddle // Part of the MLIR Project, under the Apache License v2.0 with LLVM Exceptions.
420dca522SRiver Riddle // See https://llvm.org/LICENSE.txt for license information.
520dca522SRiver Riddle // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
620dca522SRiver Riddle //
720dca522SRiver Riddle //===----------------------------------------------------------------------===//
820dca522SRiver Riddle 
920dca522SRiver Riddle #include "mlir/TableGen/SideEffects.h"
10572c2905SRiver Riddle #include "llvm/ADT/Twine.h"
1120dca522SRiver Riddle #include "llvm/TableGen/Record.h"
1220dca522SRiver Riddle 
1320dca522SRiver Riddle using namespace mlir;
1420dca522SRiver Riddle using namespace mlir::tblgen;
1520dca522SRiver Riddle 
1620dca522SRiver Riddle //===----------------------------------------------------------------------===//
1720dca522SRiver Riddle // SideEffect
1820dca522SRiver Riddle //===----------------------------------------------------------------------===//
1920dca522SRiver Riddle 
getName() const2020dca522SRiver Riddle StringRef SideEffect::getName() const {
2120dca522SRiver Riddle   return def->getValueAsString("effect");
2220dca522SRiver Riddle }
2320dca522SRiver Riddle 
getBaseEffectName() const240ddba0bdSRiver Riddle StringRef SideEffect::getBaseEffectName() const {
250ddba0bdSRiver Riddle   return def->getValueAsString("baseEffectName");
2620dca522SRiver Riddle }
2720dca522SRiver Riddle 
getInterfaceTrait() const28572c2905SRiver Riddle std::string SideEffect::getInterfaceTrait() const {
29572c2905SRiver Riddle   StringRef trait = def->getValueAsString("interfaceTrait");
30572c2905SRiver Riddle   StringRef cppNamespace = def->getValueAsString("cppNamespace");
31572c2905SRiver Riddle   return cppNamespace.empty() ? trait.str()
32572c2905SRiver Riddle                               : (cppNamespace + "::" + trait).str();
332d2d6961STres Popp }
342d2d6961STres Popp 
getResource() const3520dca522SRiver Riddle StringRef SideEffect::getResource() const {
36568787f8SMarcel Koester   return def->getValueAsString("resource");
3720dca522SRiver Riddle }
3820dca522SRiver Riddle 
classof(const Operator::VariableDecorator * var)3920dca522SRiver Riddle bool SideEffect::classof(const Operator::VariableDecorator *var) {
4020dca522SRiver Riddle   return var->getDef().isSubClassOf("SideEffect");
4120dca522SRiver Riddle }
4220dca522SRiver Riddle 
4320dca522SRiver Riddle //===----------------------------------------------------------------------===//
4420dca522SRiver Riddle // SideEffectsTrait
4520dca522SRiver Riddle //===----------------------------------------------------------------------===//
4620dca522SRiver Riddle 
getEffects() const4720dca522SRiver Riddle Operator::var_decorator_range SideEffectTrait::getEffects() const {
4820dca522SRiver Riddle   auto *listInit = dyn_cast<llvm::ListInit>(def->getValueInit("effects"));
4920dca522SRiver Riddle   return {listInit->begin(), listInit->end()};
5020dca522SRiver Riddle }
5120dca522SRiver Riddle 
getBaseEffectName() const520ddba0bdSRiver Riddle StringRef SideEffectTrait::getBaseEffectName() const {
530ddba0bdSRiver Riddle   return def->getValueAsString("baseEffectName");
540ddba0bdSRiver Riddle }
550ddba0bdSRiver Riddle 
classof(const Trait * t)56*94662ee0SRiver Riddle bool SideEffectTrait::classof(const Trait *t) {
5720dca522SRiver Riddle   return t->getDef().isSubClassOf("SideEffectsTraitBase");
5820dca522SRiver Riddle }
59