mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-16 00:26:31 +00:00
74 lines
2.1 KiB
Bash
Executable File
74 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
|
|
PROGNAME="$(basename "${0}")"
|
|
MONOREPO_ROOT="$(realpath $(dirname "${PROGNAME}"))"
|
|
function usage() {
|
|
cat <<EOF
|
|
Usage:
|
|
${PROGNAME} [-h|--help] <baseline-build> <candidate-build> benchmarks... [-- gbench-args...]
|
|
|
|
Compare the given benchmarks between the baseline and the candidate build directories.
|
|
|
|
This requires those benchmarks to have already been generated in both build directories.
|
|
|
|
<baseline-build> The path to the build directory considered the baseline.
|
|
<candidate-build> The path to the build directory considered the candidate.
|
|
benchmarks... Paths of the benchmarks to compare. Those paths are relative to '<monorepo-root>'.
|
|
[-- gbench-args...] Any arguments provided after '--' will be passed as-is to GoogleBenchmark's compare.py tool.
|
|
|
|
Example
|
|
=======
|
|
$ libcxx-lit build1/ -sv libcxx/test/benchmarks/algorithms/for_each.bench.cpp
|
|
$ libcxx-lit build2/ -sv libcxx/test/benchmarks/algorithms/for_each.bench.cpp
|
|
$ ${PROGNAME} build1/ build2/ libcxx/test/benchmarks/algorithms/for_each.bench.cpp
|
|
EOF
|
|
}
|
|
|
|
if [[ "${1}" == "-h" || "${1}" == "--help" ]]; then
|
|
usage
|
|
exit 0
|
|
fi
|
|
|
|
if [[ $# -lt 1 ]]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
baseline="${1}"
|
|
candidate="${2}"
|
|
shift; shift
|
|
|
|
GBENCH="${MONOREPO_ROOT}/third-party/benchmark"
|
|
|
|
python3 -m venv /tmp/libcxx-compare-benchmarks-venv
|
|
source /tmp/libcxx-compare-benchmarks-venv/bin/activate
|
|
pip3 install -r ${GBENCH}/tools/requirements.txt
|
|
|
|
benchmarks=""
|
|
while [[ $# -gt 0 ]]; do
|
|
if [[ "${1}" == "--" ]]; then
|
|
shift
|
|
break
|
|
fi
|
|
benchmarks+=" ${1}"
|
|
shift
|
|
done
|
|
|
|
for benchmark in ${benchmarks}; do
|
|
base="$(${MONOREPO_ROOT}/libcxx/utils/libcxx-benchmark-json ${baseline} ${benchmark})"
|
|
cand="$(${MONOREPO_ROOT}/libcxx/utils/libcxx-benchmark-json ${candidate} ${benchmark})"
|
|
|
|
if [[ ! -e "${base}" ]]; then
|
|
echo "Benchmark ${benchmark} does not exist in the baseline"
|
|
continue
|
|
fi
|
|
if [[ ! -e "${cand}" ]]; then
|
|
echo "Benchmark ${benchmark} does not exist in the candidate"
|
|
continue
|
|
fi
|
|
|
|
"${GBENCH}/tools/compare.py" benchmarks "${base}" "${cand}" ${@}
|
|
done
|