LLVM/project e746e40 — .github CODEOWNERS

[SPIRV] Add codeowners for SPIR-V backend (#234652)
DeltaFile
+7-0.github/CODEOWNERS
+7-01 files

LLVM/project 459cd1e — llvm/lib/CodeGen/GlobalISel LegalizerHelper.cpp, llvm/test/CodeGen/AArch64/GlobalISel invoke-result-phi.ll

[GlobalISel] Fix dominance when legalizing PHI for results of invoke (#234603)

PHI legalization inserts type conversions before the first terminator so that
they execute on unwind edges. However, an invoke result is defined after
G_INVOKE_REGION_START (which can be the first terminator). Therefore conversions
of these results are inserted before the defs, causing a use before def.

Keep the existing insertion point for values available before the invoke. For
anything that is defined later, move the conversion point to after the def.

Assisted-by: Codex
DeltaFile
+151-0llvm/test/CodeGen/AArch64/GlobalISel/invoke-result-phi.ll
+50-2llvm/unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp
+29-4llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
+230-63 files

LLVM/project d8fbbb5 — utils/bazel/llvm-project-overlay/lldb/source/Plugins BUILD.bazel

[bazel] Resolve mid-air patch collision (#239181)
DeltaFile
+0-14utils/bazel/llvm-project-overlay/lldb/source/Plugins/BUILD.bazel
+0-141 files

LLVM/project ed01ee7 — llvm/include/llvm/CodeGen SelectionDAGNodes.h, llvm/test/CodeGen/AArch64 scalable_masked_deinterleaved_loads.ll scalable_masked_interleaved_stores.ll

[AArch64] Don't fold expandloads/compressstores into (de)interleave ops (#239160)

Previously, `performVector(De)interleaveCombine` would miscompile by
combining expandloads and compressstores with deinterleaves and
interleaves respectively.

This is fixed by updating `ISD::isNormalMaskedLoad()` and
`ISD::isNormalMaskedStore()` to exclude isExpandingLoad() and
isCompressingStore().
DeltaFile
+25-2llvm/test/CodeGen/AArch64/scalable_masked_interleaved_stores.ll
+24-1llvm/test/CodeGen/AArch64/scalable_masked_deinterleaved_loads.ll
+7-6llvm/include/llvm/CodeGen/SelectionDAGNodes.h
+56-93 files

LLVM/project 29deede — llvm/test/CodeGen/AArch64 build-vector-extract.ll aarch64-neon-vector-insert-uaddlv.ll

Update Test Checks
DeltaFile
+644-665llvm/test/CodeGen/AArch64/neon-dotreduce.ll
+170-92llvm/test/CodeGen/AArch64/shuffle-insert-zero.ll
+13-17llvm/test/CodeGen/AArch64/aarch64-neon-vector-insert-uaddlv.ll
+1-3llvm/test/CodeGen/AArch64/build-vector-extract.ll
+828-7774 files

LLVM/project 7ea9945 — llvm/lib/Target/AArch64 AArch64InstrInfo.td, llvm/test/CodeGen/AArch64 shuffle-insert-zero.ll

[AArch64][DAG] Improve codegen for clearing upper vector lanes

Add patterns that use scalar fmov instruction to clear the upper lanes of a vector
DeltaFile
+307-16llvm/test/CodeGen/AArch64/shuffle-insert-zero.ll
+50-0llvm/lib/Target/AArch64/AArch64InstrInfo.td
+357-162 files

LLVM/project 858aff5 — mlir/include/mlir/IR EnumAttr.td, mlir/test/IR attribute.mlir enum-attr-roundtrip.mlir

[mlir][ODS] Allow a space-only separator for bit enums

Bit enums required a separator containing '|' or ',', so a flag set
could not use the bare keyword syntax of LLVM IR, e.g. `nuw nsw`.
Dialects that want it, such as ClangIR's overflow flags, had to hand-write
a parser and printer for an EnumProp.

Allow `separator = " "` on new-style BitEnums. The generated FieldParser
then reads case keywords until the next token is not one, symbolize
splits on spaces, and the op-format `enum` directive parses the same
way. Like the existing check for a separator literal, the format
verifier rejects a case literal right after such an enum. The separator
must now be '|', ',', or a space ' ', where '|' and ',' may still be
surrounded by spaces, so strings such as "||" are rejected. Legacy
BitEnumAttr keeps requiring '|' or ','.

Assisted-by: Claude Code (Claude Opus 5.5).
DeltaFile
+40-2mlir/tools/mlir-tblgen/EnumsGen.cpp
+30-7mlir/tools/mlir-tblgen/OpFormatGen.cpp
+24-0mlir/test/IR/enum-attr-roundtrip.mlir
+23-0mlir/test/IR/attribute.mlir
+13-8mlir/include/mlir/IR/EnumAttr.td
+20-0mlir/test/mlir-tblgen/enums-gen.td
+150-177 files not shown
+223-2313 files

LLVM/project 28a1768 — llvm/lib/Target/AMDGPU AMDGPUCodeGenPrepare.cpp

AMDGPUCodeGenPrepare.cpp - fix MSVC "warning C4018: '<=': signed/unsigned mismatch" warnings. NFC. (#239168)

A possibly futile attempt to get /WX builds working again
DeltaFile
+4-4llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp
+4-41 files

LLVM/project b0203bd — mlir/lib/Support CMakeLists.txt, mlir/tools/mlir-src-sharder CMakeLists.txt

[MLIR] Add TableGen "variant" of MLIRSupport (#239165)

mlir-src-sharder currently depends on MLIRSupport. In a dylib build,
this brings in a dependency on an LLVM shared library. Since
mlir-src-sharder is a TableGen tool, it links statically against
LLVMSupport, which introduces an ODR violation caught at link-time on
Windows in an LLVM dylib build.

To work around this issue, this PR introduces MLIRSupport_tablegen, to
be used by mlir-src-sharder and other MLIR TableGen tools. This always
links against a static LLVMSupport and prevents ODR violations.

This approach follows the precedent set by clangSupport_tablegen.

The effort to build LLVM as a dylib is tracked in #109483.
DeltaFile
+24-14mlir/lib/Support/CMakeLists.txt
+1-1mlir/tools/mlir-src-sharder/CMakeLists.txt
+25-152 files

LLVM/project aa1bf89 — mlir/include/mlir/Dialect/LLVMIR NVVMOps.td, mlir/lib/Dialect/LLVMIR/IR NVVMDialect.cpp

[MLIR][NVVM] Add nvvm.mulf Op (#238395)

Adds `nvvm.mulf` Op to the NVVM dialect. `nvvm.mulf` performs a
floating-point multiplication between two operands of the same type and
lowers to the `llvm.nvvm.fmul` family of intrinsics.

PTX ISA Reference:
1.
https://docs.nvidia.com/cuda/parallel-thread-execution/#floating-point-instructions-mul
2.
https://docs.nvidia.com/cuda/parallel-thread-execution/#half-precision-floating-point-instructions-mul
DeltaFile
+224-0mlir/test/Target/LLVMIR/nvvm/mulf/mulf_vector.mlir
+91-0mlir/test/Target/LLVMIR/nvvm/mulf/mulf.mlir
+65-0mlir/test/Target/LLVMIR/nvvm/mulf/mulf_invalid.mlir
+35-12mlir/lib/Target/LLVMIR/Dialect/NVVM/NVVMToLLVMIRTranslation.cpp
+29-0mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td
+19-8mlir/lib/Dialect/LLVMIR/IR/NVVMDialect.cpp
+463-204 files not shown
+489-3210 files

LLVM/project c324abe — llvm/lib/Transforms/Utils SimplifyIndVar.cpp, llvm/test/Transforms/IndVarSimplify iv-widen-elim-ext.ll

[IndVarSimplify] Use context to prove a narrow IV def non-negative

When IndVars widens an IV, it checks for each narrow def
(the IV and values computed from it) whether it is
non-negative on every iteration.

If it is, zext and sext of it are equal. Then when IndVars
idens the def's users, they can choose to use either
the sext or zext of the def.

Previously, we didn't use context to prove the non-negativity of def.

Now ask SCEV about the def non-negativity at its context -
the def instruction itself.
This allows SCEV to infer facts from the dominating guards and assumes.

This in turn allows eliminating unnecessary truncs/zexts. E.g. in

  if (m > 0)

    [9 lines not shown]
DeltaFile
+19-28llvm/test/Transforms/IndVarSimplify/iv-widen-elim-ext.ll
+2-2llvm/lib/Transforms/Utils/SimplifyIndVar.cpp
+21-302 files

LLVM/project 6279d78 — llvm/test/Analysis/ScalarEvolution max-trip-count-smax-exit-bound.ll, llvm/test/Transforms/IndVarSimplify lftr-smax-exit-bound.ll

[IndVarSimplify][SCEV][NFC] Add tests for LFTR losing the constant max trip count

When LFTR of IndVars rewrites a loop exit like i >s C
to i + 1 == smax(start, C + 1),
SCEV's constant max backedge-taken count of the loop gets worse.

Add tests showing it.

Assisted-By: Claude
DeltaFile
+60-0llvm/test/Analysis/ScalarEvolution/max-trip-count-smax-exit-bound.ll
+43-0llvm/test/Transforms/IndVarSimplify/lftr-smax-exit-bound.ll
+103-02 files

LLVM/project f8665d1 — llvm/test/Transforms/IndVarSimplify iv-widen-elim-ext.ll

[IndVarSimplify][NFC] Add tests for widening non-negative IV users

Add tests for widening provably non-negative IV users.

Assisted-By: Claude
DeltaFile
+423-0llvm/test/Transforms/IndVarSimplify/iv-widen-elim-ext.ll
+423-01 files

LLVM/project 0b4229a — llvm/test/Transforms/LoopVectorize runtime-check-widened-iv-index.ll

[LoopVectorize][NFC] Add tests for runtime checks with a widened IV index

In

  if (start <u len && start - 32 <u len)   // len >=s 0
    for (int32_t i = start; i < n; i++) a[i] = a[i - 32];

i - 32 >=s 0, so the distance between a[i] and a[i - 32] is always 32.

If the loop has an i64 IV and i - 32 is computed in i64, it is
vectorized without runtime checks.
If i - 32 is computed in i32 and zero-extended, the vectorizer
emits an overflow check and an alias check.

Add tests for both forms.

Assisted-By: Claude
DeltaFile
+213-0llvm/test/Transforms/LoopVectorize/runtime-check-widened-iv-index.ll
+213-01 files

LLVM/project aa86359 — llvm/test/Transforms/IndVarSimplify iv-widen-elim-ext.ll

[IndVarSimplify][NFC] Add a negative test for zext elimination

Add a test for a zext of an nsw add of a sign-extended IV, where the
add may be negative.

Also rewrite a stale comment of an existing test.

Assisted-By: Claude
DeltaFile
+45-1llvm/test/Transforms/IndVarSimplify/iv-widen-elim-ext.ll
+45-11 files

LLVM/project 60fd9c7 — flang/include/flang/Evaluate variable.h type.h, flang/lib/Evaluate fold-complex.cpp fold-character.cpp

[Flang][NFC] Remove FOR_EACH_*_KIND macros (#238748)

Third cleanup after #216960

The `FOR_EACH_*_KIND` macros only expand to a single item. In cases
where this was already the case before #216960, such as `SomeDerived`,
it was spelled out without a macro. Do the same for `FOR_EACH_*_KIND` .
DeltaFile
+14-14flang/include/flang/Evaluate/expression.h
+6-21flang/include/flang/Evaluate/type.h
+2-2flang/lib/Evaluate/fold-integer.cpp
+1-1flang/lib/Evaluate/fold-complex.cpp
+1-1flang/lib/Evaluate/fold-character.cpp
+1-1flang/include/flang/Evaluate/variable.h
+25-402 files not shown
+27-428 files

LLVM/project 439a109 — clang/lib/CodeGen/TargetBuiltins RISCV.cpp, clang/test/CodeGen/RISCV rvp-intrinsics.c

[RISCV][P-ext] Support Packed Multiplication with Horizontal Addition and Accumulate intrinsics (#236303)
DeltaFile
+472-9clang/test/CodeGen/RISCV/rvp-intrinsics.c
+389-0llvm/test/CodeGen/RISCV/rvp-simd-64.ll
+241-10cross-project-tests/intrinsic-header-tests/riscv_packed_simd.c
+191-0llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+98-0clang/lib/CodeGen/TargetBuiltins/RISCV.cpp
+55-0llvm/lib/Target/RISCV/RISCVInstrInfoP.td
+1,446-194 files not shown
+1,582-3510 files

LLVM/project f13b796 — utils/bazel/llvm-project-overlay/lldb/source/Plugins BUILD.bazel

Fix bazel build for #237442 (#239178)

Fix bazel build for #237442.
DeltaFile
+14-0utils/bazel/llvm-project-overlay/lldb/source/Plugins/BUILD.bazel
+14-01 files

LLVM/project 5242bc0 — mlir/test/Conversion/FuncToLLVM func-to-llvm-datalayout.mlir

[mlir][ToLLVM] Fix dead FileCheck in func-to-llvm-datalayout.mlir (NFC) (#238964)

The RUN line did not pipe into FileCheck, so none of the CHECK lines
were evaluated. Add the missing FileCheck and update the CHECK lines to
the current printer output (compact `dl_spec` syntax, no argument names
for private function declarations).

Found while looking into the static mode of `convert-to-llvm`, which
ignores `dlti.dl_spec`. Its test coverage is intentionally not extended
here: per the discussion in #156557, the static mode is a candidate for
removal rather than a fix. The open question is whether `dynamic=true`
should become the default.

Co-authored-by: Sven Lukas <sven.lukas at gmail.com>
DeltaFile
+8-8mlir/test/Conversion/FuncToLLVM/func-to-llvm-datalayout.mlir
+8-81 files

LLVM/project b216a20 — utils/bazel/llvm-project-overlay/lldb/source/Plugins BUILD.bazel

[bazel][lldb] Port eeb24ee48aa2: Add PluginRegisterCore (#239177)

Fixes the Bazel build after eeb24ee48aa2 ([lldb] Extract reusable core
register contexts (#237442)), which moved the core register contexts to
lldb/source/Plugins/Register/Core.
DeltaFile
+16-0utils/bazel/llvm-project-overlay/lldb/source/Plugins/BUILD.bazel
+16-01 files

LLVM/project a65e8b6 — lldb/source/Plugins/Process/Utility RegisterContextDarwin_arm.cpp, lldb/source/Plugins/Register/Darwin RegisterContextDarwin_arm.cpp

Merge branch 'main' into users/zero9178/undef-resolve
DeltaFile
+3,186-0llvm/test/CodeGen/AMDGPU/amdgcn-av-scopes.ll
+0-1,738lldb/source/Plugins/Process/Utility/RegisterContextDarwin_arm.cpp
+1,738-0lldb/source/Plugins/Register/Darwin/RegisterContextDarwin_arm.cpp
+847-847llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-to-agpr-spill-joint-dom-mir.mir
+447-1,183llvm/test/CodeGen/NVPTX/atomicrmw-elementwise-sm90.ll
+773-773llvm/test/CodeGen/AMDGPU/NextUseAnalysis/acyclic-770bb.mir
+6,991-4,5414,405 files not shown
+92,013-49,5964,411 files

LLVM/project 215301b — llvm/docs/TableGen ProgRef.md

address review comments
DeltaFile
+2-2llvm/docs/TableGen/ProgRef.md
+2-21 files

LLVM/project 466e452 — llvm/lib/CodeGen/AsmPrinter DwarfStringPool.cpp, llvm/test/DebugInfo/NVPTX debug-str-nonascii.ll

[DebugInfo] Escape strings echoed into .debug_str comments (#223384)

Since 1a23bca645dc, `DwarfStringPool::emit` echoes each string into the
assembler comment next to its bytes. Strings can contain arbitrary
bytes, e.g. non-ASCII identifiers, and some assemblers reject those even
inside comments: `ptxas` (before CUDA 13.1) aborts with "Unexpected
non-ASCII character encountered" (JuliaGPU/CUDA.jl#3274). Escape the
string, as is already done when it is emitted as a quoted `.asciz`
directive.

Building the escaped comment is no longer free like the lazy `Twine` it
replaces, so only do it for verbose assembly output.
DeltaFile
+31-0llvm/test/DebugInfo/NVPTX/debug-str-nonascii.ll
+15-5llvm/lib/CodeGen/AsmPrinter/DwarfStringPool.cpp
+46-52 files

LLVM/project 816dd80 — llvm/include/llvm/CodeGen/PBQP ReductionRules.h

Explain why the assert exempts a node with no finite option

Assisted-by: Claude Opus 5.5
DeltaFile
+5-3llvm/include/llvm/CodeGen/PBQP/ReductionRules.h
+5-31 files

LLVM/project 72c0c0f — llvm/lib/CodeGen RegAllocPBQP.cpp

Get RegisterClassInfo from MachineRegisterClassInfoWrapperPass

Use the shared analysis instead of computing a private RegisterClassInfo, and
update its reserved registers after freezeReservedRegs(), as RegAllocBase does.

Assisted-by: Claude Opus 5.5
DeltaFile
+11-5llvm/lib/CodeGen/RegAllocPBQP.cpp
+11-51 files

LLVM/project 443c345 — llvm/lib/CodeGen RegAllocBase.cpp

Define cleanupFailedDefs() before its use

Assisted-by: Claude Opus 5.5
DeltaFile
+36-40llvm/lib/CodeGen/RegAllocBase.cpp
+36-401 files

LLVM/project 2cc4f19 — llvm/docs ReleaseNotes.md, llvm/test/TableGen initialized.td unset-field-reference.td

address review comments
DeltaFile
+78-1llvm/test/TableGen/unset-field-reference.td
+0-34llvm/test/TableGen/initialized.td
+7-0llvm/docs/ReleaseNotes.md
+85-353 files

LLVM/project 22e6c38 — libcxx/include/__configuration attributes.h, libcxx/include/__numeric reduce.h transform_reduce.h

[libc++] Allow the compiler to reorder computation in reduction loops (#237918)

This PR allows Clang to vectorize and interleave loops in the reduction
algorithms: `std::reduce` and `std::transform_reduce`.
This is permitted by
https://eel.is/c++draft/numerics.defns#lib:GENERALIZED_SUM.

Currently it's enabled only for Clang, it's unclear if GCC has a direct
equivalent.

A new macro `_LIBCPP_ENABLE_LOOP_VECTORIZATION` is tentatively placed in
`__configuration/attributes.h`, though it's not an attribute per-se.
Ideally we might want to refactor `__configuration/pstl.h` to be less
PSTL-specific and put the new macro there instead.

Part of #234887
DeltaFile
+6-0libcxx/include/__configuration/attributes.h
+2-0libcxx/include/__numeric/transform_reduce.h
+1-0libcxx/include/__numeric/reduce.h
+9-03 files

LLVM/project 7adfcc6 — llvm/lib/CodeGen RegAllocBase.cpp

Remove braces around single line

*grumble* *grumble*
DeltaFile
+1-2llvm/lib/CodeGen/RegAllocBase.cpp
+1-21 files

LLVM/project 63122d8 — mlir/lib/Dialect/SMT/IR SMTTypes.cpp SMTAttributes.cpp, mlir/lib/Dialect/Transform/IR TransformTypes.cpp TransformAttrs.cpp

[mlir][NFC] Remove includes provided by generated declarations and definitions (#238848)

#236155 and #238735 made the generated declarations and definitions of
ops, attributes, types and interfaces include the core MLIR headers they
require. Includes that headers and source files only had for the
generated code are therefore redundant. This removes them in MLIR, Flang
and ClangIR.

Includes of headers that the hand-written code uses directly are kept,
even when the generated code includes them as well.

---------

Co-authored-by: Claude <noreply at anthropic.com>
DeltaFile
+0-4mlir/lib/Dialect/WasmSSA/IR/WasmSSADialect.cpp
+0-4mlir/lib/Dialect/Transform/IR/TransformAttrs.cpp
+0-3mlir/lib/Dialect/X86/IR/X86Dialect.cpp
+0-3mlir/lib/Dialect/Transform/IR/TransformTypes.cpp
+0-3mlir/lib/Dialect/SMT/IR/SMTTypes.cpp
+0-3mlir/lib/Dialect/SMT/IR/SMTAttributes.cpp
+0-20157 files not shown
+0-259163 files