19 using namespace circt;
20 using namespace firrtl;
23 struct DropNamesPass :
public DropNameBase<DropNamesPass> {
25 this->preserveMode = preserveMode;
28 enum ModAction {
Drop, Keep, Demote };
30 void runOnOperation()
override {
31 size_t namesDropped = 0;
32 size_t namesChanged = 0;
35 dropNamesIf(namesChanged, namesDropped, [](FNamableOp op) {
37 return ModAction::Drop;
38 return ModAction::Demote;
42 dropNamesIf(namesChanged, namesDropped,
43 [](FNamableOp op) {
return ModAction::Drop; });
46 dropNamesIf(namesChanged, namesDropped, [](FNamableOp op) {
48 return ModAction::Drop;
49 if (op.getName().starts_with(
"_"))
50 return ModAction::Demote;
51 return ModAction::Keep;
55 dropNamesIf(namesChanged, namesDropped, [](FNamableOp op) {
57 return ModAction::Demote;
58 return ModAction::Keep;
61 numNamesConverted += namesChanged;
62 numNamesDropped += namesDropped;
66 size_t dropNamesIf(
size_t &namesChanged,
size_t &namesDropped,
67 llvm::function_ref<ModAction(FNamableOp)> pred) {
68 size_t changedNames = 0;
69 auto droppableNameAttr =
71 getOperation()->walk([&](FNamableOp op) {
77 case ModAction::Demote:
78 op.setNameKindAttr(droppableNameAttr);
91 std::unique_ptr<mlir::Pass>
93 return std::make_unique<DropNamesPass>(mode);
Direction get(bool isOutput)
Returns an output direction if isOutput is true, otherwise returns an input direction.
@ None
Don't explicitly preserve any named values.
@ Strip
Strip all names. No name on declaration is preserved.
std::unique_ptr< mlir::Pass > createDropNamesPass(PreserveValues::PreserveMode mode=PreserveValues::None)
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
bool isUselessName(StringRef name)
Return true if this is a possibly useless temporary name.