LLVM/project 1990184 — llvm/include/llvm/Transforms/IPO Attributor.h, llvm/lib/Target/AMDGPU AMDGPUAttributor.cpp

Attributor: Fix build with older GCC after AAKindSet (#240975)

Older GCC versions cannot compare the addresses of distinct static
members in constant expressions, so computing the AAKindSet bits
failed. Compare the IDs as template arguments instead, and construct
the sets with AAKindSet::get from the IDs as template arguments.

Fixes cbc7d9da9b06.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+55-60llvm/include/llvm/Transforms/IPO/Attributor.h
+8-20llvm/lib/Transforms/IPO/Attributor.cpp
+8-20llvm/lib/Target/AMDGPU/AMDGPUAttributor.cpp
+71-1003 files

LLVM/project 6acd266 — llvm/lib/Frontend/OpenMP OMPIRBuilder.cpp, mlir/test/Target/LLVMIR openmp-todo.mlir

[OpenMP][OMPIRBuilder] Propagate custom mapper errors from createTarget

When a custom mapper callback failed while emitting the kernel launch of a
target region, emitTargetCall wrapped the error in cantFail and crashed,
although createTarget already reports errors to its caller. MLIR
translation hits this when an omp.target uses a declare mapper that it
cannot translate yet, such as one with iterator map entries, while
omp.target_data reports the same mapper as not yet implemented.

Return the error from emitTargetCall and pass it on from createTarget, so
callers report it instead of crashing. When emitIfClause stops on such an
error, it now inserts the blocks it has not emitted yet into the function,
so they are not leaked.

Assisted with Claude Opus 5.5.
DeltaFile
+52-0mlir/test/Target/LLVMIR/openmp-todo.mlir
+23-18llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+75-182 files

LLVM/project 6296216 — lldb/test/API/macosx/posix_spawn TestLaunchProcessPosixSpawn.py

[lldb] Skip debugserver launch tests with a system debugserver (#240978)

TestDebugserverLaunchArch, added in 3e7841ef1d6f, exercises the
debugserver built from this tree. An out-of-tree debugserver that
predates that change launches the arm64e slice for arm64, so test_arm64
fails on bots using the system debugserver.
DeltaFile
+2-0lldb/test/API/macosx/posix_spawn/TestLaunchProcessPosixSpawn.py
+2-01 files

LLVM/project 1e6edf7 — llvm/lib/CodeGen SafeStack.cpp TargetLoweringBase.cpp, llvm/test/Transforms/SafeStack/ARM existing-libcall-decls.ll

SafeStack: Take libcall declarations from RuntimeLibcallsInfo (#240445)

Stop declaring __stack_chk_fail and __safestack_pointer_address
manually and construct them with the correct type automatically.

A function with the variable's name is now reported as not being a
global variable, rather than a renamed copy of the variable being
inserted. -safestack-use-pointer-address now requires
__safestack_pointer_address to be available for the target, instead of
unconditionally emitting a call to it. The tests using it on
non-Android triples move to Android.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+93-0llvm/test/Transforms/SafeStack/ARM/existing-libcall-decls.ll
+36-36llvm/lib/CodeGen/TargetLoweringBase.cpp
+12-21llvm/lib/CodeGen/SafeStack.cpp
+19-0llvm/test/Transforms/SafeStack/X86/unsafe-stack-ptr-not-thread-local-error.ll
+19-0llvm/test/Transforms/SafeStack/X86/unsafe-stack-ptr-function-error.ll
+13-0llvm/test/Transforms/SafeStack/X86/pointer-address-unavailable-error.ll
+192-578 files not shown
+221-7414 files

LLVM/project 7aaed07 — llvm/lib/Target/AMDGPU SIInstrInfo.cpp, llvm/test/CodeGen/AMDGPU waterfall-call-inreg-agpr.mir

[AMDGPU] Ignore debug instructions when lowering a VGPR copy into a physical SGPR (#239751)

`SIInstrInfo::handleCopyToPhysHelper` scans the rest of the block for
the readers of a VGPR copied
into a physical SGPR: a call that takes the SGPR as an argument is
waterfalled, and any other reader
keeps the copy. A `DBG_VALUE` of the SGPR counted as such a reader, so
with debug info the illegal
VGPR-to-SGPR copy stayed in the loop. The scan now skips debug
instructions, and stops where the
register is clobbered, by a regmask as well as a def.
DeltaFile
+30-0llvm/test/CodeGen/AMDGPU/waterfall-call-inreg-agpr.mir
+10-10llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
+40-102 files

LLVM/project 4556f47 — llvm/lib/TableGen TGLexer.cpp TGParser.h

[TableGen] Get depfile dependencies from SrcMgr instead of TGLexer. NFCI. (#240925)

TGLexer recorded the path of every included file in a set that was only
used by TableGenMain to write the -d dependency file. SrcMgr already has
this information: every buffer after the main file was added by an
include directive, and its identifier is the resolved path. Build the
dependency list from SrcMgr instead, and remove the set and its
accessors from TGLexer and TGParser.

The depfile contents are unchanged. This removes the last use of the
parser after parsing has finished.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+11-6llvm/lib/TableGen/Main.cpp
+0-10llvm/lib/TableGen/TGLexer.h
+0-3llvm/lib/TableGen/TGParser.h
+0-1llvm/lib/TableGen/TGLexer.cpp
+11-204 files

LLVM/project bd9e8a2 — flang/lib/Lower OpenACC.cpp, flang/test/Lower/OpenACC acc-loop-real-bounds.f90 acc-loop-integer-kind.f90

[flang][OpenACC] Convert DO loop controls to the induction variable kind (#240591)

F2023 11.1.7.4.1 requires the initial, terminal, and incrementation
parameters of a DO loop to have the same kind as the do-variable. Flang
lowered an implicit or explicit acc.loop with the controls in their
source kinds, so an i32 induction variable could get an i64 upper bound
or step.

Lowering now converts each control to the induction variable's type, and
an omitted step is the constant 1 of that type. Controls already of that
type are unchanged, so existing loops without a kind mismatch lower the
same as before.

Add acc-loop-integer-kind.f90 to check the converted controls for tile,
omitted step, integer(8) bounds and step, DO CONCURRENT, and the
matching i64 case that should not gain converts. Update the comment in
acc-loop-real-bounds.f90 to match.
DeltaFile
+90-0flang/test/Lower/OpenACC/acc-loop-integer-kind.f90
+16-15flang/lib/Lower/OpenACC.cpp
+3-2flang/test/Lower/OpenACC/acc-loop-real-bounds.f90
+109-173 files

LLVM/project 96e9c10 — llvm/lib/Target/Hexagon HLXExpandPseudos.cpp HexagonISelDAGToDAG.cpp, llvm/test/CodeGen/Hexagon hlx-isel-v1024i16.ll

[Hexagon] Add instruction-selection support for HLX (#240950)

Add instruction-selection and lowering support for the Hexagon HLX
(eLementwise eXtension) instructions, building on the HLX MC and
intrinsics support.

This adds:
- the HLX type-legalization helpers on HexagonSubtarget
(getHLXVectorLength, getHLXElementTypes, isHLXElementType,
isHLXVectorType, isTypeForHLX), so that HLX vector types are kept out of
the HVX legalization path;
- HexagonISelLoweringHLX.cpp, which registers the HLX vector types, sets
the legal operations for them, and lowers masked load/store and vector
select;
- the DetectUseSxth/DetectUseZxth complex-pattern matchers used to fold
i16 sign/zero extensions into the HLX widening operations;
- HexagonPatternsHLX.td, the HLX instruction-selection patterns for
arithmetic, multiply, shift, compare, min/max, absolute difference,
average, load/store, splat, select, and extend/truncate.

    [8 lines not shown]
DeltaFile
+452-0llvm/lib/Target/Hexagon/HexagonISelLoweringHLX.cpp
+320-0llvm/lib/Target/Hexagon/HexagonDepMapAsm2Intrin.td
+291-0llvm/lib/Target/Hexagon/HexagonPatternsHLX.td
+224-0llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp
+167-0llvm/lib/Target/Hexagon/HLXExpandPseudos.cpp
+89-0llvm/test/CodeGen/Hexagon/hlx-isel-v1024i16.ll
+1,543-014 files not shown
+1,822-120 files

LLVM/project f7e7b37 — flang/lib/Lower/OpenMP Utils.cpp ClauseProcessor.cpp, flang/test/Lower/OpenMP iterator-ranges.f90 motion-iterator.f90

[flang][OpenMP] Lower iterator modifiers in map and motion clauses

An iterator modifier on a MAP, TO, or FROM clause expands each list item into
one locator per iterator value, so a single clause can map or update
scattered elements such as `a(idx(i))` without listing them or transferring
the whole array. The OpenMP dialect represents these entries since #197047;
this patch lowers them from Flang for TARGET DATA, TARGET ENTER/EXIT DATA,
and TARGET UPDATE.

For example, `!$omp target update to(iterator(i=1:n): a(i), b)` becomes:

  entries = omp.iterator(i = 1 to n) {
    yield map_info(base = a, bounds = element i)
  }
  target_update(iterated_maps = entries, ordinary_maps = [b])

Each locator is expanded only over the iterators it references, and locators
without one are mapped as before. Keeping the array base and selecting
elements or sections through map bounds handles explicit-shape and

    [12 lines not shown]
DeltaFile
+947-0flang/test/Lower/OpenMP/motion-iterator.f90
+230-0flang/test/Lower/OpenMP/Todo/map-motion-iterator-unsupported-locators.f90
+211-0flang/test/Lower/OpenMP/iterator-ranges.f90
+182-11flang/lib/Lower/OpenMP/ClauseProcessor.cpp
+166-0flang/lib/Lower/OpenMP/Utils.cpp
+81-0flang/test/Lower/OpenMP/Todo/map-iterator-ref-attach.f90
+1,817-1114 files not shown
+2,099-6320 files

LLVM/project 4e3ab84 — compiler-rt/lib/sanitizer_common CMakeLists.txt

ReportReceiver excluded on libc-free builds (fixes Linux?)
DeltaFile
+1-1compiler-rt/lib/sanitizer_common/CMakeLists.txt
+1-11 files

LLVM/project 9fc85b1 — flang/test/Transforms/DoConcurrent local_init_reduce_device.f90 shared_local_init_device.f90

[flang][OpenMP][NFC] - Add combinatorial device tests for locality specifiers (#238979)

Add end-to-end device tests for locality specifier combinations:
- local_init_reduce_device.f90: LOCAL_INIT + REDUCE on device
- shared_local_init_device.f90: SHARED + LOCAL_INIT on device

These complement the existing host-only combinatorial tests and verify
the full target teams distribute parallel do structure is generated
correctly with mixed locality specifiers.

Co-authored-by: Claude Opus 4 (1M context) <noreply at anthropic.com>
DeltaFile
+39-0flang/test/Transforms/DoConcurrent/shared_local_init_device.f90
+37-0flang/test/Transforms/DoConcurrent/local_init_reduce_device.f90
+76-02 files

LLVM/project c62b993 — compiler-rt/lib/asan asan_descriptions.cpp asan_errors.h, compiler-rt/lib/sanitizer_common sanitizer_symbolizer_report.cpp sanitizer_report_receiver.h

clang-format
DeltaFile
+46-46compiler-rt/lib/asan/asan_errors.cpp
+27-27compiler-rt/lib/asan/asan_errors.h
+17-20compiler-rt/lib/tsan/rtl/tsan_report.cpp
+15-16compiler-rt/lib/sanitizer_common/sanitizer_report_receiver.h
+14-14compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp
+14-14compiler-rt/lib/asan/asan_descriptions.cpp
+133-1376 files not shown
+179-18612 files

LLVM/project 85c4dd3 — llvm/include/llvm/CodeGen MachineDominators.h, llvm/include/llvm/Passes MachinePassRegistry.def

[CodeGen] Add verify<machine-dom-tree> (#240960)

Similar to the middle-end equivalent. Makes it easier to write tests
around analysis invalidation/correct preservation.

Assisted-By: LLM
DeltaFile
+11-0llvm/lib/CodeGen/MachineDominators.cpp
+8-0llvm/include/llvm/CodeGen/MachineDominators.h
+1-1llvm/test/CodeGen/AMDGPU/si-lower-control-flow-preserve-dom-tree.mir
+2-0llvm/include/llvm/Passes/MachinePassRegistry.def
+22-14 files

LLVM/project 9d486af — llvm/include/llvm/Analysis LibcallLoweringInfo.h, llvm/lib/Analysis LibcallLoweringInfo.cpp

LibcallLoweringInfo: Use unique_ptr for map entries. (#240015)

ModuleLibcallLoweringInfo stored each context's LibcallLoweringInfo by
value in a DenseMap, so returned references dangled once a later
insertion grew the map. Current users look the entry up again for each
function, but future changes will introduce long lived references.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+7-8llvm/include/llvm/Analysis/LibcallLoweringInfo.h
+3-2llvm/lib/Analysis/LibcallLoweringInfo.cpp
+10-102 files

LLVM/project 8c39203 — clang/include/clang/CIR/Dialect/IR CIRDialect.td CIROpenCLAttrs.td

[CIR][NFC] Move maximum work-group size attribute to common definitions (#240922)

Move `MaxWorkGroupSizeAttr`, introduced in #227715, and its name
accessor alongside common CIR attributes to reflect their use by HIP
kernels.

Assisted-by: Codex / GPT-6
DeltaFile
+0-22clang/include/clang/CIR/Dialect/IR/CIROpenCLAttrs.td
+22-0clang/include/clang/CIR/Dialect/IR/CIRAttrs.td
+1-1clang/include/clang/CIR/Dialect/IR/CIRDialect.td
+23-233 files

LLVM/project 29a1922 — lld/MachO Driver.cpp InputFiles.h

[lld][MachO] Batch command-line object files and archive member scanning in parallel

This is part of the ld64.lld performance improvements tracked by

Currently, command-line object files and archive member symbol tables
are still parsed and scanned one file at a time as Driver::processFile()
encounters them.

This change splits ObjFile::parseLazy() into scanLazy() and
registerLazy(), and queues command-line object files and archive members
via parseLater(). parseBatch() runs scanLazy() and parsePrepare() in
parallel across the batch before running registerLazy() and
parseFinish() serially in command-line order, flushing before any other
input type.

Locally, this shows an ~8% link-time performance improvement over the
baseline.

AI use: this change is based off a prototype developed by an LLM.

    [2 lines not shown]
DeltaFile
+90-28lld/MachO/InputFiles.cpp
+19-8lld/MachO/InputFiles.h
+14-5lld/MachO/Driver.cpp
+123-413 files

LLVM/project ec4a1cc — llvm/test/CodeGen/AMDGPU/GlobalISel regbankselect-amdgcn.ptr.s.buffer.load.ll

[AMDGPU][GlobalISel] Pre-commit tests for split s.buffer.load offset overflow

Add divergent-offset ptr.s.buffer.load tests where the 256- and 512-bit
loads are split into 128-bit pieces at an offset of 4092, causing
overflow on the immediate field.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+217-0llvm/test/CodeGen/AMDGPU/GlobalISel/regbankselect-amdgcn.ptr.s.buffer.load.ll
+217-01 files

LLVM/project 28eed40 — llvm/lib/Target/AMDGPU AMDGPURegBankLegalizeHelper.cpp, llvm/test/CodeGen/AMDGPU/GlobalISel regbankselect-amdgcn.s.buffer.load.ll regbankselect-amdgcn.ptr.s.buffer.load.ll

[AMDGPU][GlobalISel] Fix immediate offset overflow when splitting s.buffer.load

When we're splitting a very large (>128 bit) s.buffer.load into
128-bit buffer loads, we add offsets to each split load. Currently,
when dealing with ptr.s.buffer.load, the code wouldn't subtract enough
from the immediate offset, so that when we added that +128 or +256,
we'd overflow the 12-bit immediate, causing silent overflow.

This commit fixes the issue by correctly calling the offset
splitter with a "alignment" that ensures that all those intermediate
loads don't overflow.

This matches the behavior in SDag and RegisterBankInfo.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+30-34llvm/test/CodeGen/AMDGPU/GlobalISel/llvm.amdgcn.s.buffer.load.ll
+24-24llvm/test/CodeGen/AMDGPU/GlobalISel/llvm.amdgcn.ptr.s.buffer.load.ll
+16-20llvm/test/CodeGen/AMDGPU/GlobalISel/regbankselect-amdgcn.ptr.s.buffer.load.ll
+8-8llvm/test/CodeGen/AMDGPU/GlobalISel/regbankselect-amdgcn.s.buffer.load.ll
+4-1llvm/lib/Target/AMDGPU/AMDGPURegBankLegalizeHelper.cpp
+82-875 files

LLVM/project 94d82d0 — llvm/lib/Target/AMDGPU AMDGPUInstCombineIntrinsic.cpp, llvm/test/Transforms/InstCombine/AMDGPU amdgcn-demanded-vector-elts.ll

[AMDGPU] Reduce resource align when shrinking buffer loads

Since the `align` on buffer intrinsics includes the offset argument,
the demand, `simplifyAMDGCNMemoryIntrinsicDemanded` needs to account
for the value added to that offset, which might reduce the alignment
of the load.

AI disclosure: Claude wrote the code, I looked at it and wrote the
commit message.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+14-2llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp
+5-5llvm/test/Transforms/InstCombine/AMDGPU/amdgcn-demanded-vector-elts.ll
+19-72 files

LLVM/project 1ded4f1 — llvm/test/Transforms/InstCombine/AMDGPU amdgcn-demanded-vector-elts.ll

[AMDGPU] Pre-commit tests for buffer load shrinking with align

Buffer load demanded elements analysis isn't shrinking the `align`
annotated on the intrinsic correctly.

AI disclosure: Claude wrote these, I wrote this message

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+78-0llvm/test/Transforms/InstCombine/AMDGPU/amdgcn-demanded-vector-elts.ll
+78-01 files

LLVM/project 4781083 — llvm/include/llvm/Transforms/IPO Attributor.h, llvm/lib/Target/AMDGPU AMDGPUAttributor.cpp

Attributor: Fix build with older GCC after AAKindSet

Older GCC versions cannot compare the addresses of distinct static
members in constant expressions, so computing the AAKindSet bits
failed. Compare the IDs as template arguments instead, and construct
the sets with AAKindSet::get from the IDs as template arguments.

Fixes cbc7d9da9b06.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+55-60llvm/include/llvm/Transforms/IPO/Attributor.h
+8-20llvm/lib/Transforms/IPO/Attributor.cpp
+8-20llvm/lib/Target/AMDGPU/AMDGPUAttributor.cpp
+71-1003 files

LLVM/project 0f7faf8 — llvm/lib/Transforms/IPO Attributor.cpp, llvm/test/Transforms/Attributor light-preserved-analyses.ll

Attributor: Preserve the function analyses in the light module pass (#240714)

AttributorLightPass preserved FunctionAnalysisManagerCGSCCProxy, which
is meaningless for a module pass, instead of
FunctionAnalysisManagerModuleProxy. When the pass changed anything,
the module proxy was invalidated, which clears all cached function
analyses, so e.g. IPSCCP recomputed the assumption cache, TTI and TLI
of every function. The pass neither adds nor removes functions, and it
already invalidates the analyses of the functions it changes.

CTMark instructions:u with -attributor-enable=light changes by O3
-0.02%,
ThinLTO -0.10% (kimwitu++ -0.50%, sqlite3 -0.38%).

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+13-0llvm/test/Transforms/Attributor/light-preserved-analyses.ll
+1-1llvm/lib/Transforms/IPO/Attributor.cpp
+14-12 files

LLVM/project 39a6ebb — llvm/include/llvm/Transforms/IPO Attributor.h

Applying reviewers feedback

Co-authored-by: Shilei Tian <i at tianshilei.me>
DeltaFile
+2-1llvm/include/llvm/Transforms/IPO/Attributor.h
+2-11 files

LLVM/project 528affb — libc/test/UnitTest LibcTest.h FPMatcher.h, libc/test/src/sys/socket/linux socket_test_support.h

[libc][test] Align custom matchers with GoogleMock (#240616)

LibcTest custom matchers implemented stateful match(T) and
explainError()
methods writing directly to tlog, whereas GoogleMock's polymorphic
is_gtest_matcher protocol expects const MatchAndExplain(T,
MatchResultListener *), DescribeTo, and DescribeNegationTo methods.

Add a hermetic MatchResultListener wrapper around TestLogger in
LibcTest.h, allow the GoogleTest/GoogleMock hook method names in
libc/.clang-tidy, and update custom matchers across libc/test and
libc/utils to implement MatchAndExplain(..., MatchResultListener *)
const
so they work directly with GoogleMock's EXPECT_THAT and ASSERT_THAT
without macro redefinitions.

Part of #91630

Assisted-by: Gemini
DeltaFile
+201-166libc/utils/MPFRWrapper/MPFRUtils.cpp
+56-39libc/test/UnitTest/ErrnoSetterMatcher.h
+44-36libc/test/UnitTest/FPMatcher.h
+40-35libc/utils/MPFRWrapper/MPFRUtils.h
+24-42libc/test/src/sys/socket/linux/socket_test_support.h
+46-20libc/test/UnitTest/LibcTest.h
+411-33813 files not shown
+603-52919 files

LLVM/project d7f05a5 — flang/lib/Lower/OpenMP Utils.cpp ClauseProcessor.cpp, flang/test/Lower/OpenMP iterator-ranges.f90 motion-iterator.f90

[flang][OpenMP] Lower iterator modifiers in map and motion clauses

Iterator modifiers in the MAP clauses of TARGET DATA and TARGET ENTER/EXIT
DATA, and in the TO/FROM clauses of TARGET UPDATE, were reported as not yet
implemented.

Lower each locator that references an iterator to an omp.iterator that yields
its map entry, expanded only over the iterators the locator uses. The entry
keeps the array base and selects elements or sections through map bounds, so
descriptor-backed arrays are handled like fixed-size ones. Locators that do
not reference an iterator are mapped as before. Map info finalization leaves
the entries inside omp.iterator alone, and the temporary descriptor warning
no longer applies to iterator-dependent locators.

TARGET constructs, DECLARE MAPPER, derived type member locators, and reference
or attach modifiers are still reported as not yet implemented, as is LLVM IR
translation of iterated map entries.

Assisted with Claude Opus 5.5.
DeltaFile
+947-0flang/test/Lower/OpenMP/motion-iterator.f90
+230-0flang/test/Lower/OpenMP/Todo/map-motion-iterator-unsupported-locators.f90
+211-0flang/test/Lower/OpenMP/iterator-ranges.f90
+182-11flang/lib/Lower/OpenMP/ClauseProcessor.cpp
+166-0flang/lib/Lower/OpenMP/Utils.cpp
+81-0flang/test/Lower/OpenMP/Todo/map-iterator-ref-attach.f90
+1,817-1114 files not shown
+2,099-6320 files

LLVM/project a8b3cb7 — lld/MachO InputFiles.h InputFiles.cpp

[lld][MachO] Split ObjFile::parse() and parse extracted archive rounds in parallel

This is part of the ld64.lld performance improvements tracked by
#222068 and #238938.

Currently, parsePendingExtracts() parses each extracted archive member
serially from start to finish, even though section creation, subsection
splitting, local symbol creation, and hashing external symbol names only
touch per-file state.

This change splits ObjFile::parse() into parsePrepare() and
parseFinish(), using makeThreadLocal() for per-file allocations.
parsePendingExtracts() now processes extracted members in rounds,
running parsePrepare() in parallel across each round and parseFinish()
serially in file order.

Locally, this shows a ~4% link-time performance improvement over the
baseline.


    [3 lines not shown]
DeltaFile
+184-82lld/MachO/InputFiles.cpp
+33-4lld/MachO/InputFiles.h
+217-862 files

LLVM/project 2ebb2ae — llvm/lib/Transforms/Utils SimplifyCFG.cpp, llvm/test/Transforms/SimplifyCFG large-switch.ll

[SimplifyCFG] Fix and improve code size check when merging switches into predecessors (#240837)

The function `isValueEqualityComparison` had a surprising check
`incoming_edges * outgoing_edges < 128` to prevent code size explosion.

However it had two issues:

- The function was used in a few places that didn't need the check.
- It only considered `switch`, so conditional `br` wasn't considered.

Move the check to the only place where it's needed, and make it check
conditional `br`s as well. A conditional `br` is not different than a 2-way
switch, so it doesn't make sense to distinguish them.

Also fix the function documentation.

The function becomes easier to understand as it now does what it advertises: if
the instruction is a value equality comparison it returns the value being
compared. (with no surprise checks)

    [7 lines not shown]
DeltaFile
+44-44llvm/test/Transforms/SimplifyCFG/large-switch.ll
+10-8llvm/lib/Transforms/Utils/SimplifyCFG.cpp
+54-522 files

LLVM/project 7702851 — clang/lib/CIR/Dialect/IR CIRDialect.cpp, clang/unittests/CIR ControlFlowTest.cpp

[CIR] Make cir.condition exit to the loop, not to itself

The loop-exit successor of `cir.condition` was
`RegionSuccessor(getOperation())`, which names the condition op instead
of the loop around it. An operation successor names the op that control
resumes after, and the loop's own `getSuccessorRegions` names the loop
for the same edge. MLIR's dataflow analyses use that op. DeadCodeAnalysis
recorded the exit as a predecessor of the point after `cir.condition`, so
dense analyses never saw control leave a `cir.while`, `cir.for` or
`cir.do` without a cleanup region. The forward state after such a loop
kept its initial value, and the backward state at the condition ignored
the code after the loop. The fix names the loop. The control-flow unit
test hid the mismatch because it compared op and terminator successors
by region only. It now compares whole successors, so it fails without
the fix.

Assisted-by: Claude Code (claude-opus-5-5).
DeltaFile
+11-9clang/unittests/CIR/ControlFlowTest.cpp
+1-1clang/lib/CIR/Dialect/IR/CIRDialect.cpp
+12-102 files

LLVM/project 17570c2 — clang/lib/CIR/CodeGen CIRGenBuiltin.cpp, clang/test/CIR/CodeGen amdgpu-frame-address.cpp

[CIR][AMDGPU] Fix address space of __builtin_frame_address result (#233724)
DeltaFile
+29-0clang/test/CIR/CodeGen/amdgpu-frame-address.cpp
+3-2clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp
+32-22 files

LLVM/project 472f39a — lld/MachO SymbolTable.cpp SymbolTable.h

[lld][MachO][NFC] Accept CachedHashStringRef in SymbolTable insertion methods

This is part of the ld64.lld performance improvements tracked by

Currently, SymbolTable::insert() constructs a CachedHashStringRef on the
serial insertion path. This change adds CachedHashStringRef overloads
for insert(), addDefined(), addUndefined(), addCommon(), and
addLazyObject() so callers can pre-hash symbol names in parallel, while
keeping StringRef wrappers for existing callers.

AI use: this change is based off a prototype developed by an LLM.

This commit is output-preserving.
DeltaFile
+33-7lld/MachO/SymbolTable.h
+19-16lld/MachO/SymbolTable.cpp
+52-232 files