3 # Script that checks that critical functions in TSan runtime have correct number
4 # of push/pop/rsp instructions to verify that runtime is efficient enough.
6 # This test can fail when backend code generation changes the output for various
7 # tsan interceptors. When such a change happens, you can ensure that the
8 # performance has not regressed by running the following benchmarks before and
9 # after the breaking change to verify that the values in this file are safe to
11 # ./projects/compiler-rt/lib/tsan/tests/rtl/TsanRtlTest-x86_64-Test
12 # --gtest_also_run_disabled_tests --gtest_filter=DISABLED_BENCH.Mop*
16 if [[ "$#" != 1 ]]; then
17 echo "Usage: $0 /path/to/binary/built/with/tsan"
21 SCRIPTDIR=$(dirname $0)
22 RES=$(${SCRIPTDIR}/analyze_libtsan.sh $1)
30 res=$(PrintRes | egrep "$1 .* $2 $3; ")
31 if [ "$res" == "" ]; then
32 echo FAILED $1 must contain $2 $3
37 for f in write1 write2 write4 write8 read2 read4; do
43 for f in read1 read8; do
49 for f in func_entry func_exit; do
53 check $f call 1 # TraceSwitch()