gcc/libstdc++-v3/testsuite/18_support
Jonathan Wakely 0d57370c9c libstdc++: Optimize C++20 comparison category types
This reduces the size and alignment of all three comparison category
types to a single byte. The partial_ordering::_M_is_ordered flag is
replaced by the value 0x02 in the _M_value member.

This also optimizes conversion and comparison operators to avoid
conditional branches where possible, by comparing _M_value to constants
or using bitwise operations to correctly handle the unordered state.

	* libsupc++/compare (__cmp_cat::type): Define typedef for underlying
	type of enumerations and comparison category types.
	(__cmp_cat::_Ord, __cmp_cat::_Ncmp): Add underlying type.
	(__cmp_cat::_Ncmp::unordered): Change value to 2.
	(partial_ordering::_M_value, weak_ordering::_M_value)
	(strong_ordering::_M_value): Change type to __cmp_cat::type.
	(partial_ordering::_M_is_ordered): Remove data member.
	(partial_ordering): Use second bit of _M_value for unordered. Adjust
	comparison operators.
	(weak_ordering::operator partial_ordering): Simplify to remove
	branches.
	(operator<=>(unspecified, weak_ordering)): Likewise.
	(strong_ordering::operator partial_ordering): Likewise.
	(strong_ordering::operator weak_ordering): Likewise.
	(operator<=>(unspecified, strong_ordering)): Likewise.
	* testsuite/18_support/comparisons/categories/partialord.cc: New test.
	* testsuite/18_support/comparisons/categories/strongord.cc: New test.
	* testsuite/18_support/comparisons/categories/weakord.cc: New test.
2020-02-07 14:09:03 +00:00
..
aligned_alloc Update copyright years. 2020-01-01 12:51:42 +01:00
bad_alloc Update copyright years. 2020-01-01 12:51:42 +01:00
bad_cast Update copyright years. 2020-01-01 12:51:42 +01:00
bad_exception Update copyright years. 2020-01-01 12:51:42 +01:00
bad_typeid Update copyright years. 2020-01-01 12:51:42 +01:00
byte Update copyright years. 2020-01-01 12:51:42 +01:00
comparisons libstdc++: Optimize C++20 comparison category types 2020-02-07 14:09:03 +00:00
exception Update copyright years. 2020-01-01 12:51:42 +01:00
exception_ptr Update copyright years. 2020-01-01 12:51:42 +01:00
headers Update copyright years. 2020-01-01 12:51:42 +01:00
initializer_list Update copyright years. 2020-01-01 12:51:42 +01:00
launder Update copyright years. 2020-01-01 12:51:42 +01:00
max_align_t/requirements libstdc++: Fix testsuite failures and warnings due to is_pod deprecation 2020-01-09 21:31:50 +00:00
nested_exception Update copyright years. 2020-01-01 12:51:42 +01:00
numeric_limits Update copyright years. 2020-01-01 12:51:42 +01:00
quick_exit Update copyright years. 2020-01-01 12:51:42 +01:00
type_info Update copyright years. 2020-01-01 12:51:42 +01:00
uncaught_exception Update copyright years. 2020-01-01 12:51:42 +01:00
uncaught_exceptions Update copyright years. 2020-01-01 12:51:42 +01:00
50594.cc Update copyright years. 2020-01-01 12:51:42 +01:00
51333.cc Update copyright years. 2020-01-01 12:51:42 +01:00
cxa_vec.cc Update copyright years. 2020-01-01 12:51:42 +01:00
destroying_delete.cc Update copyright years. 2020-01-01 12:51:42 +01:00
free_eh_pool.cc Update copyright years. 2020-01-01 12:51:42 +01:00
new_aligned.cc Update copyright years. 2020-01-01 12:51:42 +01:00
new_delete_placement.cc Update copyright years. 2020-01-01 12:51:42 +01:00
new_handler.cc Update copyright years. 2020-01-01 12:51:42 +01:00
new_nothrow.cc Update copyright years. 2020-01-01 12:51:42 +01:00
pthread_guard.cc Update copyright years. 2020-01-01 12:51:42 +01:00
set_terminate.cc Update copyright years. 2020-01-01 12:51:42 +01:00
set_unexpected.cc Update copyright years. 2020-01-01 12:51:42 +01:00
terminate_handler.cc Update copyright years. 2020-01-01 12:51:42 +01:00
unexpected_handler.cc Update copyright years. 2020-01-01 12:51:42 +01:00