[all-commits] [llvm/llvm-project] 4481ee: [ASTImporter] Properly delete decls from SavedImpo...

Raphael Isemann via All-commits all-commits at lists.llvm.org
Wed Jan 22 06:20:44 PST 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 4481eefbe8425c63289186dd13319aaa7043e67f
      https://github.com/llvm/llvm-project/commit/4481eefbe8425c63289186dd13319aaa7043e67f
  Author: Jaroslav Sevcik <jarin at google.com>
  Date:   2020-01-22 (Wed, 22 Jan 2020)

  Changed paths:
    M clang/lib/AST/ASTImporter.cpp

  Log Message:
  -----------
  [ASTImporter] Properly delete decls from SavedImportPaths

Summary:
We see a significant regression (~40% slower on large codebases) in expression evaluation after https://reviews.llvm.org/rL364771. A sampling profile shows the extra time is spent in SavedImportPathsTy::operator[] when called from ASTImporter::Import. I believe this is because ASTImporter::Import adds an element to the SavedImportPaths map for each decl unconditionally (see https://github.com/llvm/llvm-project/blob/7b81c3f8793d30a4285095a9b67dcfca2117916c/clang/lib/AST/ASTImporter.cpp#L8256).

To fix this, we call SavedImportPathsTy::erase on the declaration rather than clearing its value vector. That way we do not accidentally introduce new empty elements.  (With this patch the performance is restored, and we do not see SavedImportPathsTy::operator[] in the profile anymore.)

Reviewers: martong, teemperor, a.sidorin, shafik

Reviewed By: martong

Subscribers: rnkovacs, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D73166




More information about the All-commits mailing list