Skip to content

Commit 6c47419

Browse files
committed
Revert "[Clang][CMake] Support perf, LBR, and Instrument CLANG_BOLT options (#69133)"
This reverts commit 745883b. This is failing to configure on many of our bots: https://lab.llvm.org/buildbot/#/builders/245/builds/19468 This did not get caught right away because generally bots only clean the build every so often.
1 parent 0845514 commit 6c47419

File tree

6 files changed

+26
-156
lines changed

6 files changed

+26
-156
lines changed

clang/CMakeLists.txt

Lines changed: 14 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -876,38 +876,23 @@ if (CLANG_ENABLE_BOOTSTRAP)
876876
endforeach()
877877
endif()
878878

879-
set(CLANG_BOLT "INSTRUMENT" CACHE STRING "Apply BOLT optimization to Clang. \
880-
May be specified as Instrument or Perf or LBR to use a particular profiling \
881-
mechanism.")
882-
string(TOUPPER "${CLANG_BOLT}" CLANG_BOLT)
883-
884-
if (CLANG_BOLT AND NOT LLVM_BUILD_INSTRUMENTED)
879+
if (CLANG_BOLT_INSTRUMENT AND NOT LLVM_BUILD_INSTRUMENTED)
885880
set(CLANG_PATH ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang)
886-
set(CLANG_INSTRUMENTED ${LLVM_RUNTIME_OUTPUT_INTDIR}/${CLANG_BOLT_INSTRUMENTED})
881+
set(CLANG_INSTRUMENTED ${CLANG_PATH}-bolt.inst)
887882
set(BOLT_FDATA ${CMAKE_CURRENT_BINARY_DIR}/utils/perf-training/prof.fdata)
888883

889-
# Pass extra flag in no-LBR mode
890-
if (CLANG_BOLT STREQUAL "PERF")
891-
set(BOLT_NO_LBR "-nl")
892-
endif()
893-
894-
if (CLANG_BOLT STREQUAL "INSTRUMENT")
895-
# Instrument clang with BOLT
896-
add_custom_target(clang-instrumented
897-
DEPENDS ${CLANG_INSTRUMENTED}
898-
)
899-
add_custom_command(OUTPUT ${CLANG_INSTRUMENTED}
900-
DEPENDS clang llvm-bolt
901-
COMMAND llvm-bolt ${CLANG_PATH} -o ${CLANG_INSTRUMENTED}
902-
-instrument --instrumentation-file-append-pid
903-
--instrumentation-file=${BOLT_FDATA}
904-
COMMENT "Instrumenting clang binary with BOLT"
905-
VERBATIM
906-
)
907-
add_custom_target(clang-bolt-training-deps DEPENDS clang-instrumented)
908-
else() # perf or LBR
909-
add_custom_target(clang-bolt-training-deps DEPENDS clang)
910-
endif()
884+
# Instrument clang with BOLT
885+
add_custom_target(clang-instrumented
886+
DEPENDS ${CLANG_INSTRUMENTED}
887+
)
888+
add_custom_command(OUTPUT ${CLANG_INSTRUMENTED}
889+
DEPENDS clang llvm-bolt
890+
COMMAND llvm-bolt ${CLANG_PATH} -o ${CLANG_INSTRUMENTED}
891+
-instrument --instrumentation-file-append-pid
892+
--instrumentation-file=${BOLT_FDATA}
893+
COMMENT "Instrumenting clang binary with BOLT"
894+
VERBATIM
895+
)
911896

912897
# Optimize original (pre-bolt) Clang using the collected profile
913898
set(CLANG_OPTIMIZED ${CMAKE_CURRENT_BINARY_DIR}/clang.bolt)
@@ -921,7 +906,6 @@ if (CLANG_BOLT AND NOT LLVM_BUILD_INSTRUMENTED)
921906
-data ${BOLT_FDATA}
922907
-reorder-blocks=ext-tsp -reorder-functions=hfsort+ -split-functions
923908
-split-all-cold -split-eh -dyno-stats -icf=1 -use-gnu-stack
924-
${BOLT_NO_LBR}
925909
COMMAND ${CMAKE_COMMAND} -E rename ${CLANG_OPTIMIZED} $<TARGET_FILE:clang>
926910
COMMENT "Optimizing Clang with BOLT"
927911
VERBATIM

clang/cmake/caches/BOLT.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
set(CMAKE_BUILD_TYPE Release CACHE STRING "")
2-
set(CLANG_BOLT "INSTRUMENT" CACHE STRING "")
2+
set(CLANG_BOLT_INSTRUMENT ON CACHE BOOL "")
33
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--emit-relocs,-znow" CACHE STRING "")
44

55
set(LLVM_ENABLE_PROJECTS "bolt;clang" CACHE STRING "")

clang/utils/perf-training/CMakeLists.txt

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,7 @@ if(APPLE AND DTRACE AND NOT LLVM_TOOL_LLVM_DRIVER_BUILD)
6262
DEPENDS generate-dtrace-logs)
6363
endif()
6464

65-
if(CLANG_BOLT AND NOT LLVM_BUILD_INSTRUMENTED)
66-
set(CLANG_BOLT_INSTRUMENTED "clang-bolt.inst" CACHE STRING
67-
"Name of BOLT-instrumented Clang binary")
65+
if(CLANG_BOLT_INSTRUMENT AND NOT LLVM_BUILD_INSTRUMENTED)
6866
configure_lit_site_cfg(
6967
${CMAKE_CURRENT_SOURCE_DIR}/bolt.lit.site.cfg.in
7068
${CMAKE_CURRENT_BINARY_DIR}/bolt-fdata/lit.site.cfg
@@ -73,37 +71,16 @@ if(CLANG_BOLT AND NOT LLVM_BUILD_INSTRUMENTED)
7371
add_lit_testsuite(generate-bolt-fdata "Generating BOLT profile for Clang"
7472
${CMAKE_CURRENT_BINARY_DIR}/bolt-fdata/
7573
EXCLUDE_FROM_CHECK_ALL
76-
DEPENDS clang-bolt-training-deps clear-bolt-fdata clear-perf-data
74+
DEPENDS clang-instrumented clear-bolt-fdata
7775
)
7876

7977
add_custom_target(clear-bolt-fdata
8078
COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py clean ${CMAKE_CURRENT_BINARY_DIR} fdata
8179
COMMENT "Clearing old BOLT fdata")
8280

83-
add_custom_target(clear-perf-data
84-
COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py clean ${CMAKE_CURRENT_BINARY_DIR} perf.data
85-
COMMENT "Clearing old perf data")
86-
87-
string(TOUPPER "${CLANG_BOLT}" CLANG_BOLT)
88-
if (CLANG_BOLT STREQUAL "LBR")
89-
set(BOLT_LBR "--lbr")
90-
endif()
91-
92-
add_custom_target(merge-fdata-deps)
93-
if (CLANG_BOLT STREQUAL "INSTRUMENT")
94-
add_dependencies(merge-fdata-deps generate-bolt-fdata)
95-
else()
96-
# Convert perf profiles into fdata
97-
add_custom_target(convert-perf-fdata
98-
COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py perf2bolt $<TARGET_FILE:llvm-bolt> ${CMAKE_CURRENT_BINARY_DIR} $<TARGET_FILE:clang> ${BOLT_LBR}
99-
COMMENT "Converting perf files to BOLT fdata"
100-
DEPENDS llvm-bolt generate-bolt-fdata)
101-
add_dependencies(merge-fdata-deps convert-perf-fdata)
102-
endif()
103-
10481
# Merge profiles into one using merge-fdata
10582
add_custom_target(clang-bolt-profile
10683
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}
10784
COMMENT "Merging BOLT fdata"
108-
DEPENDS merge-fdata merge-fdata-deps)
85+
DEPENDS merge-fdata generate-bolt-fdata)
10986
endif()

clang/utils/perf-training/bolt.lit.cfg

Lines changed: 8 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -6,46 +6,15 @@ import lit.util
66
import os
77
import subprocess
88

9-
clang_bolt_mode = config.clang_bolt_mode.lower()
10-
clang_binary = "clang"
11-
perf_wrapper = f"{config.python_exe} {config.perf_helper_dir}/perf-helper.py perf "
9+
config.clang = os.path.realpath(lit.util.which('clang-bolt.inst', config.clang_tools_dir)).replace('\\', '/')
1210

13-
if clang_bolt_mode == "instrument":
14-
perf_wrapper = ""
15-
clang_binary = config.clang_bolt_name
16-
elif clang_bolt_mode == "lbr":
17-
perf_wrapper += " --lbr -- "
18-
elif clang_bolt_mode == "perf":
19-
perf_wrapper += " -- "
20-
else:
21-
assert 0, "Unsupported CLANG_BOLT_MODE variable"
22-
23-
config.clang = perf_wrapper + os.path.realpath(
24-
lit.util.which(clang_binary, config.clang_tools_dir)
25-
).replace("\\", "/")
26-
27-
config.name = "Clang Perf Training"
28-
config.suffixes = [
29-
".c",
30-
".cc",
31-
".cpp",
32-
".m",
33-
".mm",
34-
".cu",
35-
".ll",
36-
".cl",
37-
".s",
38-
".S",
39-
".modulemap",
40-
".test",
41-
]
11+
config.name = 'Clang Perf Training'
12+
config.suffixes = ['.c', '.cc', '.cpp', '.m', '.mm', '.cu', '.ll', '.cl', '.s', '.S', '.modulemap', '.test']
4213

4314
use_lit_shell = os.environ.get("LIT_USE_INTERNAL_SHELL")
4415
config.test_format = lit.formats.ShTest(use_lit_shell == "0")
45-
config.substitutions.append(
46-
("%clang_cpp_skip_driver", f" {config.clang} --driver-mode=g++ ")
47-
)
48-
config.substitutions.append(("%clang_cpp", f" {config.clang} --driver-mode=g++ "))
49-
config.substitutions.append(("%clang_skip_driver", config.clang))
50-
config.substitutions.append(("%clang", config.clang))
51-
config.substitutions.append(("%test_root", config.test_exec_root))
16+
config.substitutions.append( ('%clang_cpp_skip_driver', ' %s --driver-mode=g++ ' % (config.clang)))
17+
config.substitutions.append( ('%clang_cpp', ' %s --driver-mode=g++ ' % (config.clang)))
18+
config.substitutions.append( ('%clang_skip_driver', ' %s ' % (config.clang)))
19+
config.substitutions.append( ('%clang', ' %s ' % (config.clang) ) )
20+
config.substitutions.append( ('%test_root', config.test_exec_root ) )

clang/utils/perf-training/bolt.lit.site.cfg.in

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ config.test_source_root = "@CLANG_PGO_TRAINING_DATA@"
99
config.target_triple = "@LLVM_TARGET_TRIPLE@"
1010
config.python_exe = "@Python3_EXECUTABLE@"
1111
config.clang_obj_root = path(r"@CLANG_BINARY_DIR@")
12-
config.clang_bolt_mode = "@CLANG_BOLT@"
13-
config.clang_bolt_name = "@CLANG_BOLT_INSTRUMENTED@"
1412

1513
# Let the main config do the real work.
1614
lit_config.load_config(config, "@CLANG_SOURCE_DIR@/utils/perf-training/bolt.lit.cfg")

clang/utils/perf-training/perf-helper.py

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -67,62 +67,6 @@ def merge_fdata(args):
6767
return 0
6868

6969

70-
def perf(args):
71-
parser = argparse.ArgumentParser(
72-
prog="perf-helper perf", description="perf wrapper for BOLT profile collection"
73-
)
74-
parser.add_argument(
75-
"--lbr", action="store_true", help="Use perf with branch stacks"
76-
)
77-
parser.add_argument("cmd", nargs=argparse.REMAINDER, help="")
78-
79-
opts = parser.parse_args(args)
80-
cmd = opts.cmd[1:]
81-
82-
perf_args = [
83-
"perf",
84-
"record",
85-
"--event=cycles:u",
86-
"--freq=max",
87-
"--output=%d.perf.data" % os.getpid(),
88-
]
89-
if opts.lbr:
90-
perf_args += ["--branch-filter=any,u"]
91-
perf_args.extend(cmd)
92-
93-
start_time = time.time()
94-
subprocess.check_call(perf_args)
95-
96-
elapsed = time.time() - start_time
97-
print("... data collection took %.4fs" % elapsed)
98-
return 0
99-
100-
101-
def perf2bolt(args):
102-
parser = argparse.ArgumentParser(
103-
prog="perf-helper perf2bolt",
104-
description="perf2bolt conversion wrapper for perf.data files",
105-
)
106-
parser.add_argument("bolt", help="Path to llvm-bolt")
107-
parser.add_argument("path", help="Path containing perf.data files")
108-
parser.add_argument("binary", help="Input binary")
109-
parser.add_argument("--lbr", action="store_true", help="Use LBR perf2bolt mode")
110-
opts = parser.parse_args(args)
111-
112-
p2b_args = [
113-
opts.bolt,
114-
opts.binary,
115-
"--aggregate-only",
116-
"--profile-format=yaml",
117-
]
118-
if not opts.lbr:
119-
p2b_args += ["-nl"]
120-
p2b_args += ["-p"]
121-
for filename in findFilesWithExtension(opts.path, "perf.data"):
122-
subprocess.check_call(p2b_args + [filename, "-o", filename + ".fdata"])
123-
return 0
124-
125-
12670
def dtrace(args):
12771
parser = argparse.ArgumentParser(
12872
prog="perf-helper dtrace",
@@ -563,8 +507,6 @@ def genOrderFile(args):
563507
"cc1": cc1,
564508
"gen-order-file": genOrderFile,
565509
"merge-fdata": merge_fdata,
566-
"perf": perf,
567-
"perf2bolt": perf2bolt,
568510
}
569511

570512

0 commit comments

Comments
 (0)