[llvm] [clang] [clang][DepScan] Make OptimizeArgs a bit mask enum and enable by default (PR #71588)
https://github.com/benlangmuir approved this pull request. https://github.com/llvm/llvm-project/pull/71588 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[llvm] [clang] [clang][DepScan] Make OptimizeArgs a bit mask enum and enable by default (PR #71588)
llvmbot wrote: @llvm/pr-subscribers-clang Author: Michael Spencer (Bigcheese) Changes Make it easier to control which optimizations are enabled by making OptimizeArgs a bit masked enum. There's currently only one such optimization, but more will be added in followup commits. --- Full diff: https://github.com/llvm/llvm-project/pull/71588.diff 13 Files Affected: - (modified) clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h (+18-5) - (modified) clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h (+1-1) - (modified) clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h (+5-3) - (modified) clang/lib/Tooling/DependencyScanning/DependencyScanningService.cpp (+2-2) - (modified) clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp (+5-4) - (modified) clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp (+3-2) - (modified) clang/test/ClangScanDeps/header-search-pruning-transitive.c (+2-2) - (modified) clang/test/ClangScanDeps/header-search-pruning.cpp (+3-3) - (modified) clang/test/ClangScanDeps/modules-symlink-dir-from-module.c (+1-1) - (modified) clang/test/ClangScanDeps/modules-symlink-dir.c (+1-1) - (modified) clang/tools/clang-scan-deps/ClangScanDeps.cpp (+23-2) - (modified) clang/tools/clang-scan-deps/Opts.td (+1-1) - (modified) llvm/include/llvm/ADT/BitmaskEnum.h (+7-1) ``diff diff --git a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h index 109cf049a65231e..a4a03b88b205175 100644 --- a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h +++ b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h @@ -10,6 +10,7 @@ #define LLVM_CLANG_TOOLING_DEPENDENCYSCANNING_DEPENDENCYSCANNINGSERVICE_H #include "clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h" +#include "llvm/ADT/BitmaskEnum.h" namespace clang { namespace tooling { @@ -44,19 +45,31 @@ enum class ScanningOutputFormat { P1689, }; +enum class ScanningOptimizations { + None = 0, + + /// Remove unused header search paths including header maps. + HeaderSearch = 1, + + LLVM_MARK_AS_BITMASK_ENUM(HeaderSearch), + All = HeaderSearch, + Default = All +}; + /// The dependency scanning service contains shared configuration and state that /// is used by the individual dependency scanning workers. class DependencyScanningService { public: - DependencyScanningService(ScanningMode Mode, ScanningOutputFormat Format, -bool OptimizeArgs = false, -bool EagerLoadModules = false); + DependencyScanningService( + ScanningMode Mode, ScanningOutputFormat Format, + ScanningOptimizations OptimizeArgs = ScanningOptimizations::Default, + bool EagerLoadModules = false); ScanningMode getMode() const { return Mode; } ScanningOutputFormat getFormat() const { return Format; } - bool canOptimizeArgs() const { return OptimizeArgs; } + ScanningOptimizations getOptimizeArgs() const { return OptimizeArgs; } bool shouldEagerLoadModules() const { return EagerLoadModules; } @@ -68,7 +81,7 @@ class DependencyScanningService { const ScanningMode Mode; const ScanningOutputFormat Format; /// Whether to optimize the modules' command-line arguments. - const bool OptimizeArgs; + const ScanningOptimizations OptimizeArgs; /// Whether to set up command-lines to load PCM files eagerly. const bool EagerLoadModules; /// The global file system cache. diff --git a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h index 778d579bfb50154..0f607862194b316 100644 --- a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h +++ b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h @@ -116,7 +116,7 @@ class DependencyScanningWorker { llvm::IntrusiveRefCntPtr DepFS; ScanningOutputFormat Format; /// Whether to optimize the modules' command-line arguments. - bool OptimizeArgs; + ScanningOptimizations OptimizeArgs; /// Whether to set up command-lines to load PCM files eagerly. bool EagerLoadModules; }; diff --git a/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h b/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h index f5dbb26452da4e6..051363b075de997 100644 --- a/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h +++ b/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h @@ -16,6 +16,7 @@ #include "clang/Lex/HeaderSearch.h" #include "clang/Lex/PPCallbacks.h" #include "clang/Serialization/ASTReader.h" +#include "clang/Tooling/DependencyScanning/DependencyScanningService.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/Hashing.h" #include "llvm/ADT/StringSet.h" @@ -2
[llvm] [clang] [clang][DepScan] Make OptimizeArgs a bit mask enum and enable by default (PR #71588)
https://github.com/Bigcheese created https://github.com/llvm/llvm-project/pull/71588 Make it easier to control which optimizations are enabled by making OptimizeArgs a bit masked enum. There's currently only one such optimization, but more will be added in followup commits. >From 7d8281c6a4880006b590fd68b0c348dd0baef4eb Mon Sep 17 00:00:00 2001 From: Michael Spencer Date: Tue, 7 Nov 2023 10:00:59 -1000 Subject: [PATCH 1/2] [clang][DepScan] Make OptimizeArgs a bit mask enum. Make it easier to control which optimizations are enabled by making OptimizeArgs a bit masked enum. There's currently only one such optimization, but more will be added in followup commits. --- .../DependencyScanningService.h | 22 ++ .../DependencyScanningWorker.h| 2 +- .../DependencyScanning/ModuleDepCollector.h | 8 --- .../DependencyScanningService.cpp | 4 ++-- .../DependencyScanningWorker.cpp | 9 .../DependencyScanning/ModuleDepCollector.cpp | 5 ++-- .../header-search-pruning-transitive.c| 4 ++-- .../ClangScanDeps/header-search-pruning.cpp | 6 ++--- .../modules-symlink-dir-from-module.c | 2 +- .../test/ClangScanDeps/modules-symlink-dir.c | 2 +- clang/tools/clang-scan-deps/ClangScanDeps.cpp | 23 +-- clang/tools/clang-scan-deps/Opts.td | 2 +- llvm/include/llvm/ADT/BitmaskEnum.h | 8 ++- 13 files changed, 69 insertions(+), 28 deletions(-) diff --git a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h index 109cf049a65231e..60daeec6fe2a678 100644 --- a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h +++ b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h @@ -10,6 +10,7 @@ #define LLVM_CLANG_TOOLING_DEPENDENCYSCANNING_DEPENDENCYSCANNINGSERVICE_H #include "clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h" +#include "llvm/ADT/BitmaskEnum.h" namespace clang { namespace tooling { @@ -44,19 +45,30 @@ enum class ScanningOutputFormat { P1689, }; +enum class ScanningOptimizations { + None = 0, + + /// Remove unused header search paths including header maps. + HeaderSearch = 1, + + LLVM_MARK_AS_BITMASK_ENUM(HeaderSearch), + All = HeaderSearch +}; + /// The dependency scanning service contains shared configuration and state that /// is used by the individual dependency scanning workers. class DependencyScanningService { public: - DependencyScanningService(ScanningMode Mode, ScanningOutputFormat Format, -bool OptimizeArgs = false, -bool EagerLoadModules = false); + DependencyScanningService( + ScanningMode Mode, ScanningOutputFormat Format, + ScanningOptimizations OptimizeArgs = ScanningOptimizations::None, + bool EagerLoadModules = false); ScanningMode getMode() const { return Mode; } ScanningOutputFormat getFormat() const { return Format; } - bool canOptimizeArgs() const { return OptimizeArgs; } + ScanningOptimizations getOptimizeArgs() const { return OptimizeArgs; } bool shouldEagerLoadModules() const { return EagerLoadModules; } @@ -68,7 +80,7 @@ class DependencyScanningService { const ScanningMode Mode; const ScanningOutputFormat Format; /// Whether to optimize the modules' command-line arguments. - const bool OptimizeArgs; + const ScanningOptimizations OptimizeArgs; /// Whether to set up command-lines to load PCM files eagerly. const bool EagerLoadModules; /// The global file system cache. diff --git a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h index 778d579bfb50154..0f607862194b316 100644 --- a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h +++ b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h @@ -116,7 +116,7 @@ class DependencyScanningWorker { llvm::IntrusiveRefCntPtr DepFS; ScanningOutputFormat Format; /// Whether to optimize the modules' command-line arguments. - bool OptimizeArgs; + ScanningOptimizations OptimizeArgs; /// Whether to set up command-lines to load PCM files eagerly. bool EagerLoadModules; }; diff --git a/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h b/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h index f5dbb26452da4e6..051363b075de997 100644 --- a/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h +++ b/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h @@ -16,6 +16,7 @@ #include "clang/Lex/HeaderSearch.h" #include "clang/Lex/PPCallbacks.h" #include "clang/Serialization/ASTReader.h" +#include "clang/Tooling/DependencyScanning/DependencyScanningService.h" #include "llvm/ADT/DenseMap.h" #in