This is a sequence of related improvements to <mdspan> we discussed during review and then postponed. The ideas are:
* Pre-compute the product of static extents; and a follow up for fine-tuning for low-rank extents. * Returning to extents::operator== to improve the case of mixed dynamic/static extents, revealed that this can be simplified quite a bit. * There's several templates that depend on the IndexType, but the actual code only needs the static extents. Therefore, extents with the same Indices... but different IndexType can use the same code. * Recently, libstdc++ code was refactored to avoid numeric_limits and use __int_traits instead. Unfortunately, this is currently completely ineffective for <mdspan>. But since, it's a good idea, the changes are ready, and it might anyway be needed in the future, I've submitted the patch regardless. Many of these look like optimizations, but since I've not performed any runtime experiments, it might not be fair to call them such. However, because they're principled changes to the source code and the generated code "looks faster" (though it might be overly bold to claim that I could tell), I think it makes sense to propose them regardless. Therefore, if anything looks iffy or you feel one should be measuring performance, please suggest that we start. The commit messages are a lot longer than in the past, because the justification for each change is included, please let me know if I should shorten them. Luc Grosheintz (6): libstdc++: Fix style issues in <mdspan>. libstdc++: Precompute products of static extents. libstdc++: Improve low-rank layout_{left,right}::stride. libstdc++: Improve extents::operator==. libstdc++: Reduce template instantiations in <mdspan>. libstdc++: Replace numeric_limit with __int_traits in mdspan. libstdc++-v3/include/std/mdspan | 195 +++++++++++------- .../mdspan/extents/class_mandates_neg.cc | 3 + 2 files changed, 128 insertions(+), 70 deletions(-) -- 2.50.0