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 <kajetan.puchalski@arm.com>
90 lines
2.3 KiB
CMake
90 lines
2.3 KiB
CMake
include(CheckLibraryExists)
|
|
|
|
if (LIBPGMATH_DIR)
|
|
# If pgmath library is found, it can be used for constant folding.
|
|
find_library(LIBPGMATH pgmath PATHS ${LIBPGMATH_DIR})
|
|
if(LIBPGMATH)
|
|
# pgmath uses _Complex, so only enable linking pgmath with flang in environments
|
|
# that support it (MSVC is OK, pgmath uses _Fcomplex/_Dcomplex there).
|
|
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU|MSVC")
|
|
check_cxx_compiler_flag("-Werror -Wc99-extensions" HAS_WC99_EXTENSIONS_FLAG)
|
|
if (HAS_WC99_EXTENSIONS_FLAG)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c99-extensions")
|
|
endif()
|
|
add_compile_definitions(LINK_WITH_LIBPGMATH)
|
|
message(STATUS "Found libpgmath: ${LIBPGMATH}")
|
|
else()
|
|
message(STATUS "Libpgmath will not be used because C99 complex is not supported.")
|
|
endif()
|
|
else()
|
|
message(STATUS "Libpgmath not found in: ${LIBPGMATH_DIR}")
|
|
endif()
|
|
endif()
|
|
|
|
check_library_exists(quadmath sinq "" FOUND_QUADMATH_LIB)
|
|
if (FLANG_INCLUDE_QUADMATH_H AND FOUND_QUADMATH_LIB)
|
|
configure_file("${FLANG_SOURCE_DIR}/cmake/quadmath_wrapper.h.in" "${CMAKE_CURRENT_BINARY_DIR}/quadmath_wrapper.h")
|
|
add_compile_definitions(HAS_QUADMATHLIB)
|
|
set(QUADMATHLIB quadmath)
|
|
endif ()
|
|
|
|
add_flang_library(FortranEvaluate
|
|
call.cpp
|
|
characteristics.cpp
|
|
check-expression.cpp
|
|
common.cpp
|
|
complex.cpp
|
|
constant.cpp
|
|
expression.cpp
|
|
fold.cpp
|
|
fold-character.cpp
|
|
fold-complex.cpp
|
|
fold-designator.cpp
|
|
fold-integer.cpp
|
|
fold-logical.cpp
|
|
fold-real.cpp
|
|
fold-reduction.cpp
|
|
formatting.cpp
|
|
host.cpp
|
|
initial-image.cpp
|
|
integer.cpp
|
|
intrinsics.cpp
|
|
intrinsics-library.cpp
|
|
logical.cpp
|
|
real.cpp
|
|
shape.cpp
|
|
static-data.cpp
|
|
target.cpp
|
|
tools.cpp
|
|
type.cpp
|
|
variable.cpp
|
|
|
|
LINK_LIBS
|
|
FortranSupport
|
|
FortranDecimal
|
|
FortranParser
|
|
${LIBPGMATH}
|
|
${QUADMATHLIB}
|
|
|
|
LINK_COMPONENTS
|
|
Support
|
|
|
|
DEPENDS
|
|
acc_gen
|
|
omp_gen
|
|
)
|
|
|
|
target_precompile_headers(FortranEvaluate PRIVATE
|
|
[["flang/Evaluate/common.h"]]
|
|
[["flang/Evaluate/call.h"]]
|
|
[["flang/Evaluate/traverse.h"]]
|
|
[["flang/Evaluate/shape.h"]]
|
|
[["flang/Evaluate/characteristics.h"]]
|
|
[["flang/Evaluate/variable.h"]]
|
|
[["flang/Evaluate/real.h"]]
|
|
[["flang/Evaluate/type.h"]]
|
|
[["flang/Evaluate/integer.h"]]
|
|
[["flang/Evaluate/expression.h"]]
|
|
[["flang/Evaluate/tools.h"]]
|
|
)
|