9#ifndef CIRCT_SUPPORT_NAMING_H
10#define CIRCT_SUPPORT_NAMING_H
13#include "mlir/IR/PatternMatch.h"
25StringAttr
chooseName(StringAttr a, StringAttr b);
29StringAttr
chooseName(Operation *a, Operation *b);
40template <
typename OpTy,
typename... Args>
42 Operation *op, Args &&...args) {
43 auto name = op->getAttrOfType<StringAttr>(
"sv.namehint");
45 rewriter.replaceOpWithNewOp<OpTy>(op, std::forward<Args>(args)...);
46 if (name && !newOp->hasAttr(
"sv.namehint"))
47 rewriter.modifyOpInPlace(newOp,
48 [&] { newOp->setAttr(
"sv.namehint", name); });
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
static OpTy replaceOpWithNewOpAndCopyNamehint(PatternRewriter &rewriter, Operation *op, Args &&...args)
A wrapper of PatternRewriter::replaceOpWithNewOp to propagate "sv.namehint" attribute.
void replaceOpAndCopyNamehint(PatternRewriter &rewriter, Operation *op, Value newValue)
A wrapper of PatternRewriter::replaceOp to propagate "sv.namehint" attribute.
bool isUselessName(StringRef name)
Return true if this is a possibly useless temporary name.
StringRef chooseName(StringRef a, StringRef b)
Choose a good name for an item from two options.