On Thu, Nov 23, 2023 at 2:47 PM Sebastian Huber <sebastian.hu...@embedded-brains.de> wrote: > > gcc/ChangeLog: > PR tree-optimization/112678 > > * tree-profile.cc (tree_profiling): Do not use atomic operations > for -fprofile-update=single. > --- > gcc/tree-profile.cc | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/gcc/tree-profile.cc b/gcc/tree-profile.cc > index 1ac0fdb3bc98..9c8fdb8b18f4 100644 > --- a/gcc/tree-profile.cc > +++ b/gcc/tree-profile.cc > @@ -767,6 +767,7 @@ tree_profiling (void) > = HAVE_sync_compare_and_swapsi || HAVE_atomic_compare_and_swapsi; > bool have_atomic_8 > = HAVE_sync_compare_and_swapdi || HAVE_atomic_compare_and_swapdi; > + bool needs_split = gcov_type_size == 8 && !have_atomic_8 && have_atomic_4; > if (!can_support_atomic) > { > if (gcov_type_size == 4) > @@ -775,6 +776,9 @@ tree_profiling (void) > can_support_atomic = have_atomic_8; > } > > + if (flag_profile_update != PROFILE_UPDATE_SINGLE && needs_split) > + counter_update = COUNTER_UPDATE_ATOMIC_PARTIAL; > +
I wonder if it's cleaner to set can_support_atomic when we can support it with splitting instead, avoiding a != PROFILE_UPDATE_SINGLE check here? Otherwise looks OK. Richard. > if (flag_profile_update == PROFILE_UPDATE_ATOMIC > && !can_support_atomic) > { > @@ -788,13 +792,11 @@ tree_profiling (void) > > if (flag_profile_update == PROFILE_UPDATE_ATOMIC) > { > - if (gcov_type_size == 8 && !have_atomic_8 && have_atomic_4) > + if (needs_split) > counter_update = COUNTER_UPDATE_ATOMIC_SPLIT; > else > counter_update = COUNTER_UPDATE_ATOMIC_BUILTIN; > } > - else if (gcov_type_size == 8 && have_atomic_4) > - counter_update = COUNTER_UPDATE_ATOMIC_PARTIAL; > > /* This is a small-ipa pass that gets called only once, from > cgraphunit.cc:ipa_passes(). */ > -- > 2.35.3 >