[PING^3][PATCH v3] auto-profile: Avoid hardcoding perf.data filename in gcc-auto-profile scripts

Dhruv Chawla <[email protected]> Mon, 3 Aug 2026 10:42:57 +0530
Newsgroups gmane.comp.gcc.patches
Message-ID <[email protected]>
On 27/07/26 10:12, Dhruv Chawla wrote:
> External email: Use caution opening links or attachments
> 
> 
> On 20/07/26 14:47, Dhruv Chawla wrote:
>> External email: Use caution opening links or attachments
>>
>>
>> On 09/07/26 14:29, [email protected] wrote:
>>> External email: Use caution opening links or attachments
>>>
>>>
>>> From: Dhruv Chawla <[email protected]>
>>>
>>> Thanks Andi, I was not aware of this script. I have updated it thusly as
>>> well. (The prior incorrect change was mine too...)
>>>
>>> --- >8 ---
>>>
>>> As a follow up to r16-7956-g2e3d991ea1855d, this patch passes the perf profile
>>> name from Makefile.tpl to the gcc-auto-profile scripts. I initially
>>> wanted to do this via the PERF_DATA make variable, however the
>>> autoprofile stage (which invokes gcc-auto-profile) and the autofeedback
>>> stage (which defines PERF_DATA) don't share the variable definition, so
>>> there was no clean way to do it. This at least consolidates the file name into
>>> one location, so that it is easier to modify later on.
>>>
>>> Autoprofilebootstrapped and regtested on aarch64-linux-gnu with SPE.
>>>
>>> ChangeLog:
>>>
>>>          * Makefile.in: Regenerate.
>>>          * Makefile.tpl: Pass "--perf perf.data" to gcc-auto-profile. Separate
>>>          the make invocation from perf using "--".
>>>
>>> contrib/ChangeLog:
>>>
>>>          * gen_autofdo_event.py: Add missed updates for passing "--inherit" and
>>>          "-o $perf_file" to perf.
>>>
>>> gcc/ChangeLog:
>>>
>>>          * config/aarch64/gcc-auto-profile: Replace explicit perf.data
>>>          with perf_file variable. Add parsing for "--perf" flag.
>>>          * config/i386/gcc-auto-profile: Likewise.
>>> ---
>>>   Makefile.in                         |  2 +-
>>>   Makefile.tpl                        |  2 +-
>>>   contrib/gen_autofdo_event.py        | 10 ++++++++--
>>>   gcc/config/aarch64/gcc-auto-profile | 12 +++++++++---
>>>   gcc/config/i386/gcc-auto-profile    | 10 ++++++++--
>>>   5 files changed, 27 insertions(+), 9 deletions(-)
>>>
>>> diff --git a/Makefile.in b/Makefile.in
>>> index f34142cc077..584705aeb44 100644
>>> --- a/Makefile.in
>>> +++ b/Makefile.in
>>> @@ -423,7 +423,7 @@ MAKEINFO = @MAKEINFO@
>>>   EXPECT = @EXPECT@
>>>   RUNTEST = @RUNTEST@
>>>
>>> -AUTO_PROFILE = gcc-auto-profile --all -c 10000000
>>> +AUTO_PROFILE = gcc-auto-profile --all --perf perf.data -c 10000000 --
>>>
>>>   # This just becomes part of the MAKEINFO definition passed down to
>>>   # sub-makes.  It lets flags be given on the command line while still
>>> diff --git a/Makefile.tpl b/Makefile.tpl
>>> index 5891b67b697..eb26dc14c55 100644
>>> --- a/Makefile.tpl
>>> +++ b/Makefile.tpl
>>> @@ -426,7 +426,7 @@ MAKEINFO = @MAKEINFO@
>>>   EXPECT = @EXPECT@
>>>   RUNTEST = @RUNTEST@
>>>
>>> -AUTO_PROFILE = gcc-auto-profile --all -c 10000000
>>> +AUTO_PROFILE = gcc-auto-profile --all --perf perf.data -c 10000000 --
>>>
>>>   # This just becomes part of the MAKEINFO definition passed down to
>>>   # sub-makes.  It lets flags be given on the command line while still
>>> diff --git a/contrib/gen_autofdo_event.py b/contrib/gen_autofdo_event.py
>>> index 1fcea0a6d63..751fbc2ffee 100755
>>> --- a/contrib/gen_autofdo_event.py
>>> +++ b/contrib/gen_autofdo_event.py
>>> @@ -138,6 +138,12 @@ if [ "$1" = "--all" ] ; then
>>>     shift
>>>   fi
>>>
>>> +perf_file="perf.data"
>>> +if [ "$1" = "--perf" ]; then
>>> +  perf_file="$2"
>>> +  shift 2
>>> +fi
>>> +
>>>   if grep -q AuthenticAMD /proc/cpuinfo ; then
>>>     vendor=AMD
>>>     if ! grep -q " brs" /proc/cpuinfo && ! grep -q amd_lbr_v2 /proc/cpuinfo ; then
>>> @@ -175,14 +181,14 @@ echo >&2 "AMD CPU without support for ex_ret_brn_tkn event"
>>>           fi ;;''')
>>>       print(r"esac")
>>>       print(r"set -x")
>>> -    print(r'if ! perf record -e $E -b "$@" ; then')
>>> +    print(r'if ! perf record --inherit -o "$perf_file" -e $E -b "$@" ; then')
>>>       print(r'  # PEBS may not actually be working even if the processor supports it')
>>>       print(r'  # (e.g., in a virtual machine). Trying to run without /p.')
>>>       print(r'  set +x')
>>>       print(r'  echo >&2 "Retrying without /p."')
>>>       print(r'  E="$(echo "${E}" | sed -e \'s/\/p/\//\ -e s/:p//)"')
>>>       print(r'  set -x')
>>> -    print(r'  exec perf record -e $E -b "$@"')
>>> +    print(r'  exec perf record --inherit -o "$perf_file" -e $E -b "$@"')
>>>       print(r' set +x')
>>>       print(r'fi')
>>>
>>> diff --git a/gcc/config/aarch64/gcc-auto-profile b/gcc/config/aarch64/gcc-auto-profile
>>> index 8f7502b30e3..6902ce82a5a 100755
>>> --- a/gcc/config/aarch64/gcc-auto-profile
>>> +++ b/gcc/config/aarch64/gcc-auto-profile
>>> @@ -38,21 +38,27 @@ elif [ "$1" = "--all" ] ; then
>>>     shift
>>>   fi
>>>
>>> +perf_file="perf.data"
>>> +if [ "$1" = "--perf" ]; then
>>> +  perf_file="$2"
>>> +  shift 2
>>> +fi
>>> +
>>>   if [ "$use_brbe" = true ] ; then
>>>     if grep -q hypervisor /proc/cpuinfo ; then
>>>       echo >&2 "Warning: branch profiling may not be functional in VMs"
>>>     fi
>>>     set -x
>>> -  perf record --inherit -o perf.data -j any,$FLAGS "$@"
>>> +  perf record --inherit -o "$perf_file" -j any,$FLAGS "$@"
>>>     set +x
>>>   elif [ -n "$(perf list | grep arm_spe)" ] ; then
>>>     echo >&2 "Info: Using SPE to collect branch profiles"
>>>     set -x
>>> -  perf record --inherit -o perf.data -e arm_spe_0/branch_filter=1/ "$@"
>>> +  perf record --inherit -o "$perf_file" -e arm_spe_0/branch_filter=1/ "$@"
>>>     set +x
>>>   else
>>>     echo >&2 "Warning: branch profiling may not be functional without BRBE"
>>>     set -x
>>> -  perf record --inherit -o perf.data "$@"
>>> +  perf record --inherit -o "$perf_file" "$@"
>>>     set +x
>>>   fi
>>> diff --git a/gcc/config/i386/gcc-auto-profile b/gcc/config/i386/gcc-auto-profile
>>> index c7772a2800f..fc07b20f941 100755
>>> --- a/gcc/config/i386/gcc-auto-profile
>>> +++ b/gcc/config/i386/gcc-auto-profile
>>> @@ -24,6 +24,12 @@ if [ "$1" = "--all" ] ; then
>>>     shift
>>>   fi
>>>
>>> +perf_file="perf.data"
>>> +if [ "$1" = "--perf" ]; then
>>> +  perf_file="$2"
>>> +  shift 2
>>> +fi
>>> +
>>>   if grep -q AuthenticAMD /proc/cpuinfo ; then
>>>     vendor=AMD
>>>     if ! grep -q " brs" /proc/cpuinfo && ! grep -q amd_lbr_v2 /proc/cpuinfo ; then
>>> @@ -117,13 +123,13 @@ echo >&2 "AMD CPU without support for ex_ret_brn_tkn event"
>>>           fi ;;
>>>   esac
>>>   set -x
>>> -if ! perf record --inherit -o perf.data -e $E -b "$@" ; then
>>> +if ! perf record --inherit -o "$perf_file" -e $E -b "$@" ; then
>>>     # PEBS may not actually be working even if the processor supports it
>>>     # (e.g., in a virtual machine). Trying to run without /p.
>>>     set +x
>>>     echo >&2 "Retrying without /p."
>>>     E="$(echo "${E}" | sed -e \'s/\/p/\//\ -e s/:p//)"
>>>     set -x
>>> -  exec perf record --inherit -o perf.data -e $E -b "$@"
>>> +  exec perf record --inherit -o "$perf_file" -e $E -b "$@"
>>>    set +x
>>>   fi
>>> -- 
>>> 2.43.0
>>>
>>
>> Ping (https://gcc.gnu.org/pipermail/gcc-patches/2026-July/723299.html).
>>
>> -- 
>> Regards,
>> Dhruv
> 
> Ping (https://gcc.gnu.org/pipermail/gcc-patches/2026-July/723299.html).
> 
> -- 
> Regards,
> Dhruv

Ping (https://gcc.gnu.org/pipermail/gcc-patches/2026-July/723299.html).

-- 
Regards,
Dhruv