10#include "mlir/IR/BuiltinAttributes.h"
11#include "mlir/IR/Operation.h"
12#include "llvm/ADT/StringRef.h"
20 return name.starts_with(
"_T") || name.starts_with(
"_WIRE");
36 if (a.starts_with(
"_"))
38 if (b.starts_with(
"_"))
40 if (b.count(
'_') < a.count(
'_'))
42 if (b.count(
'_') > a.count(
'_'))
44 return a.size() <= b.size();
60 StringAttr name = a->getAttrOfType<StringAttr>(
"name");
61 if (!name || name.getValue().empty())
62 return a->getAttrOfType<StringAttr>(
"sv.namehint");
75 if (
auto *newOp = newValue.getDefiningOp()) {
76 auto name = op->getAttrOfType<StringAttr>(
"sv.namehint");
77 if (name && !newOp->hasAttr(
"sv.namehint"))
78 rewriter.modifyOpInPlace(newOp,
79 [&] { newOp->setAttr(
"sv.namehint", name); });
81 rewriter.replaceOp(op, newValue);
static StringAttr getNameOrHint(Operation *a)
static bool isNameBetter(StringRef a, StringRef b)
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
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.