llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: David Zbarsky (dzbarsky)

<details>
<summary>Changes</summary>

ASTDeclNodeLister and ASTPrinter instantiate nearly identical 
RecursiveASTVisitor specializations. This duplicates the full generated 
traversal implementation in clang.

Add a List mode to ASTPrinter and use its existing traversal for 
CreateASTDeclNodeLister(). VisitNamedDecl preserves the previous qualified-name 
output while AST dumping and printing retain their existing paths.

In an arm64 release build of current main, standalone clang shrinks from 
107,676,664 to 107,440,760 bytes (-235,904, -0.219%). Its stripped size falls 
by 132,976 bytes, and ASTConsumers.cpp.o falls from 597,248 to 310,544 bytes 
(-286,704).

The -ast-list output is byte-identical, and filtered AST dumps are identical 
after normalizing process-specific node addresses. Across 30 paired 
measurements, compile instructions changed by +0.016%, -ast-list by +0.021%, 
and filtered-dump by -0.111%; all 95% confidence intervals include zero.

Work towards #<!-- -->202616

---
Full diff: https://github.com/llvm/llvm-project/pull/202661.diff


1 Files Affected:

- (modified) clang/lib/Frontend/ASTConsumers.cpp (+17-25) 


``````````diff
diff --git a/clang/lib/Frontend/ASTConsumers.cpp 
b/clang/lib/Frontend/ASTConsumers.cpp
index 67c8761511e0c..91a5963c316f7 100644
--- a/clang/lib/Frontend/ASTConsumers.cpp
+++ b/clang/lib/Frontend/ASTConsumers.cpp
@@ -30,7 +30,7 @@ namespace {
     typedef RecursiveASTVisitor<ASTPrinter> base;
 
   public:
-    enum Kind { DumpFull, Dump, Print, None };
+    enum Kind { DumpFull, Dump, Print, List, None };
     ASTPrinter(std::unique_ptr<raw_ostream> Out, Kind K,
                ASTDumpOutputFormat Format, StringRef FilterString,
                bool DumpLookups = false, bool DumpDeclTypes = false)
@@ -48,6 +48,11 @@ namespace {
     void HandleTranslationUnit(ASTContext &Context) override {
       TranslationUnitDecl *D = Context.getTranslationUnitDecl();
 
+      if (OutputKind == List) {
+        TraverseDecl(D);
+        return;
+      }
+
       if (FilterString.empty())
         return print(D);
 
@@ -57,7 +62,7 @@ namespace {
     bool shouldWalkTypesOfTypeLocs() const { return false; }
 
     bool TraverseDecl(Decl *D) {
-      if (D && filterMatches(D)) {
+      if (OutputKind != List && D && filterMatches(D)) {
         bool ShowColors = Out.has_colors();
         if (ShowColors)
           Out.changeColor(raw_ostream::BLUE);
@@ -76,6 +81,14 @@ namespace {
       return base::TraverseDecl(D);
     }
 
+    bool VisitNamedDecl(NamedDecl *D) {
+      if (OutputKind == List) {
+        D->printQualifiedName(Out);
+        Out << '\n';
+      }
+      return true;
+    }
+
   private:
     std::string getName(Decl *D) {
       if (isa<NamedDecl>(D))
@@ -140,28 +153,6 @@ namespace {
     /// Whether to dump the type for each declaration dumped.
     bool DumpDeclTypes;
   };
-
-  class ASTDeclNodeLister : public ASTConsumer,
-                     public RecursiveASTVisitor<ASTDeclNodeLister> {
-  public:
-    ASTDeclNodeLister(raw_ostream *Out = nullptr)
-        : Out(Out ? *Out : llvm::outs()) {}
-
-    void HandleTranslationUnit(ASTContext &Context) override {
-      TraverseDecl(Context.getTranslationUnitDecl());
-    }
-
-    bool shouldWalkTypesOfTypeLocs() const { return false; }
-
-    bool VisitNamedDecl(NamedDecl *D) {
-      D->printQualifiedName(Out);
-      Out << '\n';
-      return true;
-    }
-
-  private:
-    raw_ostream &Out;
-  };
 } // end anonymous namespace
 
 std::unique_ptr<ASTConsumer>
@@ -197,7 +188,8 @@ clang::CreateASTDumper(raw_ostream &Out, StringRef 
FilterString, bool DumpDecls,
 }
 
 std::unique_ptr<ASTConsumer> clang::CreateASTDeclNodeLister() {
-  return std::make_unique<ASTDeclNodeLister>(nullptr);
+  return std::make_unique<ASTPrinter>(llvm::outs(), ASTPrinter::List,
+                                      ADOF_Default, StringRef());
 }
 
 
//===----------------------------------------------------------------------===//

``````````

</details>


https://github.com/llvm/llvm-project/pull/202661
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to