LLVM/project d48b730 — mlir/include/mlir/Dialect/Tosa/IR TosaOps.td, mlir/lib/Dialect/Tosa/IR TosaOps.cpp

[mlir][tosa] Move MUL shift value check out of verifier (#234063)

Keep `MulOp::verify()` local to the operation by removing its constant
`shift` value check. The existing strict `tosa-validate` check covers
invalid shift values.

Move the floating-point shift regression test to `error_if_check.mlir`.

Assisted-by: Codex
DeltaFile
+0-10mlir/test/Dialect/Tosa/invalid.mlir
+10-0mlir/test/Dialect/Tosa/error_if_check.mlir
+0-9mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
+4-1mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td
+14-204 files

LLVM/project 2027d82 — llvm/test/CodeGen/LoongArch/lasx vselect.ll, llvm/test/CodeGen/LoongArch/lsx vselect.ll

update after rebase
DeltaFile
+23-19llvm/test/CodeGen/LoongArch/lsx/vselect.ll
+4-8llvm/test/CodeGen/LoongArch/lasx/vselect.ll
+27-272 files

LLVM/project 2b97c1b — llvm/include/llvm/Analysis CycleAnalysis.h, llvm/include/llvm/CodeGen MachineCycleAnalysis.h

[CycleInfo] Add -verify-cycle-info and verify<machine-cycles> (#233412)

Add a -verify-cycle-info flag, on by default with EXPENSIVE_CHECKS,
following the example of -verify-loop-info. When it is set,
CycleInfoWrapperPass and MachineCycleInfoWrapperPass verify themselves
in verifyAnalysis(), which the legacy pass manager calls after each pass
that preserves them. This gives automatic verification of cycle info
across the legacy codegen pipeline.

Also add verify<machine-cycles> for the new pass manager, analogous to
verify<cycles>.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+17-0llvm/lib/Analysis/CycleAnalysis.cpp
+13-0llvm/lib/CodeGen/MachineCycleAnalysis.cpp
+8-2llvm/include/llvm/Analysis/CycleAnalysis.h
+7-0llvm/include/llvm/CodeGen/MachineCycleAnalysis.h
+1-1llvm/test/CodeGen/X86/cycle-info.mir
+1-0llvm/include/llvm/Passes/MachinePassRegistry.def
+47-36 files

LLVM/project 34d1f2a — clang/lib/StaticAnalyzer/Checkers/WebKit RawPtrRefLocalVarsChecker.cpp, clang/test/Analysis/Checkers/WebKit unretained-local-vars.mm

[alpha.webkit.UnretainedLocalVarsChecker] Treat a raw pointer collection of a fast enumeration as the origin of its element (#234682)

alpha.webkit.UnretainedLocalVarsChecker still reported the element
variable of an Objective-C fast enumeration when the collection was a
raw pointer local variable or parameter, as in "NSArray *array =
obj.array;" followed by "for (T *x in array)", even though the variable
itself isn't reported. This includes a nested fast enumeration whose
collection is the element of the enclosing one, and a range-based for
loop over an Objective-C collection, which is a fast enumeration as
well.

The collection of a fast enumeration is evaluated before the loop body
is entered and keeps its elements alive. A raw pointer local variable or
parameter holding the collection is checked on its own, so treat it as a
guardian of the element as long as the loop body doesn't mutate it.

Also treat passing the address of an Objective-C object pointer guardian
as a mutation of the guardian as done for other raw pointers.

Authored with Claude Code.
DeltaFile
+97-1clang/test/Analysis/Checkers/WebKit/unretained-local-vars.mm
+12-1clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp
+109-22 files

LLVM/project 3b6cc59 — llvm/test/CodeGen/SystemZ call-ret-v2i64-abi.ll vec-v2i64-novector.ll, llvm/test/Transforms/Attributor nofpclass-fma.ll

rebase

Created using spr 1.3.7
DeltaFile
+521-0llvm/test/CodeGen/SystemZ/vec-v2i64-novector.ll
+0-480polly/docs/HowToManuallyUseTheIndividualPiecesOfPolly.rst
+460-0polly/docs/HowToManuallyUseTheIndividualPiecesOfPolly.md
+450-0llvm/test/CodeGen/SystemZ/call-ret-v2i64-abi.ll
+365-47llvm/test/Transforms/Attributor/nofpclass-fma.ll
+379-0mlir/test/Target/LLVMIR/nvvm/sparse-compress-sp2to4.mlir
+2,175-527200 files not shown
+9,140-1,769206 files

LLVM/project 49387fc — llvm/test/CodeGen/SystemZ call-ret-v2i64-abi.ll vec-v2i64-novector.ll, llvm/test/Transforms/Attributor nofpclass-fma.ll

[𝘀𝗽𝗿] changes introduced through rebase

Created using spr 1.3.7

[skip ci]
DeltaFile
+521-0llvm/test/CodeGen/SystemZ/vec-v2i64-novector.ll
+0-480polly/docs/HowToManuallyUseTheIndividualPiecesOfPolly.rst
+460-0polly/docs/HowToManuallyUseTheIndividualPiecesOfPolly.md
+450-0llvm/test/CodeGen/SystemZ/call-ret-v2i64-abi.ll
+365-47llvm/test/Transforms/Attributor/nofpclass-fma.ll
+379-0mlir/test/Target/LLVMIR/nvvm/sparse-compress-sp2to4.mlir
+2,175-527200 files not shown
+9,140-1,769206 files

LLVM/project 0dfdb52 — llvm/test/Transforms/SimplifyCFG preserve-branchweights-switch-create.ll

[SimplifyCFG] Use check-globals=smart for test

Instead of manually writing out check lines for the test. This makes the
test more standard and easier to update.

Reviewers: akuegel, mtrofin

Pull Request: https://github.com/llvm/llvm-project/pull/234826
DeltaFile
+8-4llvm/test/Transforms/SimplifyCFG/preserve-branchweights-switch-create.ll
+8-41 files

LLVM/project cb4945e — utils/bazel/llvm-project-overlay/compiler-rt compiler-rt.bzl BUILD.bazel

[bazel][compiler-rt] Introduce source exporting for ASan, UBSan, and LSan (#234492)

This exports the source files, headers, textual sources, and compile
flags for building the AddressSanitizer, UndefinedBehaviorSanitizer, and
LeakSanitizer runtime libraries on demand or via Bazel.

Also exports ignore lists and the basics needed for syms files. The
groups are decomposed in a way that allows us to build equivalent
runtimes to how CMake works. This is the basis that Carbon is building
on to support on-demand sanitizer runtimes.

Assisted-by: Antigravity with Gemini
DeltaFile
+151-0utils/bazel/llvm-project-overlay/compiler-rt/BUILD.bazel
+126-0utils/bazel/llvm-project-overlay/compiler-rt/compiler-rt.bzl
+277-02 files

LLVM/project 533078d — utils/bazel/llvm-project-overlay/libcxx libcxx_library.bzl BUILD.bazel, utils/bazel/llvm-project-overlay/libcxxabi BUILD.bazel

[bazel][libcxx][libcxxabi] Introduce basic sources and copts exporting for libcxx and libcxxabi (#234489)

This exports the source files directly so that they can be used to build
a libcxx runtime library on demand. It also differentiates between
normal sources and textual sources in necessary places.

It also exports `.in` template files along with the source and headers.

And lastly, it exports `copts` to use when building both libcxx and
libcxxabi.

Assisted-by: Antigravity with Gemini
DeltaFile
+139-0utils/bazel/llvm-project-overlay/libcxx/BUILD.bazel
+40-0utils/bazel/llvm-project-overlay/libcxxabi/BUILD.bazel
+37-0utils/bazel/llvm-project-overlay/libcxx/libcxx_library.bzl
+216-03 files

LLVM/project 93286dd — llvm/lib/Target/AArch64 AArch64Combine.td, llvm/test/CodeGen/AArch64 combine-sdiv.ll rem-by-const.ll

[AArch64][GlobalISel] Run shift_immed_chain in the post-legalizer combiner (#234727)

The legalizer can create chains of shifts by constants that the
pre-legalizer combiner never sees. Adding `shift_immed_chain` to the
post-legalizer combiner merges them.

```llvm
define i16 @test(i16 %a) {
  %r = sdiv i16 %a, 7
  ret i16 %r
}
```

Before (7 instructions):
```
sxth w8, w0
mov  w9, #18725
mul  w8, w8, w9
asr  w8, w8, #16

    [18 lines not shown]
DeltaFile
+5-10llvm/test/CodeGen/AArch64/rem-by-const.ll
+3-6llvm/test/CodeGen/AArch64/combine-sdiv.ll
+1-1llvm/lib/Target/AArch64/AArch64Combine.td
+9-173 files

LLVM/project 951f633 — mlir/cmake/modules CMakeLists.txt

[mlir][cmake] NFC: fix typo (#234862)
DeltaFile
+1-1mlir/cmake/modules/CMakeLists.txt
+1-11 files

LLVM/project bee76f1 — llvm/lib/IR IROptions.td Value.cpp, llvm/test/Analysis/ValueTracking deref-abstract-gc.ll memory-dereferenceable.ll

[IR] Remove -use-dereferenceable-at-point-semantics option (#218428)

This was a temporary migration option, remove it now that the migration
is complete.
DeltaFile
+23-46llvm/test/Analysis/ValueTracking/memory-dereferenceable.ll
+18-28llvm/test/Transforms/MergeICmps/X86/no-gep-other-work.ll
+0-4llvm/lib/IR/IROptions.td
+1-3llvm/lib/IR/Value.cpp
+1-2llvm/test/Transforms/LICM/hoist-alloc.ll
+1-1llvm/test/Analysis/ValueTracking/deref-abstract-gc.ll
+44-8412 files not shown
+44-9618 files

LLVM/project 53f628c — utils/bazel/llvm-project-overlay/compiler-rt BUILD.bazel

[bazel][compiler-rt] Exclude more libc-backed builtins (#234486)

Follows the pattern of #214779 and excludes new builtins added by
#207543 and #209900.

Assisted-by: Antigravity with Gemini
DeltaFile
+24-0utils/bazel/llvm-project-overlay/compiler-rt/BUILD.bazel
+24-01 files

LLVM/project f467c1f — utils/bazel/llvm-project-overlay/libunwind BUILD.bazel libunwind_library.bzl

[bazel][libunwind] Introduce basic source and copts exporting for libunwind (#234485)

This exports the source files and copts directly so that they can be
used to build this runtime library on demand. This is used by Carbon's
toolchain to package and build `libunwind`.

Assisted-by: Antigravity with Gemini
DeltaFile
+24-0utils/bazel/llvm-project-overlay/libunwind/libunwind_library.bzl
+16-0utils/bazel/llvm-project-overlay/libunwind/BUILD.bazel
+40-02 files

LLVM/project bf6ab40 — utils/bazel/llvm-project-overlay/compiler-rt BUILD.bazel

[bazel][compiler-rt] Add `libfuzzer` target to `compiler-rt` (#234482)

This lets Bazel users of LLVM to also use `libfuzzer` directly to build
fuzz tests, including the `main`-function it provides. This is a simple
and uncomplicated approach to leveraging `libfuzzer`, and seems useful
to include. Carbon has been using it for the last several years
successfully.

One tricky part is that we have to carefully manage the compiler flags
when compiling with Clang.

Assisted-by: Antigravity with Gemini
DeltaFile
+20-0utils/bazel/llvm-project-overlay/compiler-rt/BUILD.bazel
+20-01 files

LLVM/project fb17254 — llvm/lib/Target/LoongArch LoongArchISelLowering.cpp

fix typo
DeltaFile
+1-1llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp
+1-11 files

LLVM/project 427f3b6 — llvm/lib/Target/LoongArch LoongArchISelLowering.h LoongArchISelLowering.cpp, llvm/test/CodeGen/LoongArch/lasx vselect.ll

[LoongArch] Custom legalize vselect to vector_shuffle for most constant condition cases
DeltaFile
+48-36llvm/test/CodeGen/LoongArch/lasx/vselect.ll
+44-34llvm/test/CodeGen/LoongArch/lsx/vselect.ll
+49-2llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp
+1-0llvm/lib/Target/LoongArch/LoongArchISelLowering.h
+142-724 files

LLVM/project 05c3ff5 — clang/lib/CodeGen/Targets X86.cpp, clang/test/CIR/CodeGen call-conv-lowering-x86_64-x87-union.cpp

[Clang][ABI][X86] Do not emit zeroext/signext for return values (#232729)

This stops emitting the zeroext/signext attributes for return values on
X86, except for `bool` (which stays zeroext, as it requires
zero-extension to 8 bits) and Darwin.

The `getTypeForExtReturn()` in the X86 backend already ignores
zeroext/signext for i8 and i16 types on non-Darwin platforms. For these
cases, this change has no impact on codegen: The intent is merely to
clarify the used psABI. Using zeroext/signext when no actual extension
takes place is highly confusing, esp. when the behavior is different
between return values and arguments.

However, this *does* change behavior for non-i8/i16 types. Specifically,
it changes `_BitInt` types to have unspecified high bits, instead of
performing a partial sign/zero extension to 8, 16 or 32 bits. This makes
`_BitInt` comply with the Linux psABI, the previous behavior was
incorrect. MSVC does not support `_BitInt`, so there is no correct ABI
there.

    [5 lines not shown]
DeltaFile
+49-0llvm/unittests/ABI/X86TargetInfoTest.cpp
+12-12clang/test/CodeGen/attr-sized-by-or-null-for-pointers.c
+12-12clang/test/CodeGen/attr-sized-by-for-pointers.c
+19-5clang/lib/CodeGen/Targets/X86.cpp
+19-4llvm/lib/ABI/Targets/X86.cpp
+8-8clang/test/CIR/CodeGen/call-conv-lowering-x86_64-x87-union.cpp
+119-4122 files not shown
+181-10228 files

LLVM/project 092b873 — llvm/unittests/ADT DenseMapTest.cpp

[DenseMap] Skip TrivialCopyable Test on FreeBSD (#234853)

FreeBSD currently does not provide a trivially copyable std::pair to
avoid an ABI break. Consequently, the isRelocatableBucket check fails,
so we disable this static_assert on FreeBSD.
DeltaFile
+2-0llvm/unittests/ADT/DenseMapTest.cpp
+2-01 files

LLVM/project 85b46e6 — clang/lib/CodeGen/TargetBuiltins RISCV.cpp, clang/test/CodeGen/RISCV rvp-intrinsics.c

[RISCV][P-ext] Add scalar mqwacc/mqrwacc intrinsics (#234560)

Add the scalar "Q-format" Multiply with Widening Accumulate intrinsics:
https://github.com/riscv/riscv-p-spec/blob/master/P-ext-intrinsics.adoc#q-format-multiply-with-widening-accumulate

- `__riscv_mqwacc_i64`
- `__riscv_mqrwacc_i64`
DeltaFile
+34-0clang/test/CodeGen/RISCV/rvp-intrinsics.c
+28-0llvm/test/CodeGen/RISCV/rvp-scalar.ll
+27-0llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+15-0cross-project-tests/intrinsic-header-tests/riscv_packed_simd.c
+8-0llvm/include/llvm/IR/IntrinsicsRISCV.td
+8-0clang/lib/CodeGen/TargetBuiltins/RISCV.cpp
+120-02 files not shown
+128-08 files

LLVM/project 395ba2c — llvm/lib/CodeGen CodeGenPrepare.cpp, llvm/test/Transforms/CodeGenPrepare/X86 optimize-ext-uses-nneg.ll

[CodeGenPrepare] Drop poison-generating flags on extensions in optimizeExtUses (#234134)

`optimizeExtUses` rewrites uses of an extension's source in other blocks
to read `trunc` of the extension, which is only correct where the
extension isn't `poison`. A `zext nneg` can be valid only where it was
originally used, like behind a check that its source isn't negative. If
that check is one of the rewritten uses, it ends up reading `poison`,
and on `x86_64-pc-windows-msvc`, InstSimplify in WinEHPrepare's cleanup
folds it to true and causes a miscompile.

Drop the extension's poison-generating flags once a use has been
rewritten, like #72103 and #90382 did for similar cases in
`CodeGenPrepare`.

Fixes #234098.

(cherry picked from commit 93fccabb4ebc82695475eaaa279ea5fbb2265450)
DeltaFile
+73-0llvm/test/Transforms/CodeGenPrepare/X86/optimize-ext-uses-nneg.ll
+6-0llvm/lib/CodeGen/CodeGenPrepare.cpp
+79-02 files

LLVM/project 5c71313 — llvm/lib/Transforms/Utils LoopUnrollRuntime.cpp, llvm/test/Transforms/LoopUnroll scev-invalidation-lcssa.ll

[LoopUnroll] Invalidate epilogue exit phis with new predecessor. (#234202)

Adding a new incoming value the to LCSSA phi in the exit block requires
invalidating SCEV for the phi.

Add missing forgetLcssaPhiWithNewPredecessor, like ConnectProlog already
does.

Fixes https://github.com/llvm/llvm-project/issues/231756

PR: https://github.com/llvm/llvm-project/pull/234202
(cherry picked from commit 1782f9b2cef910440a06240f3bcc638bef981584)
DeltaFile
+107-0llvm/test/Transforms/LoopUnroll/scev-invalidation-lcssa.ll
+1-0llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp
+108-02 files

LLVM/project f8bd952 — llvm/lib/Target/LoongArch LoongArchISelLowering.cpp, llvm/test/CodeGen/LoongArch/lsx/ir-instruction sitofp.ll

[LoongArch] fix more `sitofp` missing instruction issues (#234143)

Turns out https://github.com/llvm/llvm-project/issues/228894 /
https://github.com/llvm/llvm-project/pull/228896 was not sufficient,
there are still isel issues with this conversion:

- https://godbolt.org/z/arTaEhKsT
- https://godbolt.org/z/nGh63Kvo6

(cherry picked from commit ee216ff7ed6326989dfbd8f206342657aa1fda84)
DeltaFile
+407-118llvm/test/CodeGen/LoongArch/lsx/ir-instruction/sitofp.ll
+4-0llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp
+411-1182 files

LLVM/project 1f43a92 — llvm/include/llvm/Support Caching.h, llvm/lib/HTTP StreamedHTTPResponseHandler.cpp

[debuginfod] Abort cached file stream if request fails (#232038)

When an HTTP request fails while it already received some data, the
cached file stream is never committed. Destroying it in that state
raises a fatal error, crashing the program (see #184728).

This PR adds an `abort` method that should be called in this situation
before destroying the stream. For the default implementation, only the
output stream is closed. For the `CacheStream` in `llvm::localCache`,
the temporary file is discarded as well.

The test is based on David's reproducer. Since WinHttp seems to discard
the content-length header, I switched to timing out the response
instead.

Fixes #184728. This is still a bug for the symstore locator in lldb, but
I'll fix that in a followup.

fix: disable test partial-response.test on system-windows
DeltaFile
+41-0llvm/unittests/Support/Caching.cpp
+33-0llvm/test/tools/llvm-debuginfod-find/Inputs/partial_response.py
+20-3llvm/include/llvm/Support/Caching.h
+15-0llvm/test/tools/llvm-debuginfod-find/partial-response.test
+6-0llvm/lib/Support/Caching.cpp
+6-0llvm/lib/HTTP/StreamedHTTPResponseHandler.cpp
+121-32 files not shown
+127-48 files

LLVM/project 2cc5b8c — flang/lib/Semantics check-omp-structure.cpp, flang/test/Semantics/OpenMP declare-simd-empty.f90 declare-simd.f90

[flang][OpenMP] Ignore DECLARE_SIMD and warn about missing implementa… (#232712)

…tion

Currently DECLARE_SIMD emits a "not yet implemented" error in the MLIR
to LLVM IR translation.

DECLARE_SIMD is a hint to the compiler and ignoring it is technically
speaking a conforming implementation (although obviously not desirable).
Do not abort compilation when DECLARE_SIMD is encountered, but emit a
warning that it's currently ignored.

(cherry picked from commit 5ca62fdee645ec253263e41a45fe626c6b66be22)

Fixes: https://github.com/llvm/llvm-project/issues/234108
DeltaFile
+7-0mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
+5-1flang/test/Semantics/OpenMP/declare-simd.f90
+5-1flang/test/Semantics/OpenMP/declare-simd-interface-body.f90
+6-0flang/test/Semantics/OpenMP/linear-clause01.f90
+5-0flang/lib/Semantics/check-omp-structure.cpp
+2-1flang/test/Semantics/OpenMP/declare-simd-empty.f90
+30-37 files not shown
+40-313 files

LLVM/project fde947f — llvm/lib/Transforms/Vectorize VPlanTransforms.cpp, llvm/test/Transforms/LoopVectorize/AArch64 vector-call-linear-args-no-wide-iv.ll

[VPlan] Split legalizeAndOptimizeIVs in 2 phases. (#217765)

Split the transform into 2 phases:

1. narrow all users of all IVs
2. replace wide IVs if all users are scalar.

Together with removing the old, wide recipes, this allows us to catch
slightly more cases.

PR: https://github.com/llvm/llvm-project/pull/217765

(cherry picked from commit 932f5d22df7775f7cb65befd62053c0e93448959)
(cherry picked from commit a3ac001f673a87a014ecd6bf7ca11cc8b1cb576d)
DeltaFile
+167-0llvm/test/Transforms/LoopVectorize/VPlan/vplan-narrow-iv-users.ll
+66-0llvm/test/Transforms/LoopVectorize/AArch64/vector-call-linear-args-no-wide-iv.ll
+16-11llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+249-113 files

LLVM/project 58ccd3c — lldb/source/Plugins/Process/Linux NativeProcessLinux.cpp, lldb/test/API/tools/lldb-server/inferior-crash TestGdbRemoteSegFault.py

[lldb] Preserve the siginfo when running syscalls in the inferior (#234153)

NativeProcessLinux::Syscall (used to implement the _M and _m packets)
runs a syscall instruction in the current thread. It restores the
registers and memory afterwards, but not the siginfo, which ends up
describing the SIGTRAP from the syscall instead of the signal that the
thread originally stopped with.

lldb allocates memory quite often, even when evaluating expressions
which don't run any code in the inferior (e.g. "expr 1+1"). Afterwards,
"thread siginfo" shows the wrong data. More importantly, the inferior
doesn't get the original siginfo when lldb resumes it with the signal it
stopped with: the kernel sees that the signal does not match the
siginfo, and makes up a new one (with si_code=SI_USER and the pid of
lldb-server). This means that e.g. a SIGSEGV handler does not get the
fault address.

This patch makes Syscall save the siginfo before running the syscall,
and restore it (with PTRACE_SETSIGINFO) afterwards.

Assisted-by: Claude
DeltaFile
+32-0lldb/test/API/tools/lldb-server/inferior-crash/TestGdbRemoteSegFault.py
+10-0lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+42-02 files

LLVM/project bfa1064 — flang-rt/lib/runtime numeric.cpp, flang-rt/unittests/Runtime Numeric.cpp

[flang] Fix wrong result for exponentiation when denormal is expected (#205262)

Fixes #192639

Root cause:
Negative integer exponents used exponentiation-by-squaring that divides
by successively squared bases; for |base| > 1 intermediates overflow
before the final divide.

Fix
- Constant folding: After the direct path, retry with (1/base)^|n| only
when overflow was flagged, so ordinary negative powers stay accurate and
extreme cases still get subnormals. Handle INT_MIN via the original
exponent on retry (forceMultiply).
- Runtime FPowI: Same idea—invert after base^|n|; retry from 1/base only
when the quotient is exactly zero and base != 0, avoiding unnecessary
reciprocal-first rounding loss.

Scope - What changed

    [7 lines not shown]
DeltaFile
+20-11flang-rt/lib/runtime/numeric.cpp
+24-3flang/lib/Evaluate/int-power.h
+18-0flang/test/Evaluate/folding07.f90
+17-0flang-rt/unittests/Runtime/Numeric.cpp
+79-144 files

LLVM/project 470f33e — lld/MachO ExportTrie.cpp

Improve comments in ExportTrie.cpp

Refactor comments for clarity and optimization explanation.
DeltaFile
+3-2lld/MachO/ExportTrie.cpp
+3-21 files

LLVM/project 603b2ae — lld/MachO ExportTrie.cpp

[lld-macho] Build the export trie by edges, not bytes (NFC)

Emit singleton suffixes directly and scan common prefixes in one pass,
avoiding repeated byte-wise partitioning. Preserve radix traversal,
node allocation order, and terminal encoding.

On a Ryzen 7 7700, a rust-analyzer debug link with 248,607 exports
changes from 2079 to 1948 ms at one thread and 1269 to 1185 ms at
eight threads (median wall times over four interleaved pairs).
DeltaFile
+27-0lld/MachO/ExportTrie.cpp
+27-01 files