mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-26 23:21:11 +00:00
Revert "Reland [Clang][CMake] Support perf, LBR, and Instrument CLANG_BOLT options (#69133)"
This reverts commit b83b8d3fd1
.
Breaks buildbots e.g.
https://lab.llvm.org/buildbot/#/builders/225/builds/29950
This commit is contained in:
parent
1d5c16d780
commit
6953b36702
@ -876,38 +876,23 @@ if (CLANG_ENABLE_BOOTSTRAP)
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
set(CLANG_BOLT OFF CACHE STRING "Apply BOLT optimization to Clang. \
|
||||
May be specified as Instrument or Perf or LBR to use a particular profiling \
|
||||
mechanism.")
|
||||
string(TOUPPER "${CLANG_BOLT}" CLANG_BOLT)
|
||||
|
||||
if (CLANG_BOLT AND NOT LLVM_BUILD_INSTRUMENTED)
|
||||
if (CLANG_BOLT_INSTRUMENT AND NOT LLVM_BUILD_INSTRUMENTED)
|
||||
set(CLANG_PATH ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang)
|
||||
set(CLANG_INSTRUMENTED ${LLVM_RUNTIME_OUTPUT_INTDIR}/${CLANG_BOLT_INSTRUMENTED})
|
||||
set(CLANG_INSTRUMENTED ${CLANG_PATH}-bolt.inst)
|
||||
set(BOLT_FDATA ${CMAKE_CURRENT_BINARY_DIR}/utils/perf-training/prof.fdata)
|
||||
|
||||
# Pass extra flag in no-LBR mode
|
||||
if (CLANG_BOLT STREQUAL "PERF")
|
||||
set(BOLT_NO_LBR "-nl")
|
||||
endif()
|
||||
|
||||
if (CLANG_BOLT STREQUAL "INSTRUMENT")
|
||||
# Instrument clang with BOLT
|
||||
add_custom_target(clang-instrumented
|
||||
DEPENDS ${CLANG_INSTRUMENTED}
|
||||
)
|
||||
add_custom_command(OUTPUT ${CLANG_INSTRUMENTED}
|
||||
DEPENDS clang llvm-bolt
|
||||
COMMAND llvm-bolt ${CLANG_PATH} -o ${CLANG_INSTRUMENTED}
|
||||
-instrument --instrumentation-file-append-pid
|
||||
--instrumentation-file=${BOLT_FDATA}
|
||||
COMMENT "Instrumenting clang binary with BOLT"
|
||||
VERBATIM
|
||||
)
|
||||
add_custom_target(clang-bolt-training-deps DEPENDS clang-instrumented)
|
||||
else() # perf or LBR
|
||||
add_custom_target(clang-bolt-training-deps DEPENDS clang)
|
||||
endif()
|
||||
# Instrument clang with BOLT
|
||||
add_custom_target(clang-instrumented
|
||||
DEPENDS ${CLANG_INSTRUMENTED}
|
||||
)
|
||||
add_custom_command(OUTPUT ${CLANG_INSTRUMENTED}
|
||||
DEPENDS clang llvm-bolt
|
||||
COMMAND llvm-bolt ${CLANG_PATH} -o ${CLANG_INSTRUMENTED}
|
||||
-instrument --instrumentation-file-append-pid
|
||||
--instrumentation-file=${BOLT_FDATA}
|
||||
COMMENT "Instrumenting clang binary with BOLT"
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
# Optimize original (pre-bolt) Clang using the collected profile
|
||||
set(CLANG_OPTIMIZED ${CMAKE_CURRENT_BINARY_DIR}/clang.bolt)
|
||||
@ -921,7 +906,6 @@ if (CLANG_BOLT AND NOT LLVM_BUILD_INSTRUMENTED)
|
||||
-data ${BOLT_FDATA}
|
||||
-reorder-blocks=ext-tsp -reorder-functions=hfsort+ -split-functions
|
||||
-split-all-cold -split-eh -dyno-stats -icf=1 -use-gnu-stack
|
||||
${BOLT_NO_LBR}
|
||||
COMMAND ${CMAKE_COMMAND} -E rename ${CLANG_OPTIMIZED} $<TARGET_FILE:clang>
|
||||
COMMENT "Optimizing Clang with BOLT"
|
||||
VERBATIM
|
||||
|
@ -1,5 +1,5 @@
|
||||
set(CMAKE_BUILD_TYPE Release CACHE STRING "")
|
||||
set(CLANG_BOLT "INSTRUMENT" CACHE STRING "")
|
||||
set(CLANG_BOLT_INSTRUMENT ON CACHE BOOL "")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--emit-relocs,-znow" CACHE STRING "")
|
||||
|
||||
set(LLVM_ENABLE_PROJECTS "bolt;clang" CACHE STRING "")
|
||||
|
@ -62,9 +62,7 @@ if(APPLE AND DTRACE AND NOT LLVM_TOOL_LLVM_DRIVER_BUILD)
|
||||
DEPENDS generate-dtrace-logs)
|
||||
endif()
|
||||
|
||||
if(CLANG_BOLT AND NOT LLVM_BUILD_INSTRUMENTED)
|
||||
set(CLANG_BOLT_INSTRUMENTED "clang-bolt.inst" CACHE STRING
|
||||
"Name of BOLT-instrumented Clang binary")
|
||||
if(CLANG_BOLT_INSTRUMENT AND NOT LLVM_BUILD_INSTRUMENTED)
|
||||
configure_lit_site_cfg(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/bolt.lit.site.cfg.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/bolt-fdata/lit.site.cfg
|
||||
@ -73,37 +71,16 @@ if(CLANG_BOLT AND NOT LLVM_BUILD_INSTRUMENTED)
|
||||
add_lit_testsuite(generate-bolt-fdata "Generating BOLT profile for Clang"
|
||||
${CMAKE_CURRENT_BINARY_DIR}/bolt-fdata/
|
||||
EXCLUDE_FROM_CHECK_ALL
|
||||
DEPENDS clang-bolt-training-deps clear-bolt-fdata clear-perf-data
|
||||
DEPENDS clang-instrumented clear-bolt-fdata
|
||||
)
|
||||
|
||||
add_custom_target(clear-bolt-fdata
|
||||
COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py clean ${CMAKE_CURRENT_BINARY_DIR} fdata
|
||||
COMMENT "Clearing old BOLT fdata")
|
||||
|
||||
add_custom_target(clear-perf-data
|
||||
COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py clean ${CMAKE_CURRENT_BINARY_DIR} perf.data
|
||||
COMMENT "Clearing old perf data")
|
||||
|
||||
string(TOUPPER "${CLANG_BOLT}" CLANG_BOLT)
|
||||
if (CLANG_BOLT STREQUAL "LBR")
|
||||
set(BOLT_LBR "--lbr")
|
||||
endif()
|
||||
|
||||
add_custom_target(merge-fdata-deps)
|
||||
if (CLANG_BOLT STREQUAL "INSTRUMENT")
|
||||
add_dependencies(merge-fdata-deps generate-bolt-fdata)
|
||||
else()
|
||||
# Convert perf profiles into fdata
|
||||
add_custom_target(convert-perf-fdata
|
||||
COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py perf2bolt $<TARGET_FILE:llvm-bolt> ${CMAKE_CURRENT_BINARY_DIR} $<TARGET_FILE:clang> ${BOLT_LBR}
|
||||
COMMENT "Converting perf files to BOLT fdata"
|
||||
DEPENDS llvm-bolt generate-bolt-fdata)
|
||||
add_dependencies(merge-fdata-deps convert-perf-fdata)
|
||||
endif()
|
||||
|
||||
# Merge profiles into one using merge-fdata
|
||||
add_custom_target(clang-bolt-profile
|
||||
COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py merge-fdata $<TARGET_FILE:merge-fdata> ${CMAKE_CURRENT_BINARY_DIR}/prof.fdata ${CMAKE_CURRENT_BINARY_DIR}
|
||||
COMMENT "Merging BOLT fdata"
|
||||
DEPENDS merge-fdata merge-fdata-deps)
|
||||
DEPENDS merge-fdata generate-bolt-fdata)
|
||||
endif()
|
||||
|
@ -6,46 +6,15 @@ import lit.util
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
clang_bolt_mode = config.clang_bolt_mode.lower()
|
||||
clang_binary = "clang"
|
||||
perf_wrapper = f"{config.python_exe} {config.perf_helper_dir}/perf-helper.py perf "
|
||||
config.clang = os.path.realpath(lit.util.which('clang-bolt.inst', config.clang_tools_dir)).replace('\\', '/')
|
||||
|
||||
if clang_bolt_mode == "instrument":
|
||||
perf_wrapper = ""
|
||||
clang_binary = config.clang_bolt_name
|
||||
elif clang_bolt_mode == "lbr":
|
||||
perf_wrapper += " --lbr -- "
|
||||
elif clang_bolt_mode == "perf":
|
||||
perf_wrapper += " -- "
|
||||
else:
|
||||
assert 0, "Unsupported CLANG_BOLT_MODE variable"
|
||||
|
||||
config.clang = perf_wrapper + os.path.realpath(
|
||||
lit.util.which(clang_binary, config.clang_tools_dir)
|
||||
).replace("\\", "/")
|
||||
|
||||
config.name = "Clang Perf Training"
|
||||
config.suffixes = [
|
||||
".c",
|
||||
".cc",
|
||||
".cpp",
|
||||
".m",
|
||||
".mm",
|
||||
".cu",
|
||||
".ll",
|
||||
".cl",
|
||||
".s",
|
||||
".S",
|
||||
".modulemap",
|
||||
".test",
|
||||
]
|
||||
config.name = 'Clang Perf Training'
|
||||
config.suffixes = ['.c', '.cc', '.cpp', '.m', '.mm', '.cu', '.ll', '.cl', '.s', '.S', '.modulemap', '.test']
|
||||
|
||||
use_lit_shell = os.environ.get("LIT_USE_INTERNAL_SHELL")
|
||||
config.test_format = lit.formats.ShTest(use_lit_shell == "0")
|
||||
config.substitutions.append(
|
||||
("%clang_cpp_skip_driver", f" {config.clang} --driver-mode=g++ ")
|
||||
)
|
||||
config.substitutions.append(("%clang_cpp", f" {config.clang} --driver-mode=g++ "))
|
||||
config.substitutions.append(("%clang_skip_driver", config.clang))
|
||||
config.substitutions.append(("%clang", config.clang))
|
||||
config.substitutions.append(("%test_root", config.test_exec_root))
|
||||
config.substitutions.append( ('%clang_cpp_skip_driver', ' %s --driver-mode=g++ ' % (config.clang)))
|
||||
config.substitutions.append( ('%clang_cpp', ' %s --driver-mode=g++ ' % (config.clang)))
|
||||
config.substitutions.append( ('%clang_skip_driver', ' %s ' % (config.clang)))
|
||||
config.substitutions.append( ('%clang', ' %s ' % (config.clang) ) )
|
||||
config.substitutions.append( ('%test_root', config.test_exec_root ) )
|
||||
|
@ -9,8 +9,6 @@ config.test_source_root = "@CLANG_PGO_TRAINING_DATA@"
|
||||
config.target_triple = "@LLVM_TARGET_TRIPLE@"
|
||||
config.python_exe = "@Python3_EXECUTABLE@"
|
||||
config.clang_obj_root = path(r"@CLANG_BINARY_DIR@")
|
||||
config.clang_bolt_mode = "@CLANG_BOLT@"
|
||||
config.clang_bolt_name = "@CLANG_BOLT_INSTRUMENTED@"
|
||||
|
||||
# Let the main config do the real work.
|
||||
lit_config.load_config(config, "@CLANG_SOURCE_DIR@/utils/perf-training/bolt.lit.cfg")
|
||||
|
@ -67,62 +67,6 @@ def merge_fdata(args):
|
||||
return 0
|
||||
|
||||
|
||||
def perf(args):
|
||||
parser = argparse.ArgumentParser(
|
||||
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("cmd", nargs=argparse.REMAINDER, help="")
|
||||
|
||||
opts = parser.parse_args(args)
|
||||
cmd = opts.cmd[1:]
|
||||
|
||||
perf_args = [
|
||||
"perf",
|
||||
"record",
|
||||
"--event=cycles:u",
|
||||
"--freq=max",
|
||||
"--output=%d.perf.data" % os.getpid(),
|
||||
]
|
||||
if opts.lbr:
|
||||
perf_args += ["--branch-filter=any,u"]
|
||||
perf_args.extend(cmd)
|
||||
|
||||
start_time = time.time()
|
||||
subprocess.check_call(perf_args)
|
||||
|
||||
elapsed = time.time() - start_time
|
||||
print("... data collection took %.4fs" % elapsed)
|
||||
return 0
|
||||
|
||||
|
||||
def perf2bolt(args):
|
||||
parser = argparse.ArgumentParser(
|
||||
prog="perf-helper perf2bolt",
|
||||
description="perf2bolt conversion wrapper for perf.data files",
|
||||
)
|
||||
parser.add_argument("bolt", help="Path to llvm-bolt")
|
||||
parser.add_argument("path", help="Path containing perf.data files")
|
||||
parser.add_argument("binary", help="Input binary")
|
||||
parser.add_argument("--lbr", action="store_true", help="Use LBR perf2bolt mode")
|
||||
opts = parser.parse_args(args)
|
||||
|
||||
p2b_args = [
|
||||
opts.bolt,
|
||||
opts.binary,
|
||||
"--aggregate-only",
|
||||
"--profile-format=yaml",
|
||||
]
|
||||
if not opts.lbr:
|
||||
p2b_args += ["-nl"]
|
||||
p2b_args += ["-p"]
|
||||
for filename in findFilesWithExtension(opts.path, "perf.data"):
|
||||
subprocess.check_call(p2b_args + [filename, "-o", filename + ".fdata"])
|
||||
return 0
|
||||
|
||||
|
||||
def dtrace(args):
|
||||
parser = argparse.ArgumentParser(
|
||||
prog="perf-helper dtrace",
|
||||
@ -563,8 +507,6 @@ commands = {
|
||||
"cc1": cc1,
|
||||
"gen-order-file": genOrderFile,
|
||||
"merge-fdata": merge_fdata,
|
||||
"perf": perf,
|
||||
"perf2bolt": perf2bolt,
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user