LLVM/project 93b33f7 — libc/hdr/types CMakeLists.txt

[libc] Fix mbstate proxy header dep (#231984)

The proxy header for mbstate_t listed the dependency on the
llvm-libc-types definition as a regular `DEPENDS` and not a
`FULL_BUILD_DEPENDS`. This PR move the dependency to the right category.
DeltaFile
+1-2libc/hdr/types/CMakeLists.txt
+1-21 files

LLVM/project e70624b — llvm/lib/Transforms/Instrumentation MemorySanitizer.cpp, llvm/test/Instrumentation/MemorySanitizer/AArch64 partial-reduction-sub-fp.ll partial-reduction-add.ll

[msan] Handle vector.partial.reduce.{add,fadd} (#229649)

The key insight is that after reducing the shadow of each element of the
vector to either a single 0 bit (fully initialized) or 1 (not fully
initialized), we can apply vector.partial.reduce.add to obtain the
output shadow (with a few type conversions in between).

When the first and second arguments are the same (e.g., `<4 x i32>
@llvm.vector.partial.reduce.add(<4 x i32>, <4 x i32>`), the new
instrumentation will propagate using "all-or-nothing" semantics (vs. the
bitwise OR of the heuristic handler which currently applies). These
all-or-nothing semantics are necessary in the worst case (e.g., for
8-bit integer, 11111111 + 0000000? could result in either 00000000 or
11111111; for floating-point, single bit changes can likewise have
avalanche effects).

This likewise propagates the shadow when the first and second arguments
are not the same (e.g., `<4 x i32> @llvm.vector.partial.reduce.add(<4 x
i32>, <8 x i32>`), unlike the default handler which currently applies.
DeltaFile
+285-111llvm/test/Instrumentation/MemorySanitizer/AArch64/default-partial-reduce.ll
+132-136llvm/test/Instrumentation/MemorySanitizer/AArch64/partial-reduction-sub.ll
+72-0llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
+34-28llvm/test/Instrumentation/MemorySanitizer/AArch64/partial-reduction-add.ll
+29-31llvm/test/Instrumentation/MemorySanitizer/AArch64/partial-reduction-sub-fp.ll
+552-3065 files

LLVM/project a87510a — clang/test/CIR/CodeGenHIP amdgcnspirv-atomic-scope.hip

[CIR][SPIR-V] Update HIP atomic scope checks (#231970)

PR #230829 made CIR translate AMDGPU scope names to their SPIR-V
equivalents, matching classic CodeGen. PR #231754 subsequently added HIP
atomic scope coverage with checks that still expected the AMDGPU names
for wavefront and agent scopes.

Expect subgroup and device for those scopes, share the LLVM checks
between CIR and classic CodeGen, and remove the obsolete FIXME.

Assisted-by: Codex / GPT-6
DeltaFile
+4-8clang/test/CIR/CodeGenHIP/amdgcnspirv-atomic-scope.hip
+4-81 files

LLVM/project 2b35fb9 — llvm/lib/Analysis IR2Vec.cpp Loads.cpp, llvm/lib/CodeGen SelectOptimize.cpp

[IR] Remove Instruction::isDebugOrPseudoInst (NFC) (#231766)

This patch replaces Instruction::isDebugOrPseudoInst with
isa<PseudoProbeInst> at most call sites and drops the check altogether
where PseudoProbeInst is already handled or cannot occur.

Note that debug info is now represented with DbgRecord rather than
debug intrinsics outside the DirectX backend.  None of the callers are
in the DirectX backend, so the DbgInfoIntrinsic check is dead.

Assisted-by: Antigravity
DeltaFile
+4-5llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
+4-4llvm/lib/CodeGen/SelectOptimize.cpp
+3-4llvm/lib/Analysis/InlineCost.cpp
+3-3llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
+3-3llvm/lib/Analysis/Loads.cpp
+3-2llvm/lib/Analysis/IR2Vec.cpp
+20-2126 files not shown
+47-7132 files

LLVM/project 560cd8f — clang/include/clang/Basic TargetID.h, clang/lib/Basic TargetID.cpp

Reapply "clang: Use TargetID parsing from AMDGPUTargetParser" (#213824) (#231420)

This reverts commit 6327754ad4eb21b3c27034bc170e8b9944e5e318.

Resolve conflicts with the addition of FEAT_SRAMECC_ON_OFF_MODES.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+30-167clang/lib/Basic/TargetID.cpp
+61-64clang/lib/Driver/ToolChains/AMDGPU.cpp
+39-42clang/lib/Driver/OffloadBundler.cpp
+10-34clang/include/clang/Basic/TargetID.h
+25-18clang/lib/Basic/Targets/AMDGPU.cpp
+20-14clang/lib/Basic/Targets/AMDGPU.h
+185-3397 files not shown
+258-38313 files

LLVM/project a31ff50 — llvm/test/CodeGen/RISCV/rvv vaaddu-sdnode.ll fixed-vectors-vaaddu.ll

[RISCV] Add more vaadd test coverage to match vaaddu. NFC (#231627)

Drop the sext test cases from the vaaddu files since equivalent tests
are in the vaadd files.

Assisted-by: Claude
DeltaFile
+466-0llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vaadd.ll
+381-0llvm/test/CodeGen/RISCV/rvv/vaadd-sdnode.ll
+28-59llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vaaddu.ll
+0-31llvm/test/CodeGen/RISCV/rvv/vaaddu-sdnode.ll
+875-904 files

LLVM/project 64aee3f — llvm/include/llvm/CodeGen SelectionDAGNodes.h SDPatternMatch.h, llvm/lib/CodeGen/SelectionDAG SelectionDAG.cpp

[SelectionDAG] Remove isOnesOrOnesSplat in favor of isOneOrOneSplat (#231742)

These names are too similar.

The only difference between these is that isOneOrOneSplat allows
implicit truncation of build_vector operands. If we really need to
disable implicit truncation that should be done with a bool argument,
not the presence of two 's' letters in the function name.
DeltaFile
+5-5llvm/include/llvm/CodeGen/SDPatternMatch.h
+0-6llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+0-5llvm/include/llvm/CodeGen/SelectionDAGNodes.h
+5-163 files

LLVM/project 4f36395 — llvm/test/Transforms/VectorCombine/X86 load-inseltpoison.ll

fixup! Update test cases
DeltaFile
+5-8llvm/test/Transforms/VectorCombine/X86/load-inseltpoison.ll
+5-81 files

LLVM/project fb04529 — llvm/lib/Transforms/Vectorize VectorCombine.cpp

fixup! Add TODO comment
DeltaFile
+2-0llvm/lib/Transforms/Vectorize/VectorCombine.cpp
+2-01 files

LLVM/project d54e33d — llvm/test/Transforms/PhaseOrdering/X86 hsub.ll hadd.ll

fixup! Re-generate some CHECKs
DeltaFile
+7-7llvm/test/Transforms/PhaseOrdering/X86/hsub.ll
+7-7llvm/test/Transforms/PhaseOrdering/X86/hadd.ll
+14-142 files

LLVM/project b82cb23 — llvm/lib/Transforms/Vectorize VectorCombine.cpp, llvm/test/Transforms/PhaseOrdering/X86 hsub.ll hadd.ll

[VectorCombine] Add instructions created by IRBuilder into Worklist automatically
DeltaFile
+31-48llvm/lib/Transforms/Vectorize/VectorCombine.cpp
+15-49llvm/test/Transforms/VectorCombine/X86/concat-boolmasks.ll
+25-38llvm/test/Transforms/VectorCombine/X86/load-inseltpoison.ll
+4-4llvm/test/Transforms/PhaseOrdering/X86/hsub.ll
+4-4llvm/test/Transforms/PhaseOrdering/X86/hadd.ll
+0-2llvm/test/Transforms/VectorCombine/X86/extract-binop.ll
+79-1451 files not shown
+79-1467 files

LLVM/project 84b85af — clang/lib/CIR/CodeGen CIRGenStmtOpenMP.cpp, clang/test/CIR/CodeGenOpenMP not-yet-implemented.c teams.c

[CIR][OpenMP] Add support for omp teams

This patch adds support for the OpenMP 'teams' directive, both standalone
and as the combined `target teams` construct. isCombinableLeaf now also
recognizes teams, so an explicitly-nested `target` + `teams` pair gets
the same omp.combined marking as the combined case.

Assisted-by: Cursor / Claude Sonnet 5 High
DeltaFile
+107-5clang/lib/CIR/CodeGen/CIRGenStmtOpenMP.cpp
+69-0clang/test/CIR/CodeGenOpenMP/target-teams.c
+39-0clang/test/CIR/CodeGenOpenMP/teams.c
+10-0clang/test/CIR/CodeGenOpenMP/not-yet-implemented.c
+225-54 files

LLVM/project bb12c27 — llvm/lib/Transforms/Vectorize VPlanLowering.cpp VPlanRecipes.cpp

[VPlan] Strip IR trunc around IntOrFp inductions (NFC) (#231837)

The IR trunc instruction is completely unnecessary as the scalar types
of recipes are already embedded within them. Strip it entirely, and
rework the logic around it.
DeltaFile
+18-22llvm/lib/Transforms/Vectorize/VPlanUtils.cpp
+13-17llvm/lib/Transforms/Vectorize/VPlan.h
+9-13llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+8-7llvm/lib/Transforms/Vectorize/VPlanUtils.h
+2-2llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
+1-1llvm/lib/Transforms/Vectorize/VPlanLowering.cpp
+51-626 files

LLVM/project ba6d822 — clang/docs/ScalableStaticAnalysis/user-docs MakeProjects.md, clang/test/Analysis/Scalable/ssaf-orchestrator-make transformation-reports.test

[clang][ssaf][orchestrator] Merge transformation reports per link unit (#231957)

In the transformation pass, the ar and ld shims now also merge the
transformation reports of what they consume, with
clang-ssaf-merge-transformation-report, and their conflict reports, with
clang-ssaf-merge-conflict-report, adding the conflicts of their own edit
merge. The link unit's reports therefore cover every translation unit
and every merge behind it, and the run names them on stdout in place of
the conflict files of the individual merges.

A compilation whose transformation fails leaves no report behind, as it
leaves no edits.
DeltaFile
+74-15clang/tools/clang-ssaf-orchestrator-make/lib/clang_ssaf_orchestrator_make/shims/shim.py
+88-0clang/test/Analysis/Scalable/ssaf-orchestrator-make/transformation-reports.test
+82-1clang/tools/clang-ssaf-orchestrator-make/tests/test_ld_shim.py
+46-5clang/docs/ScalableStaticAnalysis/user-docs/MakeProjects.md
+32-5clang/tools/clang-ssaf-orchestrator-make/tests/test_clang_shim.py
+11-23clang/tools/clang-ssaf-orchestrator-make/tests/test_ssaf_artifact_repository.py
+333-4919 files not shown
+467-9325 files

LLVM/project 3f44756 — llvm/lib/Target/NVPTX NVPTXISelLowering.cpp, llvm/test/CodeGen/NVPTX atomicrmw.py atomicrmw-elementwise-sm90.ll

[AtomicExpand] Add elementwise expansion (#196464)

## Summary

Currently, `atomicrmw elementwise` operations are treated exactly like
the corresponding `atomicrmw` without `elementwise`.

Here I add support for `elementwise` atomic expansion in
`AtomicExpandPass`, which exploits the fact that we can legally break up
`elementwise` atomics into a sequence of smaller vector or scalar
atomics. Note that this is legal because, as the LangRef states, an
`elementwise` atomic `behaves as if it were expanded into one scalar
``atomicrmw`` per element, that are not ordered with respect to each
other.` So by scalarizing, we are only ever constraining the ordering of
atomic operations, which is legal because we give no ordering guarentee.

## Elementwise expansion implementation

This is the header for the expansion function:

    [81 lines not shown]
DeltaFile
+31,848-0llvm/test/CodeGen/NVPTX/atomicrmw-elementwise-sm60.ll
+31,310-0llvm/test/CodeGen/NVPTX/atomicrmw-elementwise-sm70.ll
+22,710-0llvm/test/CodeGen/NVPTX/atomicrmw-elementwise-sm90.ll
+311-0llvm/test/Transforms/AtomicExpand/NVPTX/expand-atomic-rmw-elementwise.ll
+140-88llvm/test/CodeGen/NVPTX/atomicrmw.py
+114-42llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp
+86,433-1304 files not shown
+86,644-13810 files

LLVM/project 3f2a84f — llvm/lib/Target/AMDGPU VOP2Instructions.td, llvm/test/MC/AMDGPU gfx9_err_pos.s

[AMDGPU] Remove redundant GFX9 VOP2b assembler aliases (#231950)

Remove the GFX9 VOP2bInstAliases for
v_{add,addc,sub,subb,subrev,subbrev}_co_u32. Unlike the GFX10+ e32
reals,
which drop the vcc operands from their AsmString and rely on
VOP2bInstAliases to accept the explicit vcc/vcc_lo forms, the GFX9 e32
reals keep the explicit vcc operands in their AsmString, so the wave64
aliases were exact duplicates and the wave32 (vcc_lo) aliases were
unusable since GFX9 does not support wave32.

79f67cae91ed mistakenly updated the v_add_co_u32, v_sub_co_u32 and
v_subrev_co_u32 aliases to use the carryless V_{ADD,SUB,SUBREV}_U32
pseudos instead of V_*_CO_U32, so they took their syntax from the
carryless instructions and accepted a form with no vcc operand (e.g.
"v_add_co_u32 v5, v1, v2"). That syntax is now rejected.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply at anthropic.com>

Co-authored-by: Claude Opus 5.5 (1M context) <noreply at anthropic.com>
DeltaFile
+18-0llvm/test/MC/AMDGPU/gfx9_err_pos.s
+0-11llvm/lib/Target/AMDGPU/VOP2Instructions.td
+18-112 files

LLVM/project 4a8fb9d — clang/lib/CIR/CodeGen CIRGenFunction.cpp, clang/test/CIR/CodeGen pointer-to-data-member.cpp fixed-point-arith.cpp

[CIR] Lay out allocas in the order classic codegen does

At -O0 the order of a function's entry-block allocas is its stack frame
layout. CIR now creates the return value's alloca before the
parameters', and keeps hoisted block-scope allocas after the function's
own, matching classic codegen.

CIRGen creates `__retval` before the parameters, as classic's
StartFunction does, and the implicit `return 0` store for `main` moves
into emitFunctionProlog, where classic emits it. HoistAllocas places
each hoisted alloca after the allocas already at the start of the
destination block instead of in front of them.

Assisted-by: Cursor / claude-opus-5.5
DeltaFile
+205-0clang/test/CIR/CodeGen/alloca-order.cpp
+80-80clang/test/CIR/CodeGen/unary.cpp
+68-34clang/test/CIR/CodeGen/fixed-point-arith.cpp
+24-31clang/lib/CIR/CodeGen/CIRGenFunction.cpp
+51-0clang/test/CIR/Transforms/hoist-allocas.cir
+18-18clang/test/CIR/CodeGen/pointer-to-data-member.cpp
+446-16362 files not shown
+717-39268 files

LLVM/project ac76330 — llvm/include/llvm/TargetParser CMakeLists.txt, llvm/lib/Target/AArch64 AArch64TargetParserDef.td

AArch64: Use minimal tablegen inputs for TargetParser (#231954)

Generate AArch64TargetParserDef.inc from a minimal file instead of all
of AArch64.td. The scheduling models referenced by the processor
definitions are defined in the scheduling files, which depend on the
instruction definitions. TargetParser does not use them, so the minimal
file defines empty placeholder models instead.

llvm-min-tblgen -gen-arm-target-def

                             Gigainstructions  Peak RSS  .td deps
  AArch64.td                 3.36              169 MB    100
  AArch64TargetParserDef.td  0.04                7 MB      8

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+49-0llvm/lib/Target/AArch64/AArch64TargetParserDef.td
+1-1utils/bazel/llvm-project-overlay/llvm/BUILD.bazel
+1-1llvm/utils/gn/secondary/llvm/include/llvm/TargetParser/BUILD.gn
+1-1llvm/include/llvm/TargetParser/CMakeLists.txt
+52-34 files

LLVM/project 0b7d461 — flang/include/flang/Optimizer/Passes CommandLineOpts.h, flang/lib/Optimizer/Passes Pipelines.cpp CommandLineOpts.cpp

[flang] Plumb -loop-tripcount-versioning-max-unrolled-ops through the pipeline
DeltaFile
+5-0flang/lib/Optimizer/Passes/CommandLineOpts.cpp
+2-1flang/lib/Optimizer/Passes/Pipelines.cpp
+1-0flang/include/flang/Optimizer/Passes/CommandLineOpts.h
+8-13 files

LLVM/project 0b3ea5e — clang/include/clang/Options FlangOptions.td, clang/lib/Driver/ToolChains Flang.cpp

[flang] Add -f[no-]version-loops-for-trip-count and enable it at -O3
DeltaFile
+36-0flang/test/Integration/loop-tripcount-versioning.f90
+34-0flang/test/Driver/version-loops-trip-count.f90
+14-11clang/lib/Driver/ToolChains/Flang.cpp
+5-0flang/lib/Optimizer/Passes/CommandLineOpts.cpp
+5-0flang/docs/ReleaseNotes.md
+4-0clang/include/clang/Options/FlangOptions.td
+98-116 files not shown
+111-1112 files

LLVM/project 3abd6b6 — flang/lib/Optimizer/Transforms LoopTripCountVersioning.cpp

[flang] Use mlir::OpBuilder in LoopTripCountVersioning, no module needed
DeltaFile
+9-9flang/lib/Optimizer/Transforms/LoopTripCountVersioning.cpp
+9-91 files

LLVM/project 33d94c2 — flang/include/flang/Optimizer/Transforms Passes.td, flang/lib/Optimizer/Transforms LoopTripCountVersioning.cpp

[flang] Add max-unrolled-ops limit and skip conditional unsliced accesses
DeltaFile
+84-0flang/test/Transforms/loop-tripcount-versioning.fir
+39-12flang/lib/Optimizer/Transforms/LoopTripCountVersioning.cpp
+10-1flang/include/flang/Optimizer/Transforms/Passes.td
+133-133 files

LLVM/project a623ae3 — flang/lib/Optimizer/Transforms LoopTripCountVersioning.cpp, flang/test/Transforms loop-tripcount-versioning.fir

[flang] Skip loops in device code in LoopTripCountVersioning
DeltaFile
+87-0flang/test/Transforms/loop-tripcount-versioning.fir
+17-3flang/lib/Optimizer/Transforms/LoopTripCountVersioning.cpp
+104-32 files

LLVM/project 6b0a7a9 — flang/include/flang/Optimizer/Transforms Passes.td, flang/lib/Optimizer/Transforms CMakeLists.txt LoopTripCountVersioning.cpp

[flang] Add pass to version innermost loops on a likely constant trip count
DeltaFile
+603-0flang/test/Transforms/loop-tripcount-versioning.fir
+297-0flang/lib/Optimizer/Transforms/LoopTripCountVersioning.cpp
+25-0flang/include/flang/Optimizer/Transforms/Passes.td
+1-0flang/lib/Optimizer/Transforms/CMakeLists.txt
+926-04 files

LLVM/project 3cb587a — clang/lib/CIR/Lowering/DirectToLLVM LowerToLLVM.cpp, clang/test/CIR/Lowering unlowered-address-spaces.cir

[CIR] Reject language address spaces in DirectToLLVM pointer conversion

Reject unlowered language address spaces in pointer types when bypassing TargetLowering. Guard pointer-producing lowerings, including generated patterns, so failed conversions report legalization failures instead of silently selecting address space zero or constructing invalid LLVM operations.

Assisted-by: Codex / GPT-6
DeltaFile
+504-0clang/test/CIR/Lowering/unlowered-address-spaces.cir
+64-0clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+2-0clang/utils/TableGen/CIRLoweringEmitter.cpp
+570-03 files

LLVM/project ae94ad7 — llvm/lib/CodeGen/SelectionDAG TargetLowering.cpp, llvm/test/CodeGen/AMDGPU sdiv.ll

fix(SelectionDAG): Preserve operand sharing

Demanded-bits simplification can bypass a shared producer without
removing it or its bitwise user. Reusing its previously single-use input
extends its live range and can introduce two-address copies.

Keep the shared value in this case for AND, OR, and XOR. Still bypass
bitwise producers to enable reassociation. Folds that remove the user
and rewrites using already-shared inputs remain available.

Remove three redundant copies in vector-bo-select without target or
subtarget checks.

The RISC-V checks each lose one instruction. GFX9 v_sdiv_i24 moves five
vector operations to scalar operations and adds a final move, growing
by four bytes; the other AMDGPU changes only affect register allocation.
DeltaFile
+56-58llvm/test/CodeGen/RISCV/srem-seteq-illegal-types.ll
+40-39llvm/test/CodeGen/AMDGPU/sdiv.ll
+21-12llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+10-13llvm/test/CodeGen/X86/vector-bo-select.ll
+127-1224 files

LLVM/project 2fcfd28 — llvm/lib/Target/X86 X86ISelLowering.cpp, llvm/test/CodeGen/X86/apx ccmp.ll

fix(X86): restore CCMP through boolean NOT

Demanded-bits simplification can turn XOR with 1 into NOT, hiding
SETCC operands from CCMP formation. Invert the condition under AND
when the other SETCC masks high bits and the NOT has one use.

Restore the original ccmp.ll checks for all four configurations.

Refs #230700
DeltaFile
+6-16llvm/test/CodeGen/X86/apx/ccmp.ll
+13-0llvm/lib/Target/X86/X86ISelLowering.cpp
+19-162 files

LLVM/project 2c0522a — llvm/lib/Target/X86 X86ISelLowering.cpp, llvm/test/CodeGen/X86 vector-bo-select.ll

fix(x86): reuse shifted masks in SSE ANDNP

Demanded-bit simplification can bypass a shared arithmetic shift when
ANDNP only needs sign bits. Reuse the existing shift to avoid keeping
its input live across a two-address SSE instruction.

Restore the original SSE2 vector select checks.

Refs #230700
DeltaFile
+10-13llvm/test/CodeGen/X86/vector-bo-select.ll
+11-0llvm/lib/Target/X86/X86ISelLowering.cpp
+21-132 files

LLVM/project 25e42e4 — llvm/lib/Target/X86 X86ISelLowering.cpp, llvm/test/CodeGen/X86 setcc-logic.ll

fix(x86): generalize boolean NOT folding

Use known bits to prove the other AND operand clears every bit above
bit zero. This permits non-SETCC booleans without changing the upper
bits of an arbitrary byte or duplicating a shared inversion.

Cover a shifted boolean, arbitrary bytes, and shared inversions.
DeltaFile
+92-0llvm/test/CodeGen/X86/setcc-logic.ll
+6-5llvm/lib/Target/X86/X86ISelLowering.cpp
+98-52 files

LLVM/project 5e9dc5e — llvm/lib/Target/X86 X86ISelLowering.cpp, llvm/test/CodeGen/X86 vector-bo-select.ll

revert(x86): drop shared-shift ANDNP workaround

Keep the CCMP fix separate from the SSE copy regression. The shared-shift
workaround relies on GetDemandedMasks, whose poison handling is under
review, and needs a different approach.

Refs #230770
DeltaFile
+13-10llvm/test/CodeGen/X86/vector-bo-select.ll
+0-11llvm/lib/Target/X86/X86ISelLowering.cpp
+13-212 files