2 # profile workload for gcc profile feedback (autofdo) using Linux perf
3 # auto generated. to regenerate for new CPUs run
4 # contrib/gen_autofdo_event.py --shell --all in gcc source
7 # gcc-auto-profile program (profile program and children)
8 # gcc-auto-profile -a sleep X (profile all for X secs, may need root)
9 # gcc-auto-profile -p PID sleep X (profile PID)
10 # gcc-auto-profile --kernel -a sleep X (profile kernel)
11 # gcc-auto-profile --all -a sleep X (profile kernel and user space)
13 # identify branches taken event for CPU
18 if [ "$1" = "--kernel" ] ; then
22 if [ "$1" = "--all" ] ; then
27 if ! grep -q Intel
/proc
/cpuinfo
; then
28 echo >&2 "Only Intel CPUs supported"
32 if grep -q hypervisor
/proc
/cpuinfo
; then
33 echo >&2 "Warning: branch profiling may not be functional in VMs"
36 case `egrep -q "^cpu family\s*: 6" /proc/cpuinfo &&
37 egrep "^model\s*:" /proc/cpuinfo | head -n1` in
40 model
*:\
76) E
="cpu/event=0xC4,umask=0xFE/p$FLAGS" ;;
53 model
*:\
94) E
="cpu/event=0xC4,umask=0x20/p$FLAGS" ;;
60 model
*:\
44) E
="cpu/event=0x88,umask=0x40/p$FLAGS" ;;
65 model
*:\
53) E
="cpu/event=0x88,umask=0x41/p$FLAGS" ;;
67 echo >&2 "Unknown CPU. Run contrib/gen_autofdo_event.py --all --script to update script."
70 exec perf record
-e $E -b "$@"