On Tue, Sep 06, 2016 at 03:13:09PM +0200, Martin Liška wrote: > @@ -535,6 +549,27 @@ tree_profiling (void) > { > struct cgraph_node *node; > > + /* Verify whether we can utilize atomic update operations. */ > + if (flag_profile_update == PROFILE_UPDATE_ATOMIC) > + { > + bool can_support = false; > + if (sizeof (gcov_type) == 4) > + can_support > + = HAVE_sync_compare_and_swapsi || HAVE_atomic_compare_and_swapsi; > + else if (sizeof (gcov_type) == 8) > + can_support > + = HAVE_sync_compare_and_swapdi || HAVE_atomic_compare_and_swapdi; > + else > + gcc_unreachable ();
sizeof (gcov_type) talks about the host gcov type, you want instead the target gcov type. So TYPE_SIZE (gcov_type_node) == 32 vs. 64 (or TYPE_SIZE_UNIT (gcov_type_node) == 4 vs. 8). As SImode and DImode are in fact 4*BITS_PER_UNIT and 8*BITS_PER_UNIT, TYPE_SIZE_UNIT comparisons for 4 and 8 are most natural. And I wouldn't add gcc_unreachable, just warn for weirdo arches always. Jakub