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
bad_alloc
bad_cast
bad_exception
bad_typeid
byte
comparisons libstdc++: Optimize C++20 comparison category types 2020-02-07 14:09:03 +00:00
exception
exception_ptr
headers
initializer_list
launder
max_align_t/requirements
nested_exception
numeric_limits
quick_exit
type_info
uncaught_exception
uncaught_exceptions
50594.cc
51333.cc
cxa_vec.cc
destroying_delete.cc
free_eh_pool.cc
new_aligned.cc
new_delete_placement.cc
new_handler.cc
new_nothrow.cc
pthread_guard.cc
set_terminate.cc
set_unexpected.cc
terminate_handler.cc
unexpected_handler.cc