gcc/libstdc++-v3
Jonathan Wakely 3c21913415 libstdc++: Optimise GCD algorithms
The current std::gcd and std::chrono::duration::_S_gcd algorithms are
both recursive. This is potentially expensive to evaluate in constant
expressions, because each level of recursion makes a new copy of the
function to evaluate. The maximum number of steps is bounded
(proportional to the number of decimal digits in the smaller value) and
so unlikely to exceed the limit for constexpr nesting, but the memory
usage is still suboptimal. By using an iterative algorithm we avoid
that compile-time cost. Because looping in constexpr functions is not
allowed until C++14, we need to keep the recursive implementation in
duration::_S_gcd for C++11 mode.

For std::gcd we can also optimise runtime performance by using the
binary GCD algorithm.

libstdc++-v3/ChangeLog:

	* include/std/chrono (duration::_S_gcd): Use iterative algorithm
	for C++14 and later.
	* include/std/numeric (__detail::__gcd): Replace recursive
	Euclidean algorithm with iterative version of binary GCD algorithm.
	* testsuite/26_numerics/gcd/1.cc: Test additional inputs.
	* testsuite/26_numerics/gcd/gcd_neg.cc: Adjust dg-error lines.
	* testsuite/26_numerics/lcm/lcm_neg.cc: Likewise.
	* testsuite/experimental/numeric/gcd.cc: Test additional inputs.
	* testsuite/26_numerics/gcd/2.cc: New test.
2020-09-03 12:46:13 +01:00
..
config aix: Support libsupc++ as a FAT library 2020-08-18 16:55:10 -04:00
doc libstdc++: Implement P0966 std::string::reserve should not shrink 2020-08-06 19:49:07 +01:00
include libstdc++: Optimise GCD algorithms 2020-09-03 12:46:13 +01:00
libsupc++ libstdc++: Break header cycle between <new> and <exception> 2020-09-02 13:56:32 +01:00
po libstdc++: Regenerate makefiles 2020-06-23 07:59:40 +01:00
python libstdc++: Fix compatibility support in unique_ptr pretty printer 2020-08-10 18:47:06 +01:00
scripts Update copyright years. 2020-01-01 12:51:42 +01:00
src libstdc++: Make std::this_thread functions work without gthreads 2020-08-11 16:16:21 +01:00
testsuite libstdc++: Optimise GCD algorithms 2020-09-03 12:46:13 +01:00
acinclude.m4 libstdc++: Deprecate the --enable-cheaders=c_std configuration 2020-08-13 16:33:28 +01:00
aclocal.m4 Add `--with-toolexeclibdir=' configuration option 2020-01-24 11:24:25 +00:00
ChangeLog Daily bump. 2020-09-03 00:16:26 +00:00
ChangeLog-1998
ChangeLog-1999
ChangeLog-2000
ChangeLog-2001
ChangeLog-2002
ChangeLog-2003
ChangeLog-2004
ChangeLog-2005
ChangeLog-2006
ChangeLog-2007
ChangeLog-2008
ChangeLog-2009
ChangeLog-2010
ChangeLog-2011
ChangeLog-2012
ChangeLog-2013
ChangeLog-2014
ChangeLog-2015
ChangeLog-2016
ChangeLog-2017
ChangeLog-2018 Update copyright years. 2019-01-01 13:31:55 +01:00
ChangeLog-2019 libstdc++: Fix whitespace in ChangeLog-2019 2020-01-09 21:31:35 +00:00
config.h.in libstdc++: Add std::from_chars for floating-point types 2020-07-20 23:49:27 +01:00
configure libstdc++: Deprecate the --enable-cheaders=c_std configuration 2020-08-13 16:33:28 +01:00
configure.ac libstdc++: Add std::from_chars for floating-point types 2020-07-20 23:49:27 +01:00
configure.host aix: Add GCC64 configuration and FAT target libraries. 2020-06-21 14:14:46 -04:00
crossconfig.m4 libstdc++: Add std::from_chars for floating-point types 2020-07-20 23:49:27 +01:00
fragment.am
linkage.m4
Makefile.am build: Use -include instead of conditional include. 2020-06-22 21:31:48 +00:00
Makefile.in build: Use -include instead of conditional include. 2020-06-22 21:31:48 +00:00
README

file: libstdc++-v3/README

New users may wish to point their web browsers to the file
index.html in the 'doc/html' subdirectory.  It contains brief
building instructions and notes on how to configure the library in
interesting ways.