compilerplugins/clang/pluginhandler.cxx | 13 +++++++++++++ config_host/config_clang.h.in | 2 ++ configure.ac | 1 + 3 files changed, 16 insertions(+)
New commits: commit 422c939f44eec82aca1060d22ea9a95a44d6b17d Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Thu Apr 8 17:01:15 2021 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Fri Apr 9 10:09:07 2021 +0200 make clang plugin check code in headers only once if in PCH When using Clang PCHs, we know for certain that the content of a PCH will be used once by the PCH's dedicated source file. So it is not necessary to let clang plugin check locations coming from a PCH every time, but just once when compiling that dedicated source. For starmath's parse.cxx this reduces compilation time 0.94s->0.4s (0.1s when not using plugins at all), for sc's document.cxx it is 5.9s->5.0s (4.0s without plugins). For reference, without PCHs the numbers are (with/without plugins) 2.1s/1.9s for parse.cxx and 11.2s/10.3s for document.cxx. Change-Id: Ie39787e65d7951187941dcff4899d053da63cbdd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113817 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lu...@collabora.com> diff --git a/compilerplugins/clang/pluginhandler.cxx b/compilerplugins/clang/pluginhandler.cxx index 54dba3e3bcc0..622caf917b8e 100644 --- a/compilerplugins/clang/pluginhandler.cxx +++ b/compilerplugins/clang/pluginhandler.cxx @@ -231,6 +231,19 @@ bool PluginHandler::ignoreLocation(SourceLocation loc) { bool PluginHandler::checkIgnoreLocation(SourceLocation loc) { +#if HAVE_BUILDING_PCH_WITH_OBJ + // If we're building a separate precompiled_foo.cxx file + // for a PCH, then it is not necessary to check contents of everything + // included by the PCH in every compilation, check only once for that + // precompiled_foo.cxx file. + if( !compiler.getSourceManager().isLocalSourceLocation( loc )) + { + if( !compiler.getLangOpts().BuildingPCHWithObjectFile ) + return true; + } +#elif CLANG_VERSION >= 110000 +#error Internal error, -building-pch-with-obj support not detected in Clang. +#endif SourceLocation expansionLoc = compiler.getSourceManager().getExpansionLoc( loc ); if( compiler.getSourceManager().isInSystemHeader( expansionLoc )) return true; diff --git a/config_host/config_clang.h.in b/config_host/config_clang.h.in index c19c0875ce86..e588c86cf0ed 100644 --- a/config_host/config_clang.h.in +++ b/config_host/config_clang.h.in @@ -17,4 +17,6 @@ Settings related to Clang compiler plugins. thus causing update of this .h file and triggering rebuild of our Clang plugin. */ #undef CLANG_FULL_VERSION +#define HAVE_BUILDING_PCH_WITH_OBJ 0 + #endif diff --git a/configure.ac b/configure.ac index 3a03dd38290f..cfc63ed6b6f5 100644 --- a/configure.ac +++ b/configure.ac @@ -5779,6 +5779,7 @@ if test -n "$ENABLE_PCH"; then CFLAGS=$save_CFLAGS if test -n "$BUILDING_PCH_WITH_OBJ"; then AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BUILDING_PCH_WITH_OBJ) else AC_MSG_RESULT(no) fi _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits