aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas van Kempen <nvankemp@gmail.com>2024-09-21 20:55:20 -0700
committerAmir Ayupov <aaupov@fb.com>2024-09-21 20:55:20 -0700
commit20a84870ed60069f0d6c860bd394d05d8b2ddeaa (patch)
tree1e9d10e83931872988783c93b9159271635e0286
parent89cf0c6584aa92e8547fcd901cf9851f94dfd942 (diff)
downloadllvm-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.txt12
-rw-r--r--clang/cmake/caches/BOLT-CSSPGO.cmake17
-rw-r--r--clang/cmake/caches/CSSPGO.cmake3
-rw-r--r--clang/utils/perf-training/CMakeLists.txt28
-rw-r--r--clang/utils/perf-training/lit.cfg6
-rw-r--r--clang/utils/perf-training/lit.site.cfg.in1
-rw-r--r--clang/utils/perf-training/perf-helper.py56
-rw-r--r--llvm/CMakeLists.txt3
-rw-r--r--llvm/cmake/modules/HandleLLVMOptions.cmake26
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)