diff options
author | Nicolas van Kempen <nvankemp@gmail.com> | 2024-09-21 20:55:20 -0700 |
---|---|---|
committer | Amir Ayupov <aaupov@fb.com> | 2024-09-21 20:55:20 -0700 |
commit | 20a84870ed60069f0d6c860bd394d05d8b2ddeaa (patch) | |
tree | 1e9d10e83931872988783c93b9159271635e0286 | |
parent | 89cf0c6584aa92e8547fcd901cf9851f94dfd942 (diff) | |
download | llvm-users/aaupov/spr/main.cmake-preserve-clangpre-bolt.zip llvm-users/aaupov/spr/main.cmake-preserve-clangpre-bolt.tar.gz llvm-users/aaupov/spr/main.cmake-preserve-clangpre-bolt.tar.bz2 |
[𝘀𝗽𝗿] changes introduced through rebaseusers/aaupov/spr/main.cmake-preserve-clangpre-bolt
Created using spr 1.3.4
[skip ci]
-rw-r--r-- | clang/CMakeLists.txt | 12 | ||||
-rw-r--r-- | clang/cmake/caches/BOLT-CSSPGO.cmake | 17 | ||||
-rw-r--r-- | clang/cmake/caches/CSSPGO.cmake | 3 | ||||
-rw-r--r-- | clang/utils/perf-training/CMakeLists.txt | 28 | ||||
-rw-r--r-- | clang/utils/perf-training/lit.cfg | 6 | ||||
-rw-r--r-- | clang/utils/perf-training/lit.site.cfg.in | 1 | ||||
-rw-r--r-- | clang/utils/perf-training/perf-helper.py | 56 | ||||
-rw-r--r-- | llvm/CMakeLists.txt | 3 | ||||
-rw-r--r-- | llvm/cmake/modules/HandleLLVMOptions.cmake | 26 |
9 files changed, 14 insertions, 138 deletions
diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt index 46e1412..c649616 100644 --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -744,21 +744,11 @@ if (CLANG_ENABLE_BOOTSTRAP) if(BOOTSTRAP_LLVM_BUILD_INSTRUMENTED) add_dependencies(clang-bootstrap-deps llvm-profdata) set(PGO_OPT -DLLVM_PROFDATA=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-profdata) - string(TOUPPER "${BOOTSTRAP_LLVM_BUILD_INSTRUMENTED}" BOOTSTRAP_LLVM_BUILD_INSTRUMENTED) - if (BOOTSTRAP_LLVM_BUILD_INSTRUMENTED STREQUAL "CSSPGO") - add_dependencies(clang-bootstrap-deps llvm-profgen) - list(APPEND PGO_OPT -DLLVM_PROFGEN=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-profgen) - endif() endif() if(LLVM_BUILD_INSTRUMENTED) - string(TOUPPER "${LLVM_BUILD_INSTRUMENTED}" LLVM_BUILD_INSTRUMENTED) add_dependencies(clang-bootstrap-deps generate-profdata) - if (LLVM_BUILD_INSTRUMENTED STREQUAL "CSSPGO") - set(PGO_OPT -DLLVM_SPROFDATA_FILE=${CMAKE_CURRENT_BINARY_DIR}/utils/perf-training/clang.profdata) - else() - set(PGO_OPT -DLLVM_PROFDATA_FILE=${CMAKE_CURRENT_BINARY_DIR}/utils/perf-training/clang.profdata) - endif() + set(PGO_OPT -DLLVM_PROFDATA_FILE=${CMAKE_CURRENT_BINARY_DIR}/utils/perf-training/clang.profdata) # Use the current tools for LTO instead of the instrumented ones list(APPEND _BOOTSTRAP_DEFAULT_PASSTHROUGH CMAKE_CXX_COMPILER diff --git a/clang/cmake/caches/BOLT-CSSPGO.cmake b/clang/cmake/caches/BOLT-CSSPGO.cmake deleted file mode 100644 index 8ae8a30..0000000 --- a/clang/cmake/caches/BOLT-CSSPGO.cmake +++ /dev/null @@ -1,17 +0,0 @@ -set(LLVM_ENABLE_PROJECTS "bolt;clang;lld" CACHE STRING "") - -set(CLANG_BOOTSTRAP_TARGETS - stage2-clang-bolt - stage2-distribution - stage2-install-distribution - CACHE STRING "") -set(BOOTSTRAP_CLANG_BOOTSTRAP_TARGETS - clang-bolt - distribution - install-distribution - CACHE STRING "") - -set(PGO_BUILD_CONFIGURATION - ${CMAKE_CURRENT_LIST_DIR}/BOLT.cmake - CACHE STRING "") -include(${CMAKE_CURRENT_LIST_DIR}/CSSPGO.cmake) diff --git a/clang/cmake/caches/CSSPGO.cmake b/clang/cmake/caches/CSSPGO.cmake deleted file mode 100644 index 3415906..0000000 --- a/clang/cmake/caches/CSSPGO.cmake +++ /dev/null @@ -1,3 +0,0 @@ -set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "") -set(BOOTSTRAP_LLVM_BUILD_INSTRUMENTED "CSSPGO" CACHE STRING "") -include(${CMAKE_CURRENT_LIST_DIR}/PGO.cmake) diff --git a/clang/utils/perf-training/CMakeLists.txt b/clang/utils/perf-training/CMakeLists.txt index 91883a2..4967379 100644 --- a/clang/utils/perf-training/CMakeLists.txt +++ b/clang/utils/perf-training/CMakeLists.txt @@ -20,7 +20,6 @@ if(LLVM_BUILD_INSTRUMENTED) add_custom_target(clear-profraw COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py clean ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR}/profiles/ profraw - COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py clean ${CMAKE_CURRENT_BINARY_DIR} perf.data COMMENT "Clearing old profraw data") if(NOT LLVM_PROFDATA) @@ -40,32 +39,9 @@ if(LLVM_BUILD_INSTRUMENTED) # Therefor we call the generate-profraw target manually as part of this custom # command, which will only run if clang or ${CLANG_PGO_TRAINING_DEPS} are updated. COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target generate-profraw - DEPENDS clang ${CLANG_PGO_TRAINING_DEPS} - ) - string(TOUPPER "${LLVM_BUILD_INSTRUMENTED}" LLVM_BUILD_INSTRUMENTED) - if (LLVM_BUILD_INSTRUMENTED STREQUAL "CSSPGO") - set(PROFDATA_SAMPLE "--sample") - if(NOT LLVM_PROFGEN) - find_program(LLVM_PROFGEN llvm-profgen) - endif() - - if(NOT LLVM_PROFGEN) - message(STATUS "To enable converting CSSPGO samples LLVM_PROFGEN has to point to llvm-profgen") - endif() - - # Convert perf profiles into profraw - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/clang.profdata - COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py perf2prof ${LLVM_PROFGEN} $<TARGET_FILE:clang> ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR}/profiles/ - COMMENT "Converting perf profiles into profraw" - APPEND - ) - endif() - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/clang.profdata - COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py merge ${LLVM_PROFDATA} ${CMAKE_CURRENT_BINARY_DIR}/clang.profdata ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR}/profiles/ ${PROFDATA_SAMPLE} + COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py merge ${LLVM_PROFDATA} ${CMAKE_CURRENT_BINARY_DIR}/clang.profdata ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR}/profiles/ COMMENT "Merging profdata" - APPEND + DEPENDS clang ${CLANG_PGO_TRAINING_DEPS} ) add_custom_target(generate-profdata DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/clang.profdata) if (CLANG_PGO_TRAINING_DATA_SOURCE_DIR) diff --git a/clang/utils/perf-training/lit.cfg b/clang/utils/perf-training/lit.cfg index c6b54f4..0bd06c0 100644 --- a/clang/utils/perf-training/lit.cfg +++ b/clang/utils/perf-training/lit.cfg @@ -28,12 +28,6 @@ config.name = 'Clang Perf Training' config.suffixes = ['.c', '.cc', '.cpp', '.m', '.mm', '.cu', '.ll', '.cl', '.s', '.S', '.modulemap', '.test'] cc1_wrapper = '%s %s/perf-helper.py cc1' % (config.python_exe, config.perf_helper_dir) -if config.llvm_build_instrumented.upper() == "CSSPGO": - perf_wrapper = "%s %s/perf-helper.py perf --lbr --call-graph --event=br_inst_retired.near_taken:uppp -- " % ( - config.python_exe, - config.perf_helper_dir, - ) - cc1_wrapper = perf_wrapper use_lit_shell = os.environ.get("LIT_USE_INTERNAL_SHELL") config.test_format = lit.formats.ShTest(use_lit_shell == "0") diff --git a/clang/utils/perf-training/lit.site.cfg.in b/clang/utils/perf-training/lit.site.cfg.in index 0ae05c1..fae9306 100644 --- a/clang/utils/perf-training/lit.site.cfg.in +++ b/clang/utils/perf-training/lit.site.cfg.in @@ -8,7 +8,6 @@ config.test_exec_root = "@CMAKE_CURRENT_BINARY_DIR@" config.test_source_root = "@CLANG_PGO_TRAINING_DATA@" config.target_triple = "@LLVM_TARGET_TRIPLE@" config.python_exe = "@Python3_EXECUTABLE@" -config.llvm_build_instrumented = "@LLVM_BUILD_INSTRUMENTED@" # Let the main config do the real work. lit_config.load_config(config, "@CLANG_SOURCE_DIR@/utils/perf-training/lit.cfg") diff --git a/clang/utils/perf-training/perf-helper.py b/clang/utils/perf-training/perf-helper.py index fe1867d..3ed42a1 100644 --- a/clang/utils/perf-training/perf-helper.py +++ b/clang/utils/perf-training/perf-helper.py @@ -43,22 +43,14 @@ def clean(args): def merge(args): - parser = argparse.ArgumentParser( - prog="perf-helper merge", - description="Merges all profraw files from path(s) into output", - ) - parser.add_argument("profdata", help="Path to llvm-profdata tool") - parser.add_argument("output", help="Output filename") - parser.add_argument( - "paths", nargs="+", help="Folder(s) containing input profraw files" - ) - parser.add_argument("--sample", action="store_true", help="Sample profile") - opts = parser.parse_args(args) - - cmd = [opts.profdata, "merge", "-o", opts.output] - if opts.sample: - cmd += ["--sample"] - for path in opts.paths: + if len(args) < 3: + print( + "Usage: %s merge <llvm-profdata> <output> <paths>\n" % __file__ + + "\tMerges all profraw files from path into output." + ) + return 1 + cmd = [args[0], "merge", "-o", args[1]] + for path in args[2:]: cmd.extend(findFilesWithExtension(path, "profraw")) subprocess.check_call(cmd) return 0 @@ -79,16 +71,11 @@ def merge_fdata(args): def perf(args): parser = argparse.ArgumentParser( - prog="perf-helper perf", - description="perf wrapper for BOLT/CSSPGO profile collection", + prog="perf-helper perf", description="perf wrapper for BOLT profile collection" ) parser.add_argument( "--lbr", action="store_true", help="Use perf with branch stacks" ) - parser.add_argument("--call-graph", action="store_true", help="Collect call graph") - parser.add_argument( - "--event", help="PMU event name, defaults to cycles:u", default="cycles:u" - ) parser.add_argument("cmd", nargs=argparse.REMAINDER, help="") opts = parser.parse_args(args) @@ -97,14 +84,12 @@ def perf(args): perf_args = [ "perf", "record", - f"--event={opts.event}", + "--event=cycles:u", "--freq=max", "--output=%d.perf.data" % os.getpid(), ] if opts.lbr: perf_args += ["--branch-filter=any,u"] - if opts.call_graph: - perf_args += ["-g", "--call-graph=fp"] perf_args.extend(cmd) start_time = time.time() @@ -140,26 +125,6 @@ def perf2bolt(args): return 0 -def perf2prof(args): - parser = argparse.ArgumentParser( - prog="perf-helper perf2prof", - description="perf to CSSPGO prof conversion wrapper", - ) - parser.add_argument("profgen", help="Path to llvm-profgen binary") - parser.add_argument("binary", help="Input binary") - parser.add_argument("paths", nargs="+", help="Path containing perf.data files") - opts = parser.parse_args(args) - - profgen_args = [opts.profgen, f"--binary={opts.binary}"] - for path in opts.paths: - for filename in findFilesWithExtension(path, "perf.data"): - subprocess.check_call( - profgen_args - + [f"--perfdata={filename}", f"--output={filename}.profraw"] - ) - return 0 - - def dtrace(args): parser = argparse.ArgumentParser( prog="perf-helper dtrace", @@ -602,7 +567,6 @@ commands = { "merge-fdata": merge_fdata, "perf": perf, "perf2bolt": perf2bolt, - "perf2prof": perf2prof, } diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt index a311764..c637feb 100644 --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -948,9 +948,6 @@ set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR ${LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_defa set(LLVM_PROFDATA_FILE "" CACHE FILEPATH "Profiling data file to use when compiling in order to improve runtime performance.") -set(LLVM_SPROFDATA_FILE "" CACHE FILEPATH - "Sampling profiling data file to use when compiling in order to improve runtime performance.") - if(LLVM_INCLUDE_TESTS) # All LLVM Python files should be compatible down to this minimum version. set(LLVM_MINIMUM_PYTHON_VERSION 3.8) diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake index 90e06ef..ed13a82 100644 --- a/llvm/cmake/modules/HandleLLVMOptions.cmake +++ b/llvm/cmake/modules/HandleLLVMOptions.cmake @@ -1134,7 +1134,7 @@ endif() option(LLVM_ENABLE_IR_PGO "Build LLVM and tools with IR PGO instrumentation (deprecated)" Off) mark_as_advanced(LLVM_ENABLE_IR_PGO) -set(LLVM_BUILD_INSTRUMENTED OFF CACHE STRING "Build LLVM and tools with PGO instrumentation. May be specified as IR, Frontend, CSIR, CSSPGO") +set(LLVM_BUILD_INSTRUMENTED OFF CACHE STRING "Build LLVM and tools with PGO instrumentation. May be specified as IR or Frontend") set(LLVM_VP_COUNTERS_PER_SITE "1.5" CACHE STRING "Value profile counters to use per site for IR PGO with Clang") mark_as_advanced(LLVM_BUILD_INSTRUMENTED LLVM_VP_COUNTERS_PER_SITE) string(TOUPPER "${LLVM_BUILD_INSTRUMENTED}" uppercase_LLVM_BUILD_INSTRUMENTED) @@ -1167,15 +1167,6 @@ if (LLVM_BUILD_INSTRUMENTED) CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) endif() - elseif(uppercase_LLVM_BUILD_INSTRUMENTED STREQUAL "CSSPGO") - append("-fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fno-optimize-sibling-calls -fpseudo-probe-for-profiling" - CMAKE_CXX_FLAGS - CMAKE_C_FLAGS) - if(NOT LINKER_IS_LLD_LINK) - append("-fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fno-optimize-sibling-calls -fpseudo-probe-for-profiling" - CMAKE_EXE_LINKER_FLAGS - CMAKE_SHARED_LINKER_FLAGS) - endif() else() append("-fprofile-instr-generate=\"${LLVM_PROFILE_FILE_PATTERN}\"" CMAKE_CXX_FLAGS @@ -1226,21 +1217,6 @@ if(LLVM_PROFDATA_FILE AND EXISTS ${LLVM_PROFDATA_FILE}) endif() endif() -if(LLVM_SPROFDATA_FILE AND EXISTS ${LLVM_SPROFDATA_FILE}) - if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" ) - append("-fpseudo-probe-for-profiling -fprofile-sample-use=\"${LLVM_SPROFDATA_FILE}\"" - CMAKE_CXX_FLAGS - CMAKE_C_FLAGS) - if(NOT LINKER_IS_LLD_LINK) - append("-fpseudo-probe-for-profiling -fprofile-sample-use=\"${LLVM_SPROFDATA_FILE}\"" - CMAKE_EXE_LINKER_FLAGS - CMAKE_SHARED_LINKER_FLAGS) - endif() - else() - message(FATAL_ERROR "LLVM_SPROFDATA_FILE can only be specified when compiling with clang") - endif() -endif() - option(LLVM_BUILD_INSTRUMENTED_COVERAGE "Build LLVM and tools with Code Coverage instrumentation" Off) option(LLVM_INDIVIDUAL_TEST_COVERAGE "Emit individual coverage file for each test case." OFF) mark_as_advanced(LLVM_BUILD_INSTRUMENTED_COVERAGE) |