Hi Honza. Thanks for the huge patch. I'm willing to help you with testing, but I can't apply the patch on top of r254348:
../../gcc/profile.c: In function ‘void compute_branch_probabilities(unsigned int, unsigned int)’: ../../gcc/profile.c:794:11: error: ‘flag_guess_branch_probability’ was not declared in this scope || !flag_guess_branch_probability) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../gcc/profile.c:794:11: note: suggested alternative: ‘OPT_fguess_branch_probability’ || !flag_guess_branch_probability) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ OPT_fguess_branch_probability ../../gcc/profile.c:801:21: error: no match for ‘operator!=’ (operand types are ‘profile_count’ and ‘profile_count’) if (bb->count != profile_count::zero ()) ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../../gcc/coretypes.h:397:0, from ../../gcc/profile.c:52: ../../gcc/wide-int.h:3158:19: note: candidate: template<class T1, class T2> typename wi::binary_traits<T1, T2>::predicate_result operator!=(const T1&, const T2&) BINARY_PREDICATE (operator !=, ne_p) ^ ../../gcc/wide-int.h:3142:3: note: in definition of macro ‘BINARY_PREDICATE’ OP (const T1 &x, const T2 &y) \ ^~ ../../gcc/wide-int.h:3158:19: note: template argument deduction/substitution failed: BINARY_PREDICATE (operator !=, ne_p) ^ ../../gcc/wide-int.h:3142:3: note: in definition of macro ‘BINARY_PREDICATE’ OP (const T1 &x, const T2 &y) \ ^~ ../../gcc/wide-int.h: In substitution of ‘template<class T1, class T2> typename wi::binary_traits<T1, T2>::predicate_result operator!=(const T1&, const T2&) [with T1 = profile_count; T2 = profile_count]’: ../../gcc/profile.c:801:45: required from here ../../gcc/wide-int.h:3158:19: error: incomplete type ‘wi::int_traits<profile_count>’ used in nested name specifier BINARY_PREDICATE (operator !=, ne_p) ^ ../../gcc/wide-int.h:3142:3: note: in definition of macro ‘BINARY_PREDICATE’ OP (const T1 &x, const T2 &y) \ ^~ Can you please check that? Thanks, Martin