LLVM/project a23733e — llvm/lib/TargetParser RISCVISAInfo.cpp, llvm/unittests/TargetParser RISCVISAInfoTest.cpp

[RISC-V] Reject invalid/unversioned extensions in parseNormalizedArchString (#233683)

RISCVISAInfo::parseNormalizedArchString only checked that the first
character after 'rv32'/'rv64' was 'i' or 'e'. This allowed strings like
rv32im2p0 (missing the version number for i) to be misparsed as enabling
the "im" extension. It also allowed strings that contained both 'i' and 'e',
which should not be allowed. Fix this to reject single-letter extensions
without a version number and any conflicting base ISAs appearing later in
the normalized arch string.

Reported-By: Jessica Clarke in PR #227865
Assisted-by: AI tooling (added more tests)
Pull-Request: https://github.com/llvm/llvm-project/pull/233683
DeltaFile
+32-0llvm/unittests/TargetParser/RISCVISAInfoTest.cpp
+16-1llvm/lib/TargetParser/RISCVISAInfo.cpp
+48-12 files

LLVM/project cd14898 — llvm/test/Transforms/SLPVectorizer/RISCV gather-gep-different-bases-cost.ll, llvm/test/Transforms/SLPVectorizer/X86 reduction-gather-root-loop-scale.ll

[SLP][NFC]Add tests for non-profitable vectorizations, NFC



Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/233952
DeltaFile
+117-0llvm/test/Transforms/SLPVectorizer/X86/reduction-gather-root-loop-scale.ll
+91-0llvm/test/Transforms/SLPVectorizer/RISCV/gather-gep-different-bases-cost.ll
+208-02 files

LLVM/project acda042 — third-party/unittest CMakeLists.txt, third-party/unittest/googletest/src gtest-port.cc

[SystemZ][z/OS] Turn on auto-conversion for captured steams in googletest (#233829)

This patch uses fcntl to turn on auto-conversion for captured streams in
googletest to fix the encoding issues seen when running the clang/llvm
unittests on the z/OS staging buildbot
DeltaFile
+12-1third-party/unittest/googletest/src/gtest-port.cc
+5-0third-party/unittest/CMakeLists.txt
+17-12 files

LLVM/project 7af2b7e — llvm/lib/Target/AArch64 MachineSMEABIPass.cpp, llvm/test/CodeGen/AArch64 win-alloca.ll

[AArch64] Address review feedback on UEFI dynamic stack allocation

Include UEFI in the MachineSMEABI lazy ZA save assertion message and add
an -O0 run line for aarch64-unknown-uefi in win-alloca.ll to exercise the
GlobalISel dynamic alloca fallback.

Assisted-by: Claude
DeltaFile
+1-1llvm/lib/Target/AArch64/MachineSMEABIPass.cpp
+1-0llvm/test/CodeGen/AArch64/win-alloca.ll
+2-12 files

LLVM/project a1c9008 — clang/test/CodeGenOpenCL builtins-amdgcn-swmmac-w32-gfx1250-err.cl, llvm/test/CodeGen/AMDGPU llvm.amdgcn.sched.group.barrier.gfx12.ll llvm.amdgcn.sched.group.barrier.gfx1250.ll

[AMDGPU][MC] Remove SWMMAC opcodes not supported by gfx1250 (#233883)

Fixes LCOMPILER-3009.
DeltaFile
+255-0llvm/test/CodeGen/AMDGPU/llvm.amdgcn.sched.group.barrier.gfx1250.ll
+0-122llvm/test/CodeGen/AMDGPU/llvm.amdgcn.sched.group.barrier.gfx12.ll
+55-0llvm/test/MC/AMDGPU/gfx1251_err.s
+44-0llvm/test/MC/AMDGPU/gfx1250-strict_err.s
+35-0llvm/test/MC/AMDGPU/gfx1250_asm_unsupported.s
+32-0clang/test/CodeGenOpenCL/builtins-amdgcn-swmmac-w32-gfx1250-err.cl
+421-1221 files not shown
+421-1257 files

LLVM/project b537630 — bolt README.md

[BOLT] Update BOLT README (#233376)

This patch makes minor changes to the main BOLT README, adding alerts to
make notes, tips and important information more clear to a reader.
DeltaFile
+16-11bolt/README.md
+16-111 files

LLVM/project e0777c6 — llvm/test/CodeGen/AMDGPU local-atomicrmw-fadd.ll

[AMDGPU] Test LDS atomic fadd with GlobalISel

Follow-up to #233930. The LDS atomicrmw fadd expansion is decided in
AtomicExpand, ahead of both instruction selectors, but
local-atomicrmw-fadd.ll only covered SelectionDAG. Add GlobalISel run
lines for gfx13, gfx12 and gfx942, sharing check prefixes between the
two selectors.

Change-Id: I6569643bd018869c8120459b4beeda40f3f2d2db
Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+3,255-1,362llvm/test/CodeGen/AMDGPU/local-atomicrmw-fadd.ll
+3,255-1,3621 files

LLVM/project 39636b7 — llvm/lib/Target/AMDGPU GCNSubtarget.h SIISelLowering.cpp, llvm/test/CodeGen/AMDGPU local-atomicrmw-fadd.ll

[AMDGPU] Fix LDS f64 atomic fadd on gfx1310 (#233930)

gfx1310 has `GFX1250Insts` but no `ds_add_f64`, so `AtomicExpand` left
LDS `atomicrmw fadd double` unexpanded and instruction selection failed.

Query the `lds-atomic-add-f64` feature instead, which already guards the
`DS_ADD_F64` patterns and the GlobalISel legalizer. gfx1310 now expands
to a `ds_cmpstore_rtn_b64 loop`.
DeltaFile
+1,124-0llvm/test/CodeGen/AMDGPU/local-atomicrmw-fadd.ll
+2-2llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+0-3llvm/lib/Target/AMDGPU/GCNSubtarget.h
+1,126-53 files

LLVM/project 600d8d7 — lldb/docs/resources lldbdap-contributing.md lldbdap-extensions.md, lldb/docs/use lldbdap.md

[lldb-dap] Document lldb-dap extensions (#233529)

lldb-dap extensions to the protocol has increased, there is no way to
know about this extensions without reading the source code or looking at
the adapter logs.

Add documentation specifying the requests and the additional properties
lldb-dap adds to standard DAP messages.
DeltaFile
+238-0lldb/docs/resources/lldbdap-extensions.md
+5-3lldb/docs/resources/lldbdap-contributing.md
+4-0lldb/docs/use/lldbdap.md
+247-33 files

LLVM/project 573fc50 — llvm/lib/CodeGen/GlobalISel CombinerHelper.cpp, llvm/test/CodeGen/AArch64 fsh.ll overflow-vec.ll

feat(gisel): Mirror trunc/xor/select demanded bits

Extend scalar demanded-bits simplification to G_TRUNC, G_XOR, and
G_SELECT, following SelectionDAG traversal, known-bit propagation,
shared-use handling, and final folds. Honor GISel legality and target
profitability when rewriting or narrowing operations.

Share AArch64's logical-immediate search through a narrow XOR hook and
adapt XOR/shift profitability queries for both selectors. Preserve
SelectionDAG's constant-shrinking interface and node construction.

Share shift-amount validation in CodeGenCommonISel using templated
callbacks for selector-specific lane access and KnownBits queries.

Preserve recursive constant bypasses and use-specific rewrites of shared
producers. Recognize constants at the analysis depth limit, matching
SelectionDAG, and retain KnownBits-based bypasses as a fallback.

Cover AArch64 and AMDGPU with focused MIR and codegen tests, including
shared mask chains, SELECT arms, and depth-limited XOR bypasses.
DeltaFile
+1,302-0llvm/test/CodeGen/AArch64/GlobalISel/combine-simplify-demanded-bits-trunc-xor-select.mir
+508-508llvm/test/CodeGen/AArch64/overflow-vec.ll
+365-365llvm/test/CodeGen/AMDGPU/GlobalISel/fshl.ll
+333-29llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp
+159-172llvm/test/CodeGen/AArch64/fsh.ll
+159-168llvm/test/CodeGen/AMDGPU/GlobalISel/extractelement.ll
+2,826-1,24236 files not shown
+3,628-1,88442 files

LLVM/project 5758d8e — libcxx/cmake/caches Generic-llvm-libc.cmake

[libcxx][libc] add missing flag to libc config (#233935)

Under some configs I was getting errors from missing the flag to not
build scudo standalone as a shared library. Add that flag.
DeltaFile
+1-0libcxx/cmake/caches/Generic-llvm-libc.cmake
+1-01 files

LLVM/project 7af19b7 — llvm/test/CodeGen/AMDGPU local-atomicrmw-fadd.ll

[AMDGPU] Test LDS atomic fadd with GlobalISel

Follow-up to #233930. The LDS atomicrmw fadd expansion is decided in
AtomicExpand, ahead of both instruction selectors, but
local-atomicrmw-fadd.ll only covered SelectionDAG. Add GlobalISel run
lines for gfx13, gfx12 and gfx942, sharing check prefixes between the
two selectors.

Change-Id: I6569643bd018869c8120459b4beeda40f3f2d2db
Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+3,255-1,362llvm/test/CodeGen/AMDGPU/local-atomicrmw-fadd.ll
+3,255-1,3621 files

LLVM/project 07c0465 — clang/lib/Format UnwrappedLineParser.cpp, clang/unittests/Format BracesInserterTest.cpp

[clang-format] Fix InsertBraces inserting braces around directives (#224947)

Skip brace insertion when the pair would enclose preprocessor
directives, avoiding unmatched braces across conditional branches.

This also leaves bodies containing balanced directives unbraced, even
where insertion previously produced valid code, consistent with the
documented behavior.

Fixes #224942.
DeltaFile
+45-0clang/unittests/Format/BracesInserterTest.cpp
+19-2clang/lib/Format/UnwrappedLineParser.cpp
+64-22 files

LLVM/project 9d8c049 — clang/include/clang/CIR/Dialect/IR CIROps.td, clang/lib/CIR/Dialect/IR CIRDialect.cpp CIRTypes.cpp

[CIR] Admit only CIR types as nested CIR types

FuncType::verify required every type reachable from a signature to be a
CIR type, and proved it with a deep walk on every !cir.func construction.
#232863 memoized the walk in the dialect behind a mutex, but a record
that is still incomplete cannot be cached, and during CIRGen most of them
are.

The walk was needed because !cir.ptr, !cir.array, !cir.data_member,
!cir.bitfield and the record types took unconstrained mlir::Type
parameters. Constrain them to CIR types instead. Each type then checks
only its own parameters, a CIR type holds only CIR types at any depth,
and FuncType::verify checks only its inputs and result. The walk, the
cache and the mutex go away.

- Pointee, array element and data member types use a new
  CIR_DialectType constraint.
- Bit-field storage, record members and union padding are checked in
  their verifiers.

    [17 lines not shown]
DeltaFile
+111-0clang/unittests/CIR/RecordTypeVerifyTest.cpp
+55-0clang/test/CIR/IR/invalid-nested-types.cir
+36-14clang/lib/CIR/Dialect/IR/CIRTypes.cpp
+21-21clang/include/clang/CIR/Dialect/IR/CIROps.td
+0-34clang/test/CIR/IR/invalid-func.cir
+1-28clang/lib/CIR/Dialect/IR/CIRDialect.cpp
+224-977 files not shown
+271-12413 files

LLVM/project f758b4e — clang/lib/CIR/CodeGen CIRGenExprScalar.cpp, clang/test/CIR/CodeGen spirv-intel-fn-ptr-cast.c

[CIR] Cast address spaces in pointer bitcasts (#233828)

Casts between function and object pointers failed CIR verification on
targets with a separate program address space, like spirv64-intel
DeltaFile
+28-0clang/test/CIR/CodeGen/spirv-intel-fn-ptr-cast.c
+8-1clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp
+36-12 files

LLVM/project 4537fdf — llvm/lib/Target/Mips MicroMips32r6InstrInfo.td MipsInstrInfo.td, llvm/lib/Target/Mips/AsmParser MipsAsmParser.cpp

[Mips] Split memory operands into base registers and offsets (#228738)

Mips memory instructions have accumulated many custom decoders to unpack
base registers and offsets, handle scaling, and account for instruction
variants. Treating the address as one compound operand duplicates work
that TableGen can generate from separate fields and spreads special
cases across the parser, encoder, decoder, and printer.

Parse memory offsets and parenthesized base registers as separate
operands and describe their encoding fields independently in TableGen.
Replace packed memory encoders, decoders, and printers with
operand-level helpers, including support for scaled offsets and variable
register lists.

Keep compound address operands for la/dla and use the common expression
parser for memory offsets. This is largely NFC, with fixes to expression
evaluation order reflected in the updated tests and slightly improved
error messages.

Assisted-by: OpenAI Codex
DeltaFile
+37-523llvm/lib/Target/Mips/Disassembler/MipsDisassembler.cpp
+220-238llvm/lib/Target/Mips/MicroMipsInstrInfo.td
+114-219llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
+179-143llvm/lib/Target/Mips/MipsInstrInfo.td
+13-176llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp
+53-58llvm/lib/Target/Mips/MicroMips32r6InstrInfo.td
+616-1,35735 files not shown
+1,047-1,72941 files

LLVM/project 3bf2ea2 — llvm/lib/Transforms/Vectorize SLPVectorizer.cpp, llvm/test/Transforms/SLPVectorizer/AArch64 poor-throughput-select-call.ll

[SLP]Do not seed calls used only as select operands

The vector library call handles the values rejected by the select
condition on its slow path, the scalar call returns early.
Fixes the slowdown from #231130, reported in https://github.com/llvm/llvm-project/pull/231130#issuecomment-6296363923

Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/233936
DeltaFile
+16-22llvm/test/Transforms/SLPVectorizer/AArch64/poor-throughput-select-call.ll
+8-0llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+24-222 files

LLVM/project 6b7a9ef — llvm/test/Transforms/SLPVectorizer/AArch64 poor-throughput-select-call.ll

[SLP][NFC]Add a test with non-profitable vectorization, NFC



Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/233933
DeltaFile
+187-0llvm/test/Transforms/SLPVectorizer/AArch64/poor-throughput-select-call.ll
+187-01 files

LLVM/project 7623b85 — llvm/lib/Target/AMDGPU SIInstructions.td, llvm/test/CodeGen/AMDGPU llvm.amdgcn.make.buffer.rsrc.ll

[AMDGPU] Fix matching of a readfirstlane GCNPat (#233914)
DeltaFile
+24-40llvm/test/CodeGen/AMDGPU/llvm.amdgcn.make.buffer.rsrc.ll
+3-5llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-amdgcn.readfirstlane.mir
+1-1llvm/lib/Target/AMDGPU/SIInstructions.td
+28-463 files

LLVM/project ef39119 — llvm/lib/Target/AMDGPU SIISelLowering.cpp

Apply suggestion from @chinmaydd
DeltaFile
+1-1llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+1-11 files

LLVM/project d1489ed — lldb/include/lldb/Symbol ObjectFile.h, lldb/source/Plugins/SymbolFile/DWARF SymbolFileDWARFDebugMap.cpp

[lldb] Remove ConstString from ObjectFile (#232553)

The last remaining user in the base ObjectFile class was
SplitArchivePathWithObject.
DeltaFile
+12-10lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
+9-6lldb/source/Symbol/ObjectFile.cpp
+4-3lldb/include/lldb/Symbol/ObjectFile.h
+25-193 files

LLVM/project 008cd23 — llvm/test/CodeGen/AMDGPU tail-call-inreg-arguments.waterfall.ll branch-folding-implicit-def-subreg.ll

ProcessImplicitDefs: Erase physreg implicit_def with no live out use (#233910)

Instead of setting the dead flag, just erase the instruction. Also
stop doing this if !tracksRegLiveness, though I don't really
understand this option.
DeltaFile
+45-155llvm/test/CodeGen/AMDGPU/global_atomics_scan_fsub.ll
+45-155llvm/test/CodeGen/AMDGPU/global_atomics_scan_fadd.ll
+27-87llvm/test/CodeGen/AMDGPU/global_atomics_scan_fmin.ll
+27-87llvm/test/CodeGen/AMDGPU/global_atomics_scan_fmax.ll
+46-48llvm/test/CodeGen/AMDGPU/branch-folding-implicit-def-subreg.ll
+29-33llvm/test/CodeGen/AMDGPU/tail-call-inreg-arguments.waterfall.ll
+219-56530 files not shown
+302-69536 files

LLVM/project c771378 — llvm/utils extract_symbols.py

[extract_symbols] Cap worker pool size on Windows (#233608)

On Windows with >61 cores (Python <= 3.11), multiprocessing.Pool()
exceeds the 63-handle limit in _winapi.WaitForMultipleObjects (N worker
handles + 2 internal pipe handles). This crashes Pool._handle_workers
with ValueError before it sends the termination sentinel to taskqueue,
causing Pool._terminate_pool to deadlock in task_handler.join() at exit.
    
Cap the worker count to at most 60 on Windows and at most len(libs) on
all platforms, and join the pool after collecting results.
DeltaFile
+13-2llvm/utils/extract_symbols.py
+13-21 files

LLVM/project 9684bf5 — llvm/lib/Target/AMDGPU SIISelLowering.cpp GCNSubtarget.h, llvm/test/CodeGen/AMDGPU local-atomicrmw-fadd.ll

[AMDGPU] Fix LDS f64 atomic fadd on gfx1310

hasLDSFPAtomicAddF64() keyed on GFX90AInsts or GFX1250Insts. gfx1310
has GFX1250Insts but no ds_add_f64, so AtomicExpand left LDS
atomicrmw fadd double unexpanded and instruction selection failed.

Query the lds-atomic-add-f64 feature instead, which already guards the
DS_ADD_F64 patterns and the GlobalISel legalizer. gfx1310 now expands
to a ds_cmpstore_rtn_b64 loop.

Change-Id: I891ff50e648ac5305cd7a594ea3fcce5e3411df4
Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+1,124-0llvm/test/CodeGen/AMDGPU/local-atomicrmw-fadd.ll
+0-3llvm/lib/Target/AMDGPU/GCNSubtarget.h
+1-1llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+1,125-43 files

LLVM/project 5043426 — clang/test/OpenMP target_codegen.cpp parallel_for_simd_codegen.cpp

[clang][OpenMP] Emit host diagnostics that were deferred and never flushed (#220316)

Fixes #147515.

Please review commit by commit. The last three commits only regenerate
`threadprivate_codegen.cpp`, `single_codegen.cpp` and
`target_parallel_generic_loop_codegen-1.cpp` for the new emission order.
They are about
3,700 of the 4,300 changed lines.

## The bug

```c++
// t.cpp
void foo();

int f() {
  try {
    foo();

    [121 lines not shown]
DeltaFile
+1,097-1,121clang/test/OpenMP/threadprivate_codegen.cpp
+466-466clang/test/OpenMP/single_codegen.cpp
+379-369clang/test/OpenMP/target_parallel_generic_loop_codegen-1.cpp
+70-70clang/test/OpenMP/parallel_master_taskloop_simd_codegen.cpp
+45-45clang/test/OpenMP/parallel_for_simd_codegen.cpp
+29-29clang/test/OpenMP/target_codegen.cpp
+2,086-2,10017 files not shown
+2,252-2,22323 files

LLVM/project b4caacb — flang/test/Lower/OpenMP metadirective-user.f90

Add a three-way runtime condition tie to the tests

The first WHEN clause is a strict subset of the third, which ties with the
second. Clause order then tests `b` first, and TASKYIELD is never
selected.
DeltaFile
+29-0flang/test/Lower/OpenMP/metadirective-user.f90
+29-01 files

LLVM/project 404b806 — flang/test/Lower/OpenMP metadirective-user.f90, llvm/lib/Frontend/OpenMP OMPContext.cpp

Compare the condition of an unguarded match_any candidate

A match_any WHEN clause with a runtime condition also gets a candidate
without the condition, since its other traits can still match. That
candidate has no condition trait, so isStrictSubset skipped the key
check, and it became a subset of a WHEN clause with a different
condition. The key is now compared whenever it is set.
DeltaFile
+35-0flang/test/Lower/OpenMP/metadirective-user.f90
+14-0llvm/unittests/Frontend/OpenMPContextTest.cpp
+3-0llvm/lib/Frontend/OpenMP/OMPContext.cpp
+52-03 files

LLVM/project 6358fe2 — flang/lib/Semantics openmp-utils.cpp, flang/test/Lower/OpenMP metadirective-user.f90

[flang][OpenMP] Don't treat different runtime conditions as subsets

When two METADIRECTIVE candidates have the same score and one selector is
a strict subset of the other, the superset wins. Flang ranks every
runtime condition with the same property, so isStrictSubset saw
different conditions as the same:

  !$omp metadirective &
  !$omp& when(user={condition(a)}, &
  !$omp&      implementation={vendor(score(4): llvm)}: taskyield) &
  !$omp& when(user={condition(b)}, device={kind(host)}, &
  !$omp&      implementation={vendor(score(3): llvm)}: taskwait)

Both candidates score 5, and `b` was tested first, so TASKWAIT ran when
both conditions were true. Neither selector is a subset of the other, so
clause order should decide.

This patch adds a UserCondition key to VariantMatchInfo, and
isStrictSubset requires equal keys when the first selector has a

    [14 lines not shown]
DeltaFile
+224-0flang/test/Lower/OpenMP/metadirective-user.f90
+42-3flang/lib/Semantics/openmp-utils.cpp
+37-0llvm/unittests/Frontend/OpenMPContextTest.cpp
+7-0llvm/lib/Frontend/OpenMP/OMPContext.cpp
+4-0llvm/include/llvm/Frontend/OpenMP/OMPContext.h
+314-35 files

LLVM/project 9e5738a — llvm/test/CodeGen/ARM/Windows trap-unreachable.ll, llvm/test/CodeGen/X86 windows-trap-unreachable.ll

ARM, X86: Test code after noreturn calls against the exception model (#232334)

Add ARM and X86 versions of the AArch64 windows-trap-unreachable test
from #229681

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+24-0llvm/test/CodeGen/X86/windows-trap-unreachable.ll
+23-0llvm/test/CodeGen/ARM/Windows/trap-unreachable.ll
+47-02 files

LLVM/project a8ecdff — llvm/lib/Transforms/IPO AttributorAttributes.cpp, llvm/test/Transforms/Attributor align.ll noundef-return-poison-attrs.ll

Attributor: Deduce noundef returns if poison-generating attributes hold

Instead of giving up on noundef for returns with poison-generating
attributes, check that the attributes are assumed to hold for all
returned values. This uses the Attributor's own deductions for the
returned values (AANonNull, AAAlign, AAValueConstantRange and
AANoFPClass), so e.g. a range only known from a callee is enough.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+207-15llvm/test/Transforms/Attributor/noundef-return-poison-attrs.ll
+61-9llvm/lib/Transforms/IPO/AttributorAttributes.cpp
+1-1llvm/test/Transforms/Attributor/align.ll
+269-253 files