16#include "mlir/Pass/Pass.h"
20#define GEN_PASS_DEF_DROPNAME
21#include "circt/Dialect/FIRRTL/Passes.h.inc"
26using namespace firrtl;
29struct DropNamesPass :
public circt::firrtl::impl::DropNameBase<DropNamesPass> {
32 enum ModAction {
Drop, Keep, Demote };
34 void runOnOperation()
override {
35 size_t namesDropped = 0;
36 size_t namesChanged = 0;
39 dropNamesIf(namesChanged, namesDropped, [](FNamableOp op) {
41 return ModAction::Drop;
42 return ModAction::Demote;
46 dropNamesIf(namesChanged, namesDropped,
47 [](FNamableOp op) {
return ModAction::Drop; });
50 dropNamesIf(namesChanged, namesDropped, [](FNamableOp op) {
51 auto name = op.getName();
53 return ModAction::Drop;
54 if (name.starts_with(
"_"))
55 return ModAction::Demote;
56 return ModAction::Keep;
60 dropNamesIf(namesChanged, namesDropped, [](FNamableOp op) {
62 return ModAction::Demote;
63 return ModAction::Keep;
66 numNamesConverted += namesChanged;
67 numNamesDropped += namesDropped;
71 size_t dropNamesIf(
size_t &namesChanged,
size_t &namesDropped,
72 llvm::function_ref<ModAction(FNamableOp)> pred) {
73 size_t changedNames = 0;
74 auto emptyNameAttr = StringAttr::get(&getContext(),
"");
75 auto droppableNameAttr =
76 NameKindEnumAttr::get(&getContext(), NameKindEnum::DroppableName);
77 getOperation()->walk([&](FNamableOp op) {
80 op.setNameAttr(emptyNameAttr);
81 op.setNameKindAttr(droppableNameAttr);
84 case ModAction::Demote:
85 op.setNameKindAttr(droppableNameAttr);
@ None
Don't explicitly preserve any named values.
@ Strip
Strip all names. No name on declaration is preserved.
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
bool isUselessName(StringRef name)
Return true if this is a possibly useless temporary name.