33 DoSimplifyDefUse(
ReferenceMap *refMap,
TypeMap *typeMap) : refMap(refMap), typeMap(typeMap) {
36 setName(
"DoSimplifyDefUse");
39 const IR::Node *postorder(IR::Function *function)
override {
40 if (findContext<IR::Declaration_Instance>() ==
nullptr)
43 return process(function);
46 const IR::Node *postorder(IR::P4Parser *parser)
override {
return process(parser); }
47 const IR::Node *postorder(IR::P4Control *control)
override {
return process(control); }
53 const IR::Node *postorder(IR::BlockStatement *stat)
override {
54 if (!stat->components.empty())
return stat;
55 if (stat->annotations->size() != 1)
return stat;
56 auto anno = stat->annotations->getSingle(IR::Annotation::hiddenAnnotation);
57 if (!anno)
return stat;
59 return new IR::BlockStatement(stat->srcInfo);
63class SimplifyDefUse :
public PassManager {
66 Cloner() { setName(
"Cloner"); }
67 const IR::Node *postorder(IR::EmptyStatement *stat)
override {
71 return new IR::BlockStatement(stat->srcInfo);
73 const IR::Node *postorder(IR::BlockStatement *stat)
override {
77 if (stat->components.empty()) {
78 auto annos =
new IR::Annotations();
81 annos->add(
new IR::Annotation(IR::Annotation::hiddenAnnotation, {}));
82 auto result =
new IR::BlockStatement(stat->srcInfo, annos);
83 LOG2(
"Cloning " << getOriginal()->
id <<
" into " << result->id);
88 return Transform::postorder(stat);
100 passes.push_back(
new Cloner());
101 if (!typeChecking) typeChecking =
new TypeChecking(refMap, typeMap);
104 passes.push_back(repeated);
106 setName(
"SimplifyDefUse");
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24