blob: 46801051525264697141e0e39d5ac31fbbd5a8a8 [file] [log] [blame]
//===- SideEffects.h - Side Effects classes ---------------------*- C++ -*-===//
//
// Part of the MLIR Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// Wrapper around side effect related classes defined in TableGen.
//
//===----------------------------------------------------------------------===//
#ifndef MLIR_TABLEGEN_SIDEEFFECTS_H_
#define MLIR_TABLEGEN_SIDEEFFECTS_H_
#include "mlir/Support/LLVM.h"
#include "mlir/TableGen/Operator.h"
namespace mlir {
namespace tblgen {
// This class represents a specific instance of an effect that is being
// exhibited.
class SideEffect : public Operator::VariableDecorator {
public:
// Return the name of the C++ effect.
StringRef getName() const;
// Return the name of the base C++ effect.
StringRef getBaseEffectName() const;
// Return the name of the Interface that the effect belongs to.
StringRef getInterfaceTrait() const;
// Return the name of the resource class.
StringRef getResource() const;
static bool classof(const Operator::VariableDecorator *var);
};
// This class represents an instance of a side effect interface applied to an
// operation. This is a wrapper around an OpInterfaceTrait that also includes
// the effects that are applied.
class SideEffectTrait : public InterfaceOpTrait {
public:
// Return the effects that are attached to the side effect interface.
Operator::var_decorator_range getEffects() const;
// Return the name of the base C++ effect.
StringRef getBaseEffectName() const;
static bool classof(const OpTrait *t);
};
} // end namespace tblgen
} // end namespace mlir
#endif // MLIR_TABLEGEN_SIDEEFFECTS_H_