[X86] EltsFromConsecutiveLoads - attempt to match consecutive truncated loads (#172051)
SelectionDAG::areNonVolatileConsecutiveLoads will only match loads that
have a MemoryVT the same size as the stride byte size, which will fail
for cases where large loads have been split (typically by
shift+truncates) and we're trying to stitch them back together.
As a fallback, this patch checks for cases where the candidate element's
byte size is a multiple of full MemoryVT bytes distance away from the base
load.
[libc++][ranges] implement `ranges::elements_of` (#91414)
## Introduction
This patch implements `ranges::elements_of` from
[P2502R2](https://wg21.link/P2502R2). Specializations of `elements_of`
encapsulate a range and act as a tag in overload sets to disambiguate
when a range should be treated as a sequence rather than a single value.
```cpp
template <bool YieldElements>
std::generator<std::any> f(std::ranges::input_range auto &&r) {
if constexpr (YieldElements) {
co_yield std::ranges::elements_of(r);
} else {
co_yield r;
}
}
```
[12 lines not shown]
[mlir][gpu] Use `arith` dialect to lower gpu.global_id (#171614)
This PR lowers the`gpu.global_id` op using the arith dialect instead of
the index dialect. Fixes #171303.
[libc++][complex] Applied `[[nodiscard]]` (#171027)
`[[nodiscard]]` should be applied to functions where discarding the
return value is most likely a correctness issue.
- https://libcxx.llvm.org/CodingGuidelines.html
There appears to be an issue with annotating `operator*` and
`operator/`, see: https://llvm.org/PR171031
---------
Co-authored-by: A. Jiang <de34 at live.cn>