mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-22 12:00:11 -05:00
gcov: Fix counter update method selection
The counter update method selection had some issues. For PROFILE_UPDATE_ATOMIC, if atomic updates are not supported, then fallback to single mode, however, use partial atomic updates if available. Issue warnings. For PROFILE_UPDATE_PRFER_ATOMIC, if atomic updates are not supported, then fallback to single mode, however, use partial atomic updates if available. Do not issue warnings. gcc/ChangeLog: * tree-profile.cc (tree_profiling): Do not use atomic operations if they are not available. Try to use at least partial atomic updates as a fallback.
This commit is contained in:
@@ -1847,19 +1847,32 @@ tree_profiling (void)
|
||||
can_support_atomic = have_atomic_8;
|
||||
}
|
||||
|
||||
if (flag_profile_update != PROFILE_UPDATE_SINGLE && needs_split)
|
||||
counter_update = COUNTER_UPDATE_ATOMIC_PARTIAL;
|
||||
|
||||
if (flag_profile_update == PROFILE_UPDATE_ATOMIC
|
||||
&& !can_support_atomic)
|
||||
{
|
||||
warning (0, "target does not support atomic profile update, "
|
||||
"single mode is selected");
|
||||
if (needs_split)
|
||||
{
|
||||
warning (0, "target does not fully support atomic profile "
|
||||
"update, single mode is selected with partial "
|
||||
"atomic updates");
|
||||
counter_update = COUNTER_UPDATE_ATOMIC_PARTIAL;
|
||||
}
|
||||
else
|
||||
warning (0, "target does not support atomic profile update, "
|
||||
"single mode is selected");
|
||||
flag_profile_update = PROFILE_UPDATE_SINGLE;
|
||||
}
|
||||
else if (flag_profile_update == PROFILE_UPDATE_PREFER_ATOMIC)
|
||||
flag_profile_update
|
||||
= can_support_atomic ? PROFILE_UPDATE_ATOMIC : PROFILE_UPDATE_SINGLE;
|
||||
{
|
||||
if (can_support_atomic)
|
||||
flag_profile_update = PROFILE_UPDATE_ATOMIC;
|
||||
else
|
||||
{
|
||||
if (needs_split)
|
||||
counter_update = COUNTER_UPDATE_ATOMIC_PARTIAL;
|
||||
flag_profile_update = PROFILE_UPDATE_SINGLE;
|
||||
}
|
||||
}
|
||||
|
||||
if (flag_profile_update == PROFILE_UPDATE_ATOMIC)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user