[libc] Implement ether_aton and ether_aton_r (#235886)
The format is simple enough that I'm parsing it by hand. strtointeger is
not a particularly great fit as it also accepts leading whitespace and a
sign.
A few implementation notes:
- each octet can have one or two hex digits, so the output of ether_ntoa
("1:2:a:...") can be parsed back
- following musl (but unlike glibc), the address must not be followed by
any trailing characters, not even whitespace. glibc accepts trailing
whitespace (and ignores anything after it), and even garbage directly
after a two-digit final octet (e.g. "...:abfoo").
- the internal function does not take a string_view, as that would
require us to scan the entire string needlessly (we stop at the first
invalid character). In the worst case, the string might not be
terminated, and we'd crash trying to find the end.
- the output struct is not modified if parsing fails (glibc can leave it
partially written)
[2 lines not shown]
[mlir][llvm] Add an op for the `llvm.vector.repeat` intrinsic (#236453)
Add an LLVM dialect op for `llvm.vector.repeat`, which repeats a
fixed-width vector to fill a scalable vector.
The LLVM intrinsic was introduced in:
https://github.com/llvm/llvm-project/pull/208212
[AMDGPU] Fix DPP combine when a mov feeds several REG_SEQUENCE lanes (#217902)
The subreg index came from the first operand reading the mov, so the
wrong operand was marked undef
Also skip lanes that other reads still use
[libc] Add a linux-x86_64-Release-Asserts fullbuild CI job (#236096)
Currently, none of the hosted Linux fullbuild CI jobs run tests with
assertions enabled: the Debug job only builds tests (`testing: BUILD`),
and the Release jobs build with `-DNDEBUG`. (The monolithic premerge
Linux job builds with `LLVM_ENABLE_ASSERTIONS=ON`, but only tests the
overlay configuration.)
This patch adds a new `linux-x86_64-Release-Asserts` job, which is the
same as `linux-x86_64-Release`, but with `LLVM_ENABLE_ASSERTIONS=ON`.
The new job doesn't build the fuzzing tests, as those are already
covered by
the regular Release job.
Assisted-by: Gemini
[clang][modules] Allow merging module-local class members across modules (#236509)
When the same variable template specialization is instantiated in two
module units and a TU imports both, clang merges the lambda closure
types (closure types are merged by identity), but not their `operator()`
members: the instantiated `operator()` is module-local to the
instantiating module, and `ASTContext::isSameEntity` refuses to merge
module-local declarations from different modules. The merged closure
type then has two `operator()` declarations that are not redeclarations
of each other, which is diagnosed as a false ODR violation during
deserialization.
The change allows merging class members across modules even when they
are marked module-local, provided that the (already checked) shared
declaration context is a class: a class definition determines its
members, so two members of the same class are the same entity. Two
*distinct* module-local classes are still not merged — the module-local
rule still applies to the classes themselves — so their members are
never compared, which is what that check exists for.
[16 lines not shown]
[LoopPeel] Peel last iteration to enable load widening
In loops that contain multiple consecutive small loads (e.g., 3 bytes
loading i8's), peeling the last iteration makes it safe to read beyond
the accessed region, enabling the use of a wider load (e.g., b32) for
all other N-1 iterations.
Patterns such as:
```
%a = load i8, ptr %p
%b = load i8, ptr %p+1
%c = load i8, ptr %p+2
...
%p.next = getelementptr i8, ptr %p, 3
```
Can be transformed to:
```
%wide = load b32, ptr %p ; Read 4 bytes
[19 lines not shown]