LLVM/project 6b130f6clang/test/CXX/drs cwg20xx.cpp, clang/www cxx_dr_status.html

[clang] Add test for CWG 2006 and update status (#215259)

Clang already supports CWG 2006. Adding test cases and updating
`cxx_dr_status.html` to 2.7.

https://cplusplus.github.io/CWG/issues/2006.html

Assisted by Claude.
DeltaFile
+86-0clang/test/CXX/drs/cwg20xx.cpp
+1-1clang/www/cxx_dr_status.html
+87-12 files

LLVM/project 8b6fd97.github/workflows release-binaries.yml

workflows/release-binaries: Install Wix on Windows ARM64 (#217707)

Wix is used for generating the installer and is not installed by default
on Windows ARM64.

(cherry picked from commit f75f48e3ce41227c5a0ae5d2c6d6ea90100b9bc4)
DeltaFile
+8-0.github/workflows/release-binaries.yml
+8-01 files

LLVM/project fb7dcc2clang/lib/Interpreter IncrementalParser.cpp, clang/test/Interpreter extern-c-error-recovery.cpp

[clang-repl] Don't double-remove extern "C" decls from the IdResolver (#218129)

Regression was introduced in https://github.com/llvm/llvm-project/pull/178648

This is required for the 23 release; the downstream tools CppInterOp & Cppyy will fail otherwise.

(cherry picked from commit ec5c9182be2aa168b7c843374c5c7497dd3bef17)
DeltaFile
+63-0clang/test/Interpreter/extern-c-error-recovery.cpp
+9-5clang/lib/Interpreter/IncrementalParser.cpp
+72-52 files

LLVM/project 996c97f.github/workflows release-tasks.yml release-documentation.yml

workflows: Merge release-doxygen into release-documenation (#214366)

These two workflows use the same script and have the same structure,
so it's easier just to have one job that builds both.

(cherry picked from commit 2d47daa636204868874ce88e55992b096904411e)
DeltaFile
+0-130.github/workflows/release-doxygen.yml
+40-13.github/workflows/release-documentation.yml
+0-16.github/workflows/release-tasks.yml
+40-1593 files

LLVM/project 66a285cclang/lib/Format UnwrappedLineFormatter.cpp, clang/unittests/Format FormatTest.cpp

[clang-format] Honor new lines before // clang-format on (#218022)

Fixes #217872.

(cherry picked from commit 6978738e1efe0c33a9540b70697ce0c83852d9c7)
DeltaFile
+8-0clang/unittests/Format/FormatTest.cpp
+2-0clang/lib/Format/UnwrappedLineFormatter.cpp
+10-02 files

LLVM/project 9a30d9bclang-tools-extra/clang-tidy/utils ExceptionAnalyzer.cpp, clang-tools-extra/test/clang-tidy/checkers/bugprone exception-escape-treat-functions-without-specification-as-throwing.cpp exception-escape-coro-unknown.cpp

[clang-tidy] Fix crashes when analyzing unknown exceptions in bugprone-exception-escape (#218067)

`ExceptionAnalyzer` represents exceptions of unknown type with a null
`Type`, but some consumers dereferenced it unconditionally, resulting in
a crash when `TreatFunctionsWithoutSpecificationAsThrowing` is enabled.
This commit fixes the problem by skipping type-dependent processing for
unknown exceptions.

Fixes #217649

(cherry picked from commit c0feba8bedbfda4f1a2f3727f2ef270fcc6ca138)
DeltaFile
+42-0clang-tools-extra/test/clang-tidy/checkers/bugprone/exception-escape-coro-unknown.cpp
+17-1clang-tools-extra/test/clang-tidy/checkers/bugprone/exception-escape-treat-functions-without-specification-as-throwing.cpp
+4-0clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp
+63-13 files

LLVM/project d99278bclang/docs/analyzer checkers.md

Resolve nits from superseeded PR review.
DeltaFile
+5-5clang/docs/analyzer/checkers.md
+5-51 files

LLVM/project fcfc91bclang/lib/Sema SemaRISCV.cpp, clang/test/Sema riscv-rvv-int64-scalar-type.c

[RISCV] Use correct type for (u)int64_t in RVV intrinsics on OpenBSD (#217211)

The intrinsics are documented to use (u)int64_t for 64-bit scalars.

OpenBSD on RV64 uses long long for int64_t while Linux uses long. The
current code finds the first 64 bit type which is long for both OpenBSD
and Linux.

This patch looks up the type that corresponds to (u)int64_t.

Fixes #216531.

Assisted-by: Claude
(cherry picked from commit fd6d7a608909dc4ecea57e0155042d16f7b4e61a)
DeltaFile
+35-0clang/test/Sema/riscv-rvv-int64-scalar-type.c
+16-2clang/lib/Sema/SemaRISCV.cpp
+51-22 files

LLVM/project 190c84fclang/lib/CodeGen CodeGenModule.cpp, clang/test/CodeGenCXX msvc-global-delete-llvm-used.cpp

[clang][win] Fix __global_delete breaking __attribute__((used)) (#217753)

The `__empty_global_delete` fallback introduced in #209585 was marked
used via `llvm::appendToUsed()`, which creates a global named
"llvm.used" during codegen. `CodeGenModule::emitLLVMUsed()` later
unconditionally creates its own global of that same name at end-of-TU,
so the name collision renamed the latter to "llvm.used.1" -- a name LLVM
ignores. The result was that every `__attribute__((used))` global in the
TU silently lost its used semantics whenever a `__global_delete` wrapper
was emitted, letting those symbols be dropped.

Mark the fallback used via `CodeGenModule::addUsedGlobal()` instead, so
it joins the single llvm.used that `emitLLVMUsed()` emits.
`emitLLVMUsed()` runs well after `emitGlobalDeleteForwardingBodies()` in
`Release()`, so the fallback is still recorded in time.

Fixes a regression reported on #209585.

(cherry picked from commit 061865f32607cd064ab944407cc863186702d6f1)
DeltaFile
+17-0clang/test/CodeGenCXX/msvc-global-delete-llvm-used.cpp
+1-1clang/lib/CodeGen/CodeGenModule.cpp
+18-12 files

LLVM/project 692fdd9llvm/lib/Target/Mips MipsSEISelLowering.cpp, llvm/test/CodeGen/Mips/msa buildvector-undef-loop.ll

[Mips] Legalize vector UNDEF instead of expanding to zero BUILD_VECTOR (#211503)

Currently, MIPS MSA expands ISD::UNDEF into a BUILD_VECTOR of all zeros
during legalization. This creates an infinite loop in DAGCombiner when
the following occurs:
1.Mips lower BUILD_VECTOR expands non-splat vectors into
INSERT_VECTOR_ELT with creating undef node
2.Then legalization expands UNDEF back to BUILD_VECTOR zero
3.Mips lower BUILD_VECTOR converts zero vector to BITCAST
4.DAGCombiner optimizes BITCAST(zero) to UNDEF
5.Back to step 2, infinite loop

Fix #210229.

(cherry picked from commit b1c24ea77d2aab84f9e8ccb9389bc4366c41e8dd)
DeltaFile
+37-0llvm/test/CodeGen/Mips/msa/buildvector-undef-loop.ll
+1-0llvm/lib/Target/Mips/MipsSEISelLowering.cpp
+38-02 files

LLVM/project c935849clang/docs/analyzer checkers.md

[analyzer][docs] Add documentation for the UseAfterLifetimeEnd checker
DeltaFile
+59-0clang/docs/analyzer/checkers.md
+59-01 files

LLVM/project 42f085ellvm/lib/Target/SPIRV SPIRVStructurizerWrapper.h SPIRVPrepareFunctions.h

[𝘀𝗽𝗿] changes to main this commit is based on

Created using spr 1.3.7

[skip ci]
DeltaFile
+110-0llvm/lib/Target/SPIRV/SPIRV.h
+0-34llvm/lib/Target/SPIRV/SPIRVFinalizeShaderLinkage.h
+0-29llvm/lib/Target/SPIRV/SPIRVStructurizerWrapper.h
+0-29llvm/lib/Target/SPIRV/SPIRVPrepareFunctions.h
+0-29llvm/lib/Target/SPIRV/SPIRVLegalizeZeroSizeArrays.h
+0-29llvm/lib/Target/SPIRV/SPIRVLegalizePointerCast.h
+110-15024 files not shown
+145-38830 files

LLVM/project 21b1551llvm/lib/Target/SPIRV SPIRVStructurizerWrapper.h SPIRVPrepareFunctions.h

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+199-0llvm/lib/Target/SPIRV/SPIRVCodeGenPassBuilder.cpp
+110-0llvm/lib/Target/SPIRV/SPIRV.h
+0-34llvm/lib/Target/SPIRV/SPIRVFinalizeShaderLinkage.h
+0-29llvm/lib/Target/SPIRV/SPIRVStructurizerWrapper.h
+0-29llvm/lib/Target/SPIRV/SPIRVPrepareFunctions.h
+0-29llvm/lib/Target/SPIRV/SPIRVLegalizeZeroSizeArrays.h
+309-12127 files not shown
+352-39333 files

LLVM/project 81f6f8dclang/lib/ScalableStaticAnalysis/SourceTransformation/Transformations CppBoundedBuffers.cpp, clang/unittests/ScalableStaticAnalysis/SourceTransformation CppBoundedBuffersTest.cpp

fix

Created using spr 1.3.7
DeltaFile
+1,629-90llvm/test/CodeGen/AArch64/early-ifcvt-load-to-cond-br.mir
+672-0clang/unittests/ScalableStaticAnalysis/SourceTransformation/CppBoundedBuffersTest.cpp
+611-0clang/lib/ScalableStaticAnalysis/SourceTransformation/Transformations/CppBoundedBuffers.cpp
+46-333llvm/lib/Target/RISCV/RISCVExpandPseudoInsts.cpp
+359-0llvm/test/Transforms/SLPVectorizer/X86/interchangeable-cmp-predicates.ll
+163-175llvm/lib/Target/RISCV/RISCVExpandAtomicPseudoInsts.cpp
+3,480-598241 files not shown
+8,470-1,933247 files

LLVM/project 2fc1875clang/lib/ScalableStaticAnalysis/SourceTransformation/Transformations CppBoundedBuffers.cpp, clang/unittests/ScalableStaticAnalysis/SourceTransformation CppBoundedBuffersTest.cpp

[𝘀𝗽𝗿] changes introduced through rebase

Created using spr 1.3.7

[skip ci]
DeltaFile
+1,629-90llvm/test/CodeGen/AArch64/early-ifcvt-load-to-cond-br.mir
+672-0clang/unittests/ScalableStaticAnalysis/SourceTransformation/CppBoundedBuffersTest.cpp
+611-0clang/lib/ScalableStaticAnalysis/SourceTransformation/Transformations/CppBoundedBuffers.cpp
+46-333llvm/lib/Target/RISCV/RISCVExpandPseudoInsts.cpp
+359-0llvm/test/Transforms/SLPVectorizer/X86/interchangeable-cmp-predicates.ll
+163-175llvm/lib/Target/RISCV/RISCVExpandAtomicPseudoInsts.cpp
+3,480-598240 files not shown
+8,469-1,932246 files

LLVM/project e124e31llvm/lib/Target/SPIRV SPIRVPassRegistry.def

[SPIRV] Alphabetize SPIRVPassRegistry Passes

To be consistent with other targets.

Reviewers: thurstond

Pull Request: https://github.com/llvm/llvm-project/pull/218199
DeltaFile
+2-2llvm/lib/Target/SPIRV/SPIRVPassRegistry.def
+2-21 files

LLVM/project 2adf5adllvm/lib/Target/AMDGPU SIFoldOperands.cpp, llvm/test/CodeGen/AMDGPU omod.ll

[AMDGPU] Simplify immediate checking and cleanup in omod folding. NFC (#218217)

The key changes are:

1. Replace std::pair() with brace initialization {}
2. Simplify immediate operand detection: Instead of checking both Src0
and Src1 to find which one is immediate, we now use
getImmOrMaterializedImm on Src1 directly, since after canonicalization
the immediate is always in Src1.
3. Extract the register into a variable (OModSrcReg) for better
readability

The new tests cover cases where the immediate appears first in the IR
(e.g., 4.0 * %add), which after DAG canonicalization becomes (%add *
4.0), ensuring the immediate is always in the second operand position.
These tests verify that omod folding works correctly after
canonicalization.

No functional change intended.
DeltaFile
+106-0llvm/test/CodeGen/AMDGPU/omod.ll
+17-20llvm/lib/Target/AMDGPU/SIFoldOperands.cpp
+123-202 files

LLVM/project 426142ellvm/docs LangRef.md

[LangRef] Fix code examples for fptosi/fptoui (V2) (#218143)

Address comment
https://github.com/llvm/llvm-project/pull/218121#discussion_r3836372632.
This patch also adds more cases covering both overflowing and rounding.

The result is verified with llubi.
DeltaFile
+10-6llvm/docs/LangRef.md
+10-61 files

LLVM/project 5ebddd1llvm/include/llvm/IR Instruction.h, llvm/lib/IR Instruction.cpp

[IR] Remove deprecated Instruction*-based insertBefore/moveBefore overloads (#218234)

Remove the deprecated Instruction::insertBefore(Instruction*),
moveBefore(Instruction*), and moveBeforePreserving(Instruction*)
overloads in favour of the iterator-accepting overloads.

Co-authored-by: Claude <noreply at anthropic.com>
DeltaFile
+0-29llvm/include/llvm/IR/Instruction.h
+0-12llvm/lib/IR/Instruction.cpp
+0-412 files

LLVM/project a454a3clibc/src/__support frac64.h, libc/src/__support/math expf_integer_eval.h

[libc][math] Integer-only, statically rounded implementation of expf (#209406)

Integer-only, statically rounded implementation of `expf`, using 1
single `Frac64`-based pipeline

# Accuracy

All unit, smoke, and exhaustive tests against
`LIBC_NAMESPACE::shared::expf` pass for all rounding modes.

# Code size:

> [!NOTE]
> The report below are from the`armv8m.main-none-eabi` triple.

## Before the patch

```sh
$ ls -lB libc/src/math/generic/CMakeFiles/libc.src.math.generic.expf.dir/

    [68 lines not shown]
DeltaFile
+284-0libc/src/__support/math/expf_integer_eval.h
+230-0libc/test/src/math/exhaustive/exhaustive_test_static_rounding.h
+133-0libc/test/src/math/expf_static_rounding_test.cpp
+62-0libc/test/src/math/smoke/expf_static_rounding_test.cpp
+58-0libc/src/__support/frac64.h
+39-0libc/test/src/math/exhaustive/expf_static_rounding_test.cpp
+806-011 files not shown
+949-617 files

LLVM/project fe9cfd8llvm/lib/Transforms/Vectorize SLPVectorizer.cpp, llvm/test/Transforms/SLPVectorizer/X86 broadcast.ll splat-gather-operands.ll

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+45-127llvm/test/Transforms/SLPVectorizer/X86/splat-gather-operands.ll
+69-0llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+2-4llvm/test/Transforms/SLPVectorizer/X86/broadcast.ll
+116-1313 files

LLVM/project 7b776eellvm/include/llvm/Transforms/Utils Local.h, llvm/lib/Transforms/Utils Local.cpp

[Transforms] Remove unused replaceDbgUsesWithUndef (#218215)

The last use was removed on Mar 5, 2026 in
commit e3b62ffcd8592cf234174057b4581adb1eecbf9c.
DeltaFile
+0-8llvm/lib/Transforms/Utils/Local.cpp
+0-6llvm/include/llvm/Transforms/Utils/Local.h
+0-142 files

LLVM/project 22fa9a0llvm/test/Transforms/SLPVectorizer/X86 splat-gather-operands.ll

[SLP][NFC]Add tests with missed vectorization candidates, NFC



Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/218247
DeltaFile
+336-0llvm/test/Transforms/SLPVectorizer/X86/splat-gather-operands.ll
+336-01 files

LLVM/project a92b65bllvm/lib/Transforms/Scalar ConstraintElimination.cpp, llvm/test/Transforms/ConstraintElimination induction-condition-in-loop-exit-postinc.ll monotonic-int-phis-decrement.ll

[ConstraintElim] Bound non-increasing header IVs by start value. (#217921)

Generalize addLowerBoundsForHeaderInductions to also support bounding
decrementing IVs: if the IV gets decremented w/o wapping in the signed
sense, it will never exceed the start value and we can add PN s<=
StartValue.

This helps to remove a number of branches in real-world workloads:
https://github.com/dtcxzyw/llvm-opt-benchmark-nightly/pull/984

Note that in a few instances (found 2), the removed branches result in
flags dropped. We should be able to recover those (and more) by using
info from ConstrantElimination to strengthen flags.

Alive2 Proof: https://alive2.llvm.org/ce/z/7t_xHX

PR: https://github.com/llvm/llvm-project/pull/217921
DeltaFile
+292-4llvm/test/Transforms/ConstraintElimination/monotonic-int-phis-decrement.ll
+61-39llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
+54-0llvm/test/Transforms/PhaseOrdering/constraint-eliminiation-interactions.ll
+2-4llvm/test/Transforms/ConstraintElimination/induction-condition-in-loop-exit-postinc.ll
+409-474 files

LLVM/project 9742b7ellvm/lib/Transforms/Vectorize SLPVectorizer.cpp, llvm/lib/Transforms/Vectorize/SLPVectorizer SLPCompatibilityAnalysis.h SLPCompatibilityAnalysis.cpp

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+222-0llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPCompatibilityAnalysis.cpp
+24-54llvm/test/Transforms/SLPVectorizer/X86/interchangeable-cmp-predicates.ll
+53-4llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+52-0llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPCompatibilityAnalysis.h
+351-584 files

LLVM/project 9099eefllvm/lib/Analysis ScalarEvolution.cpp

[SCEV] Use getUnsignedOverflowLimit at a site (NFC) (#217395)
DeltaFile
+5-7llvm/lib/Analysis/ScalarEvolution.cpp
+5-71 files

LLVM/project 0976d75libunwind/test aarch64_za_unwind.pass.cpp ra_sign_state.pass.cpp

[libunwind] Make Apple OS version XFAILs robust to patch-level versions (#218125)

We are seeing some failures since some of the Apple CI runners have been
updated to 26.5.2. That was caused by the regular expressions not
matching patch level version bumps.
DeltaFile
+2-2libunwind/test/ra_sign_state.pass.cpp
+1-1libunwind/test/aarch64_za_unwind.pass.cpp
+3-32 files

LLVM/project 20826ccllvm/lib/CodeGen EarlyIfConversion.cpp, llvm/test/CodeGen/AArch64 early-ifcvt-load-to-cond-br-limit.mir early-ifcvt-load-to-cond-br.mir

[EarlyIfConversion] Extend data dependent analysis across multiple blocks (#180623)

This extends the new data dependent analysis for branches to cover loads
which feed conditions which are not within the same Machine Basic Block.
To still try to catch loads which are "close in program time" we
limit on the number of instructions between the branch and the
load. We also bail out if we detect a function call or loop between the two
instructions.
DeltaFile
+1,629-90llvm/test/CodeGen/AArch64/early-ifcvt-load-to-cond-br.mir
+161-27llvm/lib/CodeGen/EarlyIfConversion.cpp
+186-0llvm/test/CodeGen/AArch64/early-ifcvt-load-to-cond-br-limit.mir
+1,976-1173 files

LLVM/project 294c9c8mlir/lib/Dialect/SCF/Transforms LoopSpecialization.cpp, mlir/test/Dialect/SCF for-loop-peeling.mlir

[mlir][SCF] Skip dynamic peeling for non-index loops (#217909)

`scf-for-loop-peeling` constructs an `affine.apply` on its dynamic path
to compute the split bound. However, `affine.apply` requires `index`
operands, while `scf.for` also permits signless integer induction
variables and bounds.

Skip the dynamic peeling path when the loop induction variable is not
`index`. The existing constant-bounds path remains unchanged, so
constant integer loops can still be peeled.

Add a regression test for a loop with dynamic `i32` bounds, verifying
that the pass leaves it unchanged rather than producing invalid IR.

Fixes #216631.

Co-authored-by: Purnima Shrivastava <purnimashrivastava05@.com>
DeltaFile
+22-0mlir/test/Dialect/SCF/for-loop-peeling.mlir
+7-0mlir/lib/Dialect/SCF/Transforms/LoopSpecialization.cpp
+29-02 files

LLVM/project 8132d4dmlir/lib/Dialect/SCF/Utils Utils.cpp, mlir/test/Dialect/SCF loop-unroll.mlir

[mlir][scf] Do not read non-constant loop bounds when unrolling (#217392)

`loopUnrollByFactor` asserts `expected constant loop bound`
(`SCF/Utils/Utils.cpp`) when the loop bounds are not constant.
`getStaticTripCount` takes the constant path whenever
`constantTripCount` answers, but `constantTripCount` answers on three
shapes where the bounds themselves are **not** constant:

- `lb == ub` (same `Value`), giving 0 iterations,
- `lb == 0` and `ub == step`, giving 1 iteration,
- `ub` a constant offset from a non-constant `lb`, via
`computeUbMinusLb` under `nsw`.

In all three the code then reads the bounds as constants and asserts.

The fix takes the constant path only when `lb`, `ub` and `step` are all
constant, and otherwise falls through to the dynamic path that already
handles them. The other two callers of `getStaticTripCount` in that file
use only the count, never the bounds, so the defect is confined to this

    [4 lines not shown]
DeltaFile
+60-0mlir/test/Dialect/SCF/loop-unroll.mlir
+10-0mlir/lib/Dialect/SCF/Utils/Utils.cpp
+70-02 files