LLVM/project 5c56ffe — llvm/test/Transforms/IndVarSimplify implied-nonneg-from-unsigned-bound.ll

[SCEV][IndVars][NFC] Add tests for x >=s 0 from x <u y and y <=u 2^(n-1)

Let n be the bit width of x and y. If x <u y and y <=u 2^(n-1), then
x >=s 0. SCEV can't prove this yet.

Add tests for it.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+287-0llvm/test/Transforms/IndVarSimplify/implied-nonneg-from-unsigned-bound.ll
+287-01 files

LLVM/project 9daf50a — llvm/lib/Analysis ScalarEvolution.cpp, llvm/test/Transforms/IndVarSimplify implied-nonneg-from-unsigned-bound.ll implied-nonneg-from-unsigned-bound-swapped.ll

[SCEV] Derive x >=s 0 from x <u y and y <=u 2^(n-1)

Let n be the bit width of x and y. If x <u y and y <=u 2^(n-1), then
x <u 2^(n-1), so x >=s 0. Here y <=u 2^(n-1) means y >=s 0 or
y == INT_MIN. In the same way, if x <=u y and y <u 2^(n-1), then
x >=s 0.

This lets a guard like x <u len prove x >=s 0 when len is non-negative.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+21-32llvm/test/Transforms/IndVarSimplify/implied-nonneg-from-unsigned-bound-swapped.ll
+5-17llvm/test/Transforms/IndVarSimplify/implied-nonneg-from-unsigned-bound.ll
+21-0llvm/lib/Analysis/ScalarEvolution.cpp
+47-493 files

LLVM/project ddd0c95 — llvm/test/Transforms/IndVarSimplify implied-nonneg-from-unsigned-bound-swapped.ll

[SCEV][IndVars][NFC] Add tests for x >=s 0 from x <u y with swapped operands

Let n be the bit width of x and y. If x <u y and y <=u 2^(n-1), then
x >=s 0. SCEV can't prove this yet when the operands of the compare to
prove are in the opposite order to the guard, e.g. 0 <=s x with
x <u y known.

Add tests for it.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+1,196-0llvm/test/Transforms/IndVarSimplify/implied-nonneg-from-unsigned-bound-swapped.ll
+1,196-01 files

LLVM/project 1849671 — llvm/lib/Analysis ScalarEvolution.cpp, llvm/test/Transforms/IndVarSimplify implied-cond-different-signedness.ll

[SCEV] Prove signed/unsigned implications in either operand order

SCEV could prove these implications only with the operands in the same
order:
- If a <u b and a, b have the same sign, then a <s b.
- If a <s b and a, b have the same sign, then a <u b.
- If a <u b and b >=s 0, then a <s b.
- If a <s b and b <s 0, then a <u b.

For example, it proved a <s b from a <u b and b >=s 0, but not b >s a.
Now it proves them in either order.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+3-14llvm/test/Transforms/IndVarSimplify/implied-cond-different-signedness.ll
+7-1llvm/lib/Analysis/ScalarEvolution.cpp
+10-152 files

LLVM/project f66fab8 — llvm/lib/Analysis ScalarEvolution.cpp, llvm/test/Transforms/IndVarSimplify implied-cond-fall-through.ll

[SCEV] Try other implications when sign-flipped ones fail

SCEV's isImpliedCondBalancedTypes tries to prove an implication
through several rules. There are rules for when a predicate to prove
is sign-flipped from the found predicate, and also there are other
rules, which, for example, try to prove the implication through
ranges.

Before, if a proof for a sign-flipped rule implication returned false,
we wouldn't check other rules and just bail out with false result too.

Now make those rules fall-through - if one rule couldn't be proven,
try other rules in the function.

An example query is x - 5 <s 5 with x <u 10 known.
The implication "a <u b and b >=s 0 --> a <s b" matches it,
but x - 5 <u 5 with x <u 10 known does not hold (e.g. x = 0),
so SCEV gave up.


    [5 lines not shown]
DeltaFile
+13-10llvm/lib/Analysis/ScalarEvolution.cpp
+1-5llvm/test/Transforms/IndVarSimplify/implied-cond-fall-through.ll
+14-152 files

LLVM/project 3ec341b — llvm/test/Transforms/IndVarSimplify implied-cond-different-signedness.ll

[SCEV][IndVars][NFC] Add tests for implied conditions with different signedness

SCEV can prove some signed conditions from unsigned ones and the other
way around. For example, it proves a <s b from a <u b and b >=s 0. But
it fails when the operands are in the opposite order, like b >s a.

Add tests for this.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+160-0llvm/test/Transforms/IndVarSimplify/implied-cond-different-signedness.ll
+160-01 files

LLVM/project f862f93 — llvm/include/llvm/Analysis ScalarEvolution.h, llvm/lib/Analysis ScalarEvolution.cpp

[SCEV][NFC] Factor isImpliedCondViaSignFlippedPred out of isImpliedCondBalancedTypes

Move the code that proves a condition from a found condition with the
other signedness into a new private function.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+39-39llvm/lib/Analysis/ScalarEvolution.cpp
+8-0llvm/include/llvm/Analysis/ScalarEvolution.h
+47-392 files

LLVM/project 78fa46e — llvm/test/Transforms/IndVarSimplify implied-cond-fall-through.ll

[SCEV][IndVars][NFC] Add a test for signed conditions implied by unsigned bounds

SCEV can't prove some signed conditions that hold because of an
unsigned bound on the same value. For example, if x <u 10, then
0 <= x < 10, so x - 5 <s 5.

Add a test for it.

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+49-0llvm/test/Transforms/IndVarSimplify/implied-cond-fall-through.ll
+49-01 files

LLVM/project 34b8254 — llvm/include/llvm/Transforms/Vectorize SLPVectorizer.h, llvm/lib/Transforms/Vectorize SLPVectorizer.cpp

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+52-96llvm/test/Transforms/SLPVectorizer/AArch64/loop-accumulator-reductions-before-seeds.ll
+99-0llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPReductionUtils.cpp
+85-4llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+16-0llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPReductionUtils.h
+8-0llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h
+260-1005 files

LLVM/project 70e1f7c — llvm/lib/Target/BPF BPFMISimplifyPatchable.cpp BPFAbstractMemberAccess.cpp

[BPF] Simplify CO-RE relocation dispatch (NFC) (#234250)

Group relocation kinds and instruction opcodes by their common
discriminator. Return enum access details explicitly and derive the
result width from the intrinsic type, preparing for changes to
relocation payload handling.

Assisted-by: OpenAI Codex
DeltaFile
+56-55llvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp
+12-6llvm/lib/Target/BPF/BPFMISimplifyPatchable.cpp
+68-612 files

LLVM/project 8715d0a — libc/src/__support/math powf_utils.h, libc/test/src/math/smoke powf_test.cpp

[libc][math] Short-circuit certain powf range errors (#223719)

## Summary

Replace the earlier monolithic powf optimization with a narrowly scoped
subnormal-base shortcut on top of the redesigned implementation from
#226588. The existing shared exceptional handler already covers extreme
exponents, so the old large-exponent shortcut is not retained.

For a nonzero subnormal base, its normalization shift proves
`abs(x) < 2^(-125-shift)`. For positive y, `y*(125+shift) >= 150` proves
the magnitude of the result is strictly below `2^-150`. Return through
the existing signed underflow helper, after special-input/domain/parity
handling. Use an exact double product where hardware double is available
and an exact unsigned integer comparison otherwise.

Add smoke coverage for both evaluators and the default entry point,
including directed rounding, negative odd-integer results, the
half-minimum-

    [80 lines not shown]
DeltaFile
+40-0libc/test/src/math/smoke/powf_test.cpp
+13-0libc/src/__support/math/powf_utils.h
+53-02 files

LLVM/project 55624af — flang/lib/Semantics rewrite-parse-tree.cpp, flang/test/Lower/OpenACC acc-loop-conflicting-modes.f90 acc-loop-repeated-modes.f90

[flang][OpenACC] Recover from repeated and conflicting loop modes (#234430)

Flang currently rejects repeated `seq` or `independent` clauses, and
directives containing both modes. Accept these cases as a documented
OpenACC compatibility extension on standalone and combined loop
directives, with one `-Wopenacc-usage` warning per affected directive.

Repeated clauses of one mode retain a single copy. If both modes occur,
remove all occurrences of both clauses before structure checking and
lowering, so the loop uses the same default mode as a directive with
neither clause. This avoids accidentally retaining an `independent`
promise after diagnosing a conflict. Directives containing `auto` or
`device_type` keep their existing diagnostics.

Warnings remain enabled for executable source in separately compiled
submodules, including when an ancestor scope was imported from a module
file. The extension honors `-Werror`, `-w`, and `-Wno-openacc-usage`.

The tests cover repeated and mixed modes on standalone and combined

    [3 lines not shown]
DeltaFile
+120-0flang/test/Semantics/OpenACC/acc-loop-conflicting-modes.f90
+118-0flang/test/Lower/OpenACC/acc-loop-repeated-modes.f90
+96-0flang/test/Semantics/OpenACC/acc-loop-modes-submodule.f90
+92-0flang/test/Semantics/OpenACC/acc-loop-repeated-modes.f90
+71-0flang/lib/Semantics/rewrite-parse-tree.cpp
+58-0flang/test/Lower/OpenACC/acc-loop-conflicting-modes.f90
+555-02 files not shown
+601-08 files

LLVM/project f25e3e1 — llvm/lib/Transforms/Scalar JumpTableToSwitch.cpp, llvm/test/Transforms/JumpTableToSwitch callee-type-mismatch.ll gep-flags.ll

[JumpTableToSwitch] Require `nuw` or `nusw` on the GEP that indexes the table (#234528)

Fixes #233691
DeltaFile
+116-0llvm/test/Transforms/JumpTableToSwitch/gep-flags.ll
+4-4llvm/test/Transforms/JumpTableToSwitch/callee-type-mismatch.ll
+2-1llvm/lib/Transforms/Scalar/JumpTableToSwitch.cpp
+122-53 files

LLVM/project 2f502fe — lldb/test/API/lang/objc/objc-runtime-name TestObjCRuntimeName.py

[lldb] Skip test on older versions of clang (#234754)
DeltaFile
+1-0lldb/test/API/lang/objc/objc-runtime-name/TestObjCRuntimeName.py
+1-01 files

LLVM/project 177f616 — llvm/lib/Transforms/Vectorize VPlanUtils.cpp, llvm/test/Transforms/LoopVectorize pr55100-expand-scev-predicate-used.ll reuse-lcssa-phi-scev-expansion.ll

[VPlan] Expand AddRecs in VPlan, only canonical ARs in IR. (#230858)

Expand AddRecs of loops outside VPlan's scope in VPSCEVExpander
mirroring SCEVExpander::visitAddRecExpr:
 * {X,+,F} is expanded as X + {0,+,F} (using ptradd for pointers)
 * {0,+,F} as {0,+,1} * F.
* narrow canonical are expanded by truncating a wide canonical IV, if
one exits.

Only canonical IVs (and non-affine AddRecs) are expanded by IR
SCEVExpander (as VPExpandSCEVRecipe), which re-uses or creates new
instructions outside VPlan's scope (in the loop that contains the
AddRec).

PR: https://github.com/llvm/llvm-project/pull/230858
DeltaFile
+94-19llvm/test/Transforms/LoopVectorize/VPlan/expand-scev.ll
+26-23llvm/lib/Transforms/Vectorize/VPlanUtils.cpp
+10-10llvm/test/Transforms/LoopVectorize/expand-scev-cse.ll
+4-6llvm/test/Transforms/LoopVectorize/reuse-lcssa-phi-scev-expansion.ll
+4-4llvm/test/Transforms/LoopVectorize/RISCV/strided-accesses.ll
+2-3llvm/test/Transforms/LoopVectorize/pr55100-expand-scev-predicate-used.ll
+140-655 files not shown
+147-7311 files

LLVM/project 03fc09b — llvm/include/llvm/Support FileSystem.h, llvm/lib/CAS MappedFileRegionArena.cpp BuiltinObjectHasher.cpp

[Support] Added file_size(file_t) to improve performance on Windows (#234610)

Usually sys::fs::file_status is using to get the file size. But Windows
implementation of sys::fs::status(file_t, file_status &) is very slow
especially because of calling realPathFromHandle(). Added
sys::fs::file_size(file_t) which uses system's GetFileSizeEx(). 
NFC for non-Windows systems.
DeltaFile
+29-35llvm/lib/Support/VirtualOutputBackends.cpp
+16-0llvm/include/llvm/Support/FileSystem.h
+4-7llvm/lib/CAS/BuiltinObjectHasher.cpp
+4-4llvm/lib/CAS/MappedFileRegionArena.cpp
+7-0llvm/lib/Support/Windows/Path.inc
+3-3llvm/lib/Support/MemoryBuffer.cpp
+63-492 files not shown
+69-528 files

LLVM/project 578abca — llvm/lib/Target/AArch64 AArch64ISelLowering.cpp, llvm/test/CodeGen/AArch64 vselect-split-setcc-sext.ll

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+30-0llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+10-18llvm/test/CodeGen/AArch64/vselect-split-setcc-sext.ll
+40-182 files

LLVM/project 6abc4cd — lldb/packages/Python/lldbsuite/test/tools/lldb_dap utils.py, lldb/test/API/tools/lldb-dap/utils TestDAPUtils_DAPConnection.py

[lldb-dap][test] Read until the EOF from the adapter (#234587)

The read loop previously stops if the transport is no longer alive. This
is true when either the client or the adapter disconnects. The adapter
can send disconnect and immediately close the connection giving the
client little to no time
to read the data. 

The read loop now reads until EOF from the adapter, to read any missing
data in the reader's buffer.

Update the test to simulate this.

Fixes
https://github.com/llvm/llvm-project/issues/137660#issuecomment-5635649521
DeltaFile
+103-25lldb/test/API/tools/lldb-dap/utils/TestDAPUtils_DAPConnection.py
+3-1lldb/packages/Python/lldbsuite/test/tools/lldb_dap/utils.py
+106-262 files

LLVM/project 6711ad0 — clang/lib/CIR/CodeGen CIRGenModule.cpp, clang/test/CIR/CodeGen dtor-alias.cpp dtor-alias-prev-decl.cpp

[CIR] Do not assume function aliases are dso_local under PIC

For PIC code that is not a PIE, shouldAssumeDSOLocal marks a function
dso_local when it can use a local alias, as classic codegen does.
Classic applies that only to real functions, never to aliases.  CIR
represents a function alias as a FuncOp with an aliasee, so the check
now skips aliases.  The flag does not reach LLVM IR yet, because MLIR's
translation drops dso_local on aliases.  #234012 fixes that.

Assisted-by: Cursor / claude-opus-5.5
DeltaFile
+22-4clang/test/CIR/CodeGen/attr-alias.c
+3-3clang/test/CIR/CodeGen/attr-alias-no-proto.c
+2-1clang/lib/CIR/CodeGen/CIRGenModule.cpp
+1-1clang/test/CIR/CodeGen/dtor-alias.cpp
+1-1clang/test/CIR/CodeGen/dtor-alias-prev-decl.cpp
+1-1clang/test/CIR/CodeGen/ctor-alias.cpp
+30-111 files not shown
+31-127 files

LLVM/project e49bb1d — llvm/lib/Transforms/IPO GlobalOpt.cpp, llvm/test/Transforms/GlobalOpt atexit-not-callee.ll

[GlobalOpt] Only remove atexit calls where atexit is the callee (#234731)

Calls that only pass __cxa_atexit or atexit as an argument were wrongly
removed.

Fixes #234325
DeltaFile
+28-0llvm/test/Transforms/GlobalOpt/atexit-not-callee.ll
+6-6llvm/lib/Transforms/IPO/GlobalOpt.cpp
+34-62 files

LLVM/project 4885920 — .github/workflows/containers/github-action-ci Dockerfile, .github/workflows/containers/github-action-ci-windows Dockerfile

[GitHub] Bump runner version to 2.338.1 (#234749)

To stay ahead of the support horizon for the runner version.
DeltaFile
+1-1.github/workflows/containers/github-action-ci/Dockerfile
+1-1.github/workflows/containers/github-action-ci-windows/Dockerfile
+2-22 files

LLVM/project def0f2d — llvm/lib/Target/RISCV RISCVISelLowering.cpp, llvm/test/CodeGen/RISCV rvp-scalar-rv64.ll rvp-simd-32.ll

[RISCV][P-ext] Fold USATI with saturation width of 0 to 0. (#234709)

Avoids losing a fold to 0 via computeKnownBits after #234346.
DeltaFile
+4-9llvm/test/CodeGen/RISCV/rvp-scalar.ll
+6-0llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+2-2llvm/test/CodeGen/RISCV/rvp-simd-32.ll
+1-1llvm/test/CodeGen/RISCV/rvp-scalar-rv64.ll
+13-124 files

LLVM/project 75dfd94 — flang/include/flang/Optimizer/Builder CUFCommon.h, flang/lib/Lower Bridge.cpp Allocatable.cpp

[flang][cuda] Sync the device descriptor of a global passed to a POINTER or ALLOCATABLE dummy (#234679)

A module or SAVE'd pointer or allocatable with a CUDA data attribute has
a device copy of its descriptor. Lowering keeps that copy up to date
with `cuf.sync_descriptor` after pointer assignment, ALLOCATE and
DEALLOCATE, but only when the statement itself names the global. When
the association or allocation happens inside a callee through a POINTER
or ALLOCATABLE dummy argument, the callee updates the host descriptor
and nothing syncs the device copy, so a later kernel reads a null
descriptor and faults.

Emit `cuf.sync_descriptor` after a call for every actual argument that
is a registered device global passed to a POINTER or ALLOCATABLE dummy
that is not `intent(in)`. Kernel launches and device code are skipped.
`genPointerSync` now takes the statement location so the sync is
attributed to the call rather than to the declaration.
DeltaFile
+97-0flang/test/Lower/CUDA/cuda-pointer-sync-call.cuf
+10-0flang/lib/Lower/ConvertCall.cpp
+3-3flang/lib/Optimizer/Builder/CUFCommon.cpp
+5-1flang/include/flang/Optimizer/Builder/CUFCommon.h
+2-2flang/lib/Lower/Bridge.cpp
+2-2flang/lib/Lower/Allocatable.cpp
+119-86 files

LLVM/project e05a198 — llvm/lib/Transforms/IPO WholeProgramDevirt.cpp, llvm/test/Transforms/WholeProgramDevirt devirt-single-impl-dead-vtable.ll

[WholeProgramDevirt] don't let a dead vtable prevent devirtualization (#232432)

When a vtable is dead and local, it should not prevent devirtualization.

https://godbolt.org/z/qxcM1ab5j

This currently does not devirtualize the call in `call1` even though
there is only one live member of the `!0` set:

```llvm
define void @call1(ptr %obj) {
  %vtable = load ptr, ptr %obj, align 8
  %1 = call i1 @llvm.type.test(ptr %vtable, metadata !"typeid1")
  %2 = getelementptr i8, ptr %vtable, i32 0
  %3 = load ptr, ptr %2, align 8
  call void %3(ptr %obj)
  ret void
}
```

    [11 lines not shown]
DeltaFile
+95-0llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl-dead-vtable.ll
+5-0llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
+100-02 files

LLVM/project 7b0af6e — llvm/test/Transforms/SLPVectorizer/X86 loop-accumulator-reductions-partial-seeds.ll

[SLP][NFC]Add extra test for loop accumulator reductions, NFC



Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/234743
DeltaFile
+258-0llvm/test/Transforms/SLPVectorizer/X86/loop-accumulator-reductions-partial-seeds.ll
+258-01 files

LLVM/project 8be4014 — llvm/lib/Target/AMDGPU SIMaterializeWMMAScale.cpp, llvm/test/CodeGen/AMDGPU lower-control-flow-live-variables-update.mir wmma-scale-sgpr-materialize.mir

[AMDGPU] Materialize subregister WMMA scales at lane width

Copy an SGPR subregister scale into a VGPR of that lane's size so two
lanes of one tuple stay independent.

Co-authored-by: Cursor <cursoragent at cursor.com>
DeltaFile
+209-45llvm/lib/Target/AMDGPU/SIMaterializeWMMAScale.cpp
+124-3llvm/test/CodeGen/AMDGPU/wmma-scale-sgpr-materialize.mir
+8-8llvm/test/CodeGen/AMDGPU/lower-control-flow-live-variables-update.mir
+341-563 files

LLVM/project 471f4bf — llvm/test/CodeGen/AArch64 vselect-split-setcc-sext.ll

[CG][AARCH64]Add a test with vselect codegen, NFC



Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/234740
DeltaFile
+46-0llvm/test/CodeGen/AArch64/vselect-split-setcc-sext.ll
+46-01 files

LLVM/project ee734b7 — lldb/cmake/modules AddLLDB.cmake, lldb/tools/driver CMakeLists.txt

[lldb] Replace lldb_setup_rpaths with lldb_add_rpaths (#233996)

There is a way to add rpaths instead of wholesale replacement. It is far
less dangerous to append duplicate RPATHS than to replace them entirely.
DeltaFile
+8-7lldb/cmake/modules/AddLLDB.cmake
+1-1lldb/tools/lldb-mcp/CMakeLists.txt
+1-1lldb/tools/lldb-dap/tool/CMakeLists.txt
+1-1lldb/tools/driver/CMakeLists.txt
+11-104 files

LLVM/project e749a14 — clang/cmake/caches Fuchsia.cmake Fuchsia-stage2.cmake

[Fuchsia] Disable CIR in Fuchsia's toolchain builds (#234242)

CIR is adding significant build time and additional breakages w/o any
benefit, so remove it from our cache files.
DeltaFile
+1-0clang/cmake/caches/Fuchsia.cmake
+1-0clang/cmake/caches/Fuchsia-stage2.cmake
+2-02 files

LLVM/project ac72fe6 — llvm/test/Transforms/SLPVectorizer/AArch64 loop-accumulator-reductions-before-seeds.ll

[SLP][NFC]Add a test with loop accumulator reductions, NFC



Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/234738
DeltaFile
+630-2llvm/test/Transforms/SLPVectorizer/AArch64/loop-accumulator-reductions-before-seeds.ll
+630-21 files