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> {
31 this->preserveMode = preserveMode;
34 enum ModAction {
Drop, Keep, Demote };
36 void runOnOperation()
override {
37 size_t namesDropped = 0;
38 size_t namesChanged = 0;
41 dropNamesIf(namesChanged, namesDropped, [](FNamableOp op) {
43 return ModAction::Drop;
44 return ModAction::Demote;
48 dropNamesIf(namesChanged, namesDropped,
49 [](FNamableOp op) {
return ModAction::Drop; });
52 dropNamesIf(namesChanged, namesDropped, [](FNamableOp op) {
53 auto name = op.getName();
55 return ModAction::Drop;
56 if (name.starts_with(
"_"))
57 return ModAction::Demote;
58 return ModAction::Keep;
62 dropNamesIf(namesChanged, namesDropped, [](FNamableOp op) {
64 return ModAction::Demote;
65 return ModAction::Keep;
68 numNamesConverted += namesChanged;
69 numNamesDropped += namesDropped;
73 size_t dropNamesIf(
size_t &namesChanged,
size_t &namesDropped,
74 llvm::function_ref<ModAction(FNamableOp)> pred) {
75 size_t changedNames = 0;
76 auto emptyNameAttr = StringAttr::get(&getContext(),
"");
77 auto droppableNameAttr =
78 NameKindEnumAttr::get(&getContext(), NameKindEnum::DroppableName);
79 getOperation()->walk([&](FNamableOp op) {
82 op.setNameAttr(emptyNameAttr);
83 op.setNameKindAttr(droppableNameAttr);
86 case ModAction::Demote:
87 op.setNameKindAttr(droppableNameAttr);
100std::unique_ptr<mlir::Pass>
102 return std::make_unique<DropNamesPass>(mode);
@ 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.