Skip to content

Commit d47f8c6

Browse files
mrkajetanpIanWood1
authored andcommitted
[flang] Use precompiled headers in Frontend, Lower, Parser, Semantics and Evaluate (llvm#131137)
Precompiling larger headers can save a lot of compile time across various compilation units. For the time being, disable precompiled headers for ccache builds on Windows due to issues with reliably passing the appropriate options to ccache. Selected compile time & memory improvements are as follows: flang/lib/Parser/Fortran-parsers.cpp: Elapsed (wall clock) time (h:mm:ss or m:ss): 0:47.31 -> 0:41.68 Maximum resident set size (kbytes): 2062140 -> 1745584 flang/lib/Lower/Bridge.cpp: Elapsed (wall clock) time (h:mm:ss or m:ss): 1:19.16 -> 0:45.86 Maximum resident set size (kbytes): 3849144 -> 2443476 flang/lib/Lower/PFTBuilder.cpp Elapsed (wall clock) time (h:mm:ss or m:ss): 1:29.24 -> 1:00.99 Maximum resident set size (kbytes): 4218368 -> 2923128 flang/lib/Lower/Allocatable.cpp Elapsed (wall clock) time (h:mm:ss or m:ss): 0:53.03 -> 0:22.50 Maximum resident set size (kbytes): 3092840 -> 2116908 flang/lib/Semantics/Semantics.cpp Elapsed (wall clock) time (h:mm:ss or m:ss): 1:18.75 -> 1:00.20 Maximum resident set size (kbytes): 3527744 -> 2545308 While the newly added precompiled headers are as follows: Parser: Elapsed (wall clock) time (h:mm:ss or m:ss): 0:09.62 Maximum resident set size (kbytes): 1034608 Lower: Elapsed (wall clock) time (h:mm:ss or m:ss): 0:41.33 Maximum resident set size (kbytes): 3615240 Semantics: Elapsed (wall clock) time (h:mm:ss or m:ss): 0:26.69 Maximum resident set size (kbytes): 2403776 --------- Signed-off-by: Kajetan Puchalski <[email protected]>
1 parent f1f5189 commit d47f8c6

File tree

6 files changed

+57
-0
lines changed

6 files changed

+57
-0
lines changed

flang/lib/Evaluate/CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,17 @@ add_flang_library(FortranEvaluate
7373
acc_gen
7474
omp_gen
7575
)
76+
77+
target_precompile_headers(FortranEvaluate PRIVATE
78+
[["flang/Evaluate/common.h"]]
79+
[["flang/Evaluate/call.h"]]
80+
[["flang/Evaluate/traverse.h"]]
81+
[["flang/Evaluate/shape.h"]]
82+
[["flang/Evaluate/characteristics.h"]]
83+
[["flang/Evaluate/variable.h"]]
84+
[["flang/Evaluate/real.h"]]
85+
[["flang/Evaluate/type.h"]]
86+
[["flang/Evaluate/integer.h"]]
87+
[["flang/Evaluate/expression.h"]]
88+
[["flang/Evaluate/tools.h"]]
89+
)

flang/lib/Frontend/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,11 @@ add_flang_library(flangFrontend
7474
clangBasic
7575
clangDriver
7676
)
77+
78+
target_precompile_headers(flangFrontend PRIVATE
79+
[["flang/Parser/parsing.h"]]
80+
[["flang/Parser/parse-tree.h"]]
81+
[["flang/Parser/dump-parse-tree.h"]]
82+
[["flang/Lower/PFTBuilder.h"]]
83+
[["flang/Lower/Bridge.h"]]
84+
)

flang/lib/Lower/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,14 @@ add_flang_library(FortranLower
7373
MLIRLLVMDialect
7474
MLIRSCFToControlFlow
7575
)
76+
77+
target_precompile_headers(FortranLower PRIVATE
78+
[["flang/Lower/ConvertExpr.h"]]
79+
[["flang/Lower/SymbolMap.h"]]
80+
[["flang/Lower/AbstractConverter.h"]]
81+
[["flang/Lower/IterationSpace.h"]]
82+
[["flang/Lower/CallInterface.h"]]
83+
[["flang/Lower/BoxAnalyzer.h"]]
84+
[["flang/Lower/PFTBuilder.h"]]
85+
[["flang/Lower/DirectivesCommon.h"]]
86+
)

flang/lib/Parser/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,11 @@ add_flang_library(FortranParser
3636
omp_gen
3737
acc_gen
3838
)
39+
40+
target_precompile_headers(FortranParser PRIVATE
41+
[["flang/Parser/parsing.h"]]
42+
[["flang/Parser/parse-tree.h"]]
43+
[["flang/Parser/provenance.h"]]
44+
[["flang/Parser/message.h"]]
45+
[["flang/Parser/parse-tree-visitor.h"]]
46+
)

flang/lib/Semantics/CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,12 @@ add_flang_library(FortranSemantics
6464
FrontendOpenACC
6565
TargetParser
6666
)
67+
68+
target_precompile_headers(FortranSemantics PRIVATE
69+
[["flang/Semantics/semantics.h"]]
70+
[["flang/Semantics/type.h"]]
71+
[["flang/Semantics/openmp-modifiers.h"]]
72+
[["flang/Semantics/expression.h"]]
73+
[["flang/Semantics/tools.h"]]
74+
[["flang/Semantics/symbol.h"]]
75+
)

llvm/CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,13 @@ if(LLVM_CCACHE_BUILD)
306306
endif()
307307
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_PROGRAM})
308308
else()
309+
# Until a way to reliably configure ccache on Windows is found,
310+
# disable precompiled headers for Windows + ccache builds
311+
if(NOT CMAKE_DISABLE_PRECOMPILE_HEADERS)
312+
message(WARNING "Using ccache with precompiled headers on Windows is currently not supported.
313+
CMAKE_DISABLE_PRECOMPILE_HEADERS will be set to ON.")
314+
set(CMAKE_DISABLE_PRECOMPILE_HEADERS "ON")
315+
endif()
309316
if(LLVM_CCACHE_MAXSIZE OR LLVM_CCACHE_DIR OR
310317
NOT LLVM_CCACHE_PARAMS MATCHES "CCACHE_CPP2=yes CCACHE_HASHDIR=yes CCACHE_SLOPPINESS=pch_defines,time_macros")
311318
message(FATAL_ERROR "Ccache configuration through CMake is not supported on Windows. Please use environment variables.")

0 commit comments

Comments
 (0)