Hi, while looking on profiles of firefox linktime I noticed that HWI abs functions are implemented offline that slows down the normalize function. Those are always win when implemented inline.
Bootstrapped/regtested x86_64-linux, comitted as obvious. * hwint.c (abs_hwi, absu_hwi): Move to ... * hwint.h (abs_hwi, absu_hwi): ... here; make inline. Index: hwint.c =================================================================== --- hwint.c (revision 218730) +++ hwint.c (working copy) @@ -124,22 +124,6 @@ popcount_hwi (unsigned HOST_WIDE_INT x) #endif /* GCC_VERSION < 3004 */ -/* Compute the absolute value of X. */ - -HOST_WIDE_INT -abs_hwi (HOST_WIDE_INT x) -{ - gcc_checking_assert (x != HOST_WIDE_INT_MIN); - return x >= 0 ? x : -x; -} - -/* Compute the absolute value of X as an unsigned type. */ - -unsigned HOST_WIDE_INT -absu_hwi (HOST_WIDE_INT x) -{ - return x >= 0 ? (unsigned HOST_WIDE_INT)x : -(unsigned HOST_WIDE_INT)x; -} /* Compute the greatest common divisor of two numbers A and B using Euclid's algorithm. */ Index: hwint.h =================================================================== --- hwint.h (revision 218730) +++ hwint.h (working copy) @@ -264,4 +264,21 @@ zext_hwi (unsigned HOST_WIDE_INT src, un } } +/* Compute the absolute value of X. */ + +inline HOST_WIDE_INT +abs_hwi (HOST_WIDE_INT x) +{ + gcc_checking_assert (x != HOST_WIDE_INT_MIN); + return x >= 0 ? x : -x; +} + +/* Compute the absolute value of X as an unsigned type. */ + +inline unsigned HOST_WIDE_INT +absu_hwi (HOST_WIDE_INT x) +{ + return x >= 0 ? (unsigned HOST_WIDE_INT)x : -(unsigned HOST_WIDE_INT)x; +} + #endif /* ! GCC_HWINT_H */