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);
 
 
   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");