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 RiddleStringRef SideEffect::getName() const { 2120dca522SRiver Riddle return def->getValueAsString("effect"); 2220dca522SRiver Riddle } 2320dca522SRiver Riddle getBaseEffectName() const240ddba0bdSRiver RiddleStringRef SideEffect::getBaseEffectName() const { 250ddba0bdSRiver Riddle return def->getValueAsString("baseEffectName"); 2620dca522SRiver Riddle } 2720dca522SRiver Riddle getInterfaceTrait() const28572c2905SRiver Riddlestd::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 RiddleStringRef SideEffect::getResource() const { 36568787f8SMarcel Koester return def->getValueAsString("resource"); 3720dca522SRiver Riddle } 3820dca522SRiver Riddle classof(const Operator::VariableDecorator * var)3920dca522SRiver Riddlebool 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 RiddleOperator::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 RiddleStringRef SideEffectTrait::getBaseEffectName() const { 530ddba0bdSRiver Riddle return def->getValueAsString("baseEffectName"); 540ddba0bdSRiver Riddle } 550ddba0bdSRiver Riddle classof(const Trait * t)56*94662ee0SRiver Riddlebool SideEffectTrait::classof(const Trait *t) { 5720dca522SRiver Riddle return t->getDef().isSubClassOf("SideEffectsTraitBase"); 5820dca522SRiver Riddle } 59