Files
clang-p2996/flang/lib/Evaluate/CMakeLists.txt
Kajetan Puchalski d68c732473 [flang] Use precompiled headers in Frontend, Lower, Parser, Semantics and Evaluate (#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 <kajetan.puchalski@arm.com>
2025-04-30 11:46:57 +01:00

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"]]
)