forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/bin/bash
 | |
| #
 | |
| # Script that checks that critical functions in TSan runtime have correct number
 | |
| # of push/pop/rsp instructions to verify that runtime is efficient enough.
 | |
| #
 | |
| # This test can fail when backend code generation changes the output for various
 | |
| # tsan interceptors. When such a change happens, you can ensure that the
 | |
| # performance has not regressed by running the following benchmarks before and
 | |
| # after the breaking change to verify that the values in this file are safe to
 | |
| # update:
 | |
| # ./projects/compiler-rt/lib/tsan/tests/rtl/TsanRtlTest-x86_64-Test
 | |
| #   --gtest_also_run_disabled_tests --gtest_filter=DISABLED_BENCH.Mop*
 | |
| 
 | |
| set -u
 | |
| 
 | |
| if [[ "$#" != 1 ]]; then
 | |
|   echo "Usage: $0 /path/to/binary/built/with/tsan"
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| SCRIPTDIR=$(dirname $0)
 | |
| RES=$(${SCRIPTDIR}/analyze_libtsan.sh $1)
 | |
| PrintRes() {
 | |
|   printf "%s\n" "$RES"
 | |
| }
 | |
| 
 | |
| PrintRes
 | |
| 
 | |
| check() {
 | |
|   res=$(PrintRes | egrep "$1 .* $2 $3; ")
 | |
|   if [ "$res" == "" ]; then
 | |
|     echo FAILED $1 must contain $2 $3
 | |
|     exit 1
 | |
|   fi
 | |
| }
 | |
| 
 | |
| for f in write1 write2 write4 write8 read2 read4; do
 | |
|   check $f rsp 1
 | |
|   check $f push 1
 | |
|   check $f pop 6
 | |
| done
 | |
| 
 | |
| for f in read1 read8; do
 | |
|   check $f rsp 1
 | |
|   check $f push 2
 | |
|   check $f pop 12
 | |
| done
 | |
| 
 | |
| for f in func_entry func_exit; do
 | |
|   check $f rsp 0
 | |
|   check $f push 0
 | |
|   check $f pop 0
 | |
|   check $f call 1  # TraceSwitch()
 | |
| done
 | |
| 
 | |
| echo LGTM
 |