LLVM/project 9903542 — llvm/lib/Transforms/IPO AttributorAttributes.cpp

[NFC][Attributor] Reach fixpoint in call site AACallEdges for direct calls

A direct call whose callee has no callback metadata only calls its callee, so
its call site AACallEdges cannot change after initialization. Add the edge in
initialize and reach a fixpoint there, instead of updating the attribute twice
to find out. AACallEdgesFunction already skips the call site attribute for such
calls since #232616; both now share getOnlyCallee().

Other attributes still create call site AACallEdges for direct calls, e.g.,
AAInterFnReachability and the AMDGPU attributor. On a generated module with
2,001 functions and 15,986 calls, this removes all updates of call site
AACallEdges. The total number of updates goes from 304,263 to 272,291 with
-passes=attributor, from 207,815 to 175,843 with -passes=attributor-light, and
from 35,977 to 16,005 with -passes=amdgpu-attributor. The wall time does not
change measurably on that module, because these updates are cheap.

This PR was assisted by AI but I reviewed all the changes.
DeltaFile
+20-2llvm/lib/Transforms/IPO/AttributorAttributes.cpp
+20-21 files

LLVM/project 800aede — llvm/lib/Target/AMDGPU AMDGPUAttributor.cpp

[NFC][AMDGPU] Don't create call site AACallEdges for direct calls

AAAMDGPUMinAGPRAlloc and AAAMDGPUNoLDSDMA asked for a call site AACallEdges for
every call that is not an intrinsic, only to get its callees. For a direct call
whose callee has no callback metadata, that callee is the only one, so use it
directly, like AACallEdgesFunction does since #232616. Calls to callback brokers
still use AACallEdges, because thebroker also calls the callback target.

On a generated module with 2,001 functions and 15,986 calls,
-passes=amdgpu-attributor creates 2,001 instead of 11,987 abstract attributes,
and the median wall time goes from 95 ms to 84 ms.

This PR was assisted by AI but I reviewed all the changes.
DeltaFile
+36-27llvm/lib/Target/AMDGPU/AMDGPUAttributor.cpp
+36-271 files

LLVM/project e6ad6a1 — llvm/lib/ExecutionEngine/Orc ReOptimizeLayer.cpp

[spr] update

Created using spr 2.0.0-beta.2
DeltaFile
+1-2llvm/lib/ExecutionEngine/Orc/ReOptimizeLayer.cpp
+1-21 files

LLVM/project 2e990c2 — llvm/utils/sanitizers ubsan_ignorelist.txt

[spr] update

Created using spr 2.0.0-beta.2
DeltaFile
+23-9llvm/utils/sanitizers/ubsan_ignorelist.txt
+23-91 files

LLVM/project 4a69442 — llvm/lib/ExecutionEngine/Orc ReOptimizeLayer.cpp

[ORC] Match const void *Tag signature in orc_rt_lite_reoptimize_helper

SelfExecutorProcessControl::jitDispatchViaWrapperFunctionManager takes a const void *FnTag second parameter; using void *Tag in orc_rt_lite_reoptimize_helper's JITDispatch function pointer trips -fsanitize=cfi-icall.

This is needed to remove the `LIT_FILTER_OUT="ExecutionEngine/"` workaround in https://github.com/llvm/llvm-zorg/blob/d6d19aa00e80a00ee06119d173d1979dbeed1ab2/zorg/buildbot/builders/sanitizers/buildbot_functions.sh#L665 on https://lab.llvm.org/buildbot/#/builders/sanitizer-x86_64-linux-bootstrap-cfi and https://lab.llvm.org/buildbot/#/builders/sanitizer-aarch64-linux-bootstrap-cfi.

Assisted-by: Gemini
Pull-request: https://github.com/llvm/llvm-project/pull/237757
DeltaFile
+2-2llvm/lib/ExecutionEngine/Orc/ReOptimizeLayer.cpp
+2-21 files

LLVM/project ecdec08 — llvm/lib/ExecutionEngine/Orc/TargetProcess JITLoaderPerf.cpp

[ORC] Export perf JIT loader wrapper symbols with LLVM_ALWAYS_EXPORT

PerfSupportPlugin resolves llvm_orc_registerJITLoaderPerf{Start,End,Impl} dynamically from process symbols, which fails when static executables are built with -fvisibility=hidden.

This is needed to remove the `LIT_FILTER_OUT="ExecutionEngine/"` workaround in https://github.com/llvm/llvm-zorg/blob/d6d19aa00e80a00ee06119d173d1979dbeed1ab2/zorg/buildbot/builders/sanitizers/buildbot_functions.sh#L665 on https://lab.llvm.org/buildbot/#/builders/sanitizer-x86_64-linux-bootstrap-cfi.

Assisted-by: Gemini
Pull-request: https://github.com/llvm/llvm-project/pull/237756
DeltaFile
+6-6llvm/lib/ExecutionEngine/Orc/TargetProcess/JITLoaderPerf.cpp
+6-61 files

LLVM/project f6d6608 — llvm/utils/sanitizers ubsan_ignorelist.txt

[cfi] Ignore cfi-icall on LLVMContext::yield and JIT calls

LLVMContextSetYieldCallback casts a C callback with a mismatched pointer type, and ExecutionEngine / JIT tools invoke runtime-generated JIT code outside the link-time CFI jump table.

This is needed to remove the `LIT_FILTER_OUT="ExecutionEngine/"` workaround in https://github.com/llvm/llvm-zorg/blob/d6d19aa00e80a00ee06119d173d1979dbeed1ab2/zorg/buildbot/builders/sanitizers/buildbot_functions.sh#L665 on https://lab.llvm.org/buildbot/#/builders/sanitizer-x86_64-linux-bootstrap-cfi and https://lab.llvm.org/buildbot/#/builders/sanitizer-aarch64-linux-bootstrap-cfi.

Assisted-by: Gemini
Pull-request: https://github.com/llvm/llvm-project/pull/237755
DeltaFile
+25-1llvm/utils/sanitizers/ubsan_ignorelist.txt
+25-11 files

LLVM/project a582c3e — flang/lib/Lower/Support ReductionProcessor.cpp, llvm/lib/Target/Sparc DelaySlotFiller.cpp

Rebase, address comments

Created using spr 1.3.7
DeltaFile
+1,016-1,873llvm/test/CodeGen/AMDGPU/bf16.ll
+669-1,244llvm/test/CodeGen/AMDGPU/i1-to-bf16.ll
+722-204llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+846-0llvm/test/CodeGen/AMDGPU/GlobalISel/regbankcombiner-d16-load.mir
+405-387flang/lib/Lower/Support/ReductionProcessor.cpp
+379-392llvm/lib/Target/Sparc/DelaySlotFiller.cpp
+4,037-4,1001,780 files not shown
+55,650-27,2721,786 files

LLVM/project cff50d1 — llvm/lib/ExecutionEngine/Orc ReOptimizeLayer.cpp

[spr] update

Created using spr 2.0.0-beta.2
DeltaFile
+3-2llvm/lib/ExecutionEngine/Orc/ReOptimizeLayer.cpp
+3-21 files

LLVM/project 5516d42 — llvm/lib/ExecutionEngine/Orc/TargetProcess JITLoaderPerf.cpp

[spr] update

Created using spr 2.0.0-beta.2
DeltaFile
+6-6llvm/lib/ExecutionEngine/Orc/TargetProcess/JITLoaderPerf.cpp
+6-61 files

LLVM/project f10e7c8 — llvm/utils/sanitizers ubsan_ignorelist.txt

[spr] update

Created using spr 2.0.0-beta.2
DeltaFile
+10-0llvm/utils/sanitizers/ubsan_ignorelist.txt
+10-01 files

LLVM/project 9476660 — llvm/lib/ExecutionEngine/Orc ReOptimizeLayer.cpp

[ORC] Match const void *Tag signature in orc_rt_lite_reoptimize_helper

SelfExecutorProcessControl::jitDispatchViaWrapperFunctionManager takes a const void *FnTag second parameter; using void *Tag in orc_rt_lite_reoptimize_helper's JITDispatch function pointer trips -fsanitize=cfi-icall.

Assisted-by: Gemini
DeltaFile
+3-2llvm/lib/ExecutionEngine/Orc/ReOptimizeLayer.cpp
+3-21 files

LLVM/project 75771eb — llvm/lib/Transforms/Scalar LowerMatrixIntrinsics.cpp, llvm/test/Transforms/LowerMatrixIntrinsics multiply-fused-loops-large-matrixes.ll multiply-fused-loops.ll

[Matrix] Start fused loop FP accumulators at -0.0. (#237649)

Start FP accumulators at -0.0, the identity of fadd. The old start of
+0.0 can cause incorrect results.

PR: https://github.com/llvm/llvm-project/pull/237649
DeltaFile
+8-8llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-volatile.ll
+4-4llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-loops.ll
+4-2llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp
+2-2llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-loops-large-matrixes.ll
+18-164 files

LLVM/project dea6cf3 — llvm/lib/Transforms/Scalar LowerMatrixIntrinsics.cpp, llvm/test/Transforms/LowerMatrixIntrinsics dot-product-volatile-align.ll dot-product-float.ll

[Matrix] Start FP dot product reductions at -0.0. (#237677)

Same as https://github.com/llvm/llvm-project/pull/237649, also use -0.0
as identity value of FP dot product reductions.
DeltaFile
+8-8llvm/test/Transforms/LowerMatrixIntrinsics/dot-product-float.ll
+1-3llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp
+1-1llvm/test/Transforms/LowerMatrixIntrinsics/dot-product-volatile-align.ll
+10-123 files

LLVM/project 631be0d — llvm/lib/Target/RISCV RISCVISelLowering.cpp

[RISCV][P-ext] Convert riscv_psati/usati to RISCVISD::SATI/USATI in ReplaceNodeResults.

Instead of re-emitting an intrinsic.
DeltaFile
+15-4llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+15-41 files

LLVM/project 852e33b — offload/plugins-nextgen/amdgpu/src rtl.cpp

implement smarter version

Co-authored-by: Joseph Huber <huberjn at outlook.com>
DeltaFile
+14-11offload/plugins-nextgen/amdgpu/src/rtl.cpp
+14-111 files

LLVM/project e0a86c1 — llvm/include/llvm/ADT ConcurrentHashtable.h, llvm/include/llvm/DWARFLinker StringPool.h

[ADT] Fix dangling key in ConcurrentHashTableInfoByPtr::getKey (#237642)
DeltaFile
+6-32llvm/lib/DWARFLinker/Parallel/TypePool.h
+6-32llvm/include/llvm/DWARFLinker/StringPool.h
+25-0llvm/unittests/ADT/ConcurrentHashtableTest.cpp
+1-1llvm/include/llvm/ADT/ConcurrentHashtable.h
+38-654 files

LLVM/project b8ef6b0 — llvm/lib/Transforms/IPO Attributor.cpp, llvm/test/Transforms/Attributor cgscc-new-ref-edge.ll

Attributor: Update the call graph for functions with replaced uses (#231546)

When the Attributor replaced the uses of a value, it only marked the
function of the replaced value as needing a call graph update if that
value was an instruction. Replacing an argument with a function, e.g., a
function pointer passed by all callers, adds a reference to that function 
without updating the call graph. The next function pass in the CGSCC
pipeline then hit an assertion about new reference edges. Mark the
function of every changed use instead.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+48-0llvm/test/Transforms/Attributor/cgscc-new-ref-edge.ll
+7-4llvm/lib/Transforms/IPO/Attributor.cpp
+55-42 files

LLVM/project 883cb94 — mlir/include/mlir/TableGen Format.h, mlir/lib/TableGen Format.cpp

[mlir][tblgen] Finish checked formatting migration through PDLL

Register parsed TableGen source buffers before processing imported
records. Format the predicate before wrapping it in the generated
success return, and propagate failure without appending an invalid
declaration.

Adapt shared formatting messages to PDLL diagnostics. Anchor the primary
at the import in the main document so LSP publishes it, and retain the
constraint definition, multiclass instantiations, and nested PDLL import
locations as notes. Formatting errors return through the parser and
leave the language server alive for subsequent edits.

Deprecate pointer-taking factories, lazy object types, PHKind shims, and
the unchecked summary helper while retaining compatibility behavior.
Migrate successful format tests and suppress warnings locally around
intentional legacy tests. Document recoverable import errors in the PDLL
reference.


    [9 lines not shown]
DeltaFile
+98-25mlir/lib/Tools/PDLL/Parser/Parser.cpp
+78-21mlir/unittests/TableGen/FormatTest.cpp
+79-0mlir/test/mlir-pdll-lsp-server/format-errors.test
+78-0mlir/test/mlir-pdll/Parser/format-errors.pdll
+18-5mlir/include/mlir/TableGen/Format.h
+7-0mlir/lib/TableGen/Format.cpp
+358-513 files not shown
+371-519 files

LLVM/project 9db43d4 — mlir/docs/DefiningDialects Operations.md, mlir/lib/TableGen CodeGenHelpers.cpp

[mlir][tblgen] Check substitutions throughout code generation

Migrate generator and shared-verifier emission to eager fatal formatting
with template-definition origins and operation use notes. Synthesized
properties without a record fall back to the operation location.
Speculative attribute and property uniquing now consumes checked errors
and falls back to inline verification. Keep value-specific bindings
local to their verifier.

Add checked summary-expression formatting that retains the escaped
segment and propagates its owned error to the source diagnostic
boundary. Expose reference-taking tgfmt and tgfmtv overloads returning
Expected, retain transition aliases, and document formatting semantics
and diagnostics in the existing ODS guide.

Escape literal dollars in a test builder comment, and keep the nested
matcher error test focused on its intended invalid DAG. Add regression
coverage for shared and inline constraints, summaries, attribute
templates, interface templates, and the reference-taking API.

    [6 lines not shown]
DeltaFile
+163-78mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
+196-0mlir/test/mlir-tblgen/format-substitution-errors.td
+104-67mlir/tools/mlir-tblgen/AttrOrTypeFormatGen.cpp
+109-57mlir/tools/mlir-tblgen/OpFormatGen.cpp
+107-30mlir/lib/TableGen/CodeGenHelpers.cpp
+90-0mlir/docs/DefiningDialects/Operations.md
+769-23212 files not shown
+1,014-29718 files

LLVM/project fad8fc9 — mlir/include/mlir/TableGen CodeGenHelpers.h, mlir/lib/TableGen CodeGenHelpers.cpp Format.cpp

[mlir][tblgen] Diagnose substitution failures at their source

Render owned formatting errors as source-aware messages, preserving
inner definition origins, use sites, and multiclass location arrays.
Consume every error payload before printing and terminating so joined
errors and their notes are not lost.

Add eager fatal wrappers for generator boundaries and use them for trait
predicates. Missing substitutions now fail in TableGen with the
template, failed occurrences, and available bindings instead of
generating bad C++. Snapshot the trait context before value verifiers
add temporary bindings, so an inline attribute check cannot accidentally
bind $_self for a trait.

Share message construction between generic logging and source
diagnostics. Use portable death-test expressions and handle invalid
success payloads defensively at the fatal-reporting boundary.

Validation: 74 TableGen unit tests and all 69 mlir-tblgen lit tests

    [6 lines not shown]
DeltaFile
+128-2mlir/unittests/TableGen/FormatTest.cpp
+81-27mlir/lib/TableGen/Format.cpp
+60-0mlir/test/mlir-tblgen/op-error.td
+42-0mlir/lib/TableGen/CodeGenHelpers.cpp
+27-1mlir/include/mlir/TableGen/CodeGenHelpers.h
+10-4mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
+348-341 files not shown
+361-347 files

LLVM/project c7b2e8f — mlir/include/mlir/TableGen Format.h, mlir/lib/TableGen Format.cpp

[mlir][tblgen] Add checked formatting with owned substitution errors

Add tgfmtChecked and tgfmtvChecked, validating all placeholders before
rendering and returning owned FmtError payloads on failure. Retain
failed occurrences, available substitutions, and provenance for
diagnostic users.

Unify builtin and custom binding storage: addSubst("_self", ...) now
aliases withSelf(), including consistent last-registration-wins
behavior. Parse positional indices as decimal, so $010 means 10 instead
of 8 and $08 means 8 instead of reaching an unreachable path.
Unrepresentable indices become checked errors or legacy markers instead
of assertions.

Keep the legacy API lazy, including observing later context mutations.
The compatibility PHKind entry points remain until caller migration.

Validation: 66 TableGen unit tests; unchecked Expected arguments
rejected by the compiler. Include snapshot logging and typed error

    [4 lines not shown]
DeltaFile
+226-2mlir/unittests/TableGen/FormatTest.cpp
+167-28mlir/lib/TableGen/Format.cpp
+128-26mlir/include/mlir/TableGen/Format.h
+521-563 files

LLVM/project 131f7eb — llvm/lib/CodeGen/SelectionDAG SelectionDAGISel.cpp

[SelectionDAGISel] Make IsPredicateKnownToFail return a bool and take Index by reference. NFC (#237511)

This matches all of the predicate check functions it calls. This reduces
the code, but I don't expect any performance impact. The function is
likely inlined.

Also replace Table[Index-1] with Opcode.

Assisted-by: Claude
DeltaFile
+32-49llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+32-491 files

LLVM/project 34bf6e6 — mlir/docs PDLL.md, mlir/include/mlir/TableGen Format.h

[mlir][tblgen] Finish checked formatting migration through PDLL

Register parsed TableGen source buffers before processing imported
records. Format the predicate before wrapping it in the generated
success return, and propagate failure without appending an invalid
declaration.

Adapt shared formatting messages to PDLL diagnostics. Anchor the primary
at the import in the main document so LSP publishes it, and retain the
constraint definition, multiclass instantiations, and nested PDLL import
locations as notes. Formatting errors return through the parser and
leave the language server alive for subsequent edits.

Deprecate pointer-taking factories, lazy object types, PHKind shims, and
the unchecked summary helper while retaining compatibility behavior.
Migrate successful format tests and suppress warnings locally around
intentional legacy tests. Document recoverable import errors in the PDLL
reference.


    [8 lines not shown]
DeltaFile
+98-25mlir/lib/Tools/PDLL/Parser/Parser.cpp
+78-21mlir/unittests/TableGen/FormatTest.cpp
+79-0mlir/test/mlir-pdll-lsp-server/format-errors.test
+78-0mlir/test/mlir-pdll/Parser/format-errors.pdll
+18-5mlir/include/mlir/TableGen/Format.h
+7-0mlir/docs/PDLL.md
+358-513 files not shown
+371-519 files

LLVM/project 450c19f — mlir/docs/DefiningDialects Operations.md, mlir/lib/TableGen CodeGenHelpers.cpp

[mlir][tblgen] Check substitutions throughout code generation

Migrate generator and shared-verifier emission to eager fatal formatting
with template-definition origins and operation use notes. Synthesized
properties without a record fall back to the operation location.
Speculative attribute and property uniquing now consumes checked errors
and falls back to inline verification. Keep value-specific bindings
local to their verifier.

Add checked summary-expression formatting that retains the escaped
segment and propagates its owned error to the source diagnostic
boundary. Expose reference-taking tgfmt and tgfmtv overloads returning
Expected, retain transition aliases, and document formatting semantics
and diagnostics in the existing ODS guide.

Escape literal dollars in a test builder comment, and keep the nested
matcher error test focused on its intended invalid DAG. Add regression
coverage for shared and inline constraints, summaries, attribute
templates, interface templates, and the reference-taking API.

    [5 lines not shown]
DeltaFile
+163-78mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
+196-0mlir/test/mlir-tblgen/format-substitution-errors.td
+104-67mlir/tools/mlir-tblgen/AttrOrTypeFormatGen.cpp
+109-57mlir/tools/mlir-tblgen/OpFormatGen.cpp
+107-30mlir/lib/TableGen/CodeGenHelpers.cpp
+90-0mlir/docs/DefiningDialects/Operations.md
+769-23212 files not shown
+1,016-29918 files

LLVM/project 6d0353a — llvm/lib/Transforms/Vectorize LoopVectorize.cpp, llvm/test/Transforms/LoopVectorize runtime-checks-hoist.ll

[LV] Erase memcheck block early if the memory checks fold to false. (#237731)

If the memory runtime checks fold to false, a dead compare may be left
behind that keeps the hoisted bound expansions alive. Later expansions
may then re-use them, and they get removed when cleaning up the dead
check block, triggering an assertion in SCEVExpanderCleaner.

Clean up the memcheck block directly after creating the checks if they
folded to false, to avoid further expansions re-using anything left over
from MemCheckExp.
DeltaFile
+128-0llvm/test/Transforms/LoopVectorize/runtime-checks-hoist.ll
+5-0llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+133-02 files

LLVM/project 4d367cd — offload/plugins-nextgen/amdgpu/src rtl.cpp

fix wraparound bug and atomic release
DeltaFile
+4-4offload/plugins-nextgen/amdgpu/src/rtl.cpp
+4-41 files

LLVM/project fbf4f50 — llvm/lib/Transforms/Vectorize SLPVectorizer.cpp, llvm/test/Transforms/SLPVectorizer/AArch64 copyable-lane-external-use.ll

[SLP]Extract copyable scalars for isomorphic external users

External users, isomorphic to the user of a node with a copyable
scalar, extract it from that node, so other trees can reuse the
vector instead of gathering lanes from different vectors.

Assisted-by: Cursor

Reviewers: bababuck, RKSimon

Pull Request: https://github.com/llvm/llvm-project/pull/234324
DeltaFile
+12-32llvm/test/Transforms/SLPVectorizer/AArch64/copyable-lane-external-use.ll
+40-2llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+52-342 files

LLVM/project 85f1bbb — llvm/lib/Transforms/Vectorize SLPVectorizer.cpp, llvm/test/Transforms/SLPVectorizer/X86 minbw-and-mask-unsigned-operand.ll

[SLP]Use operand signedness for forwarded demoted and operand

A demoted and with a full-width mask is replaced by its other operand.
If that operand is narrower, the cast in the final shuffle took its
signedness from known bits, sign-extending unsigned-demoted values.
Cast the operand with its own signedness, as the regular binop path
does.

Fixes #237530

Assisted-by: Cursor

Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/237748
DeltaFile
+5-1llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+1-1llvm/test/Transforms/SLPVectorizer/X86/minbw-and-mask-unsigned-operand.ll
+6-22 files

LLVM/project fd23f88 — llvm/test/Transforms/SLPVectorizer/X86 minbw-and-mask-unsigned-operand.ll

[SLP][NFC]Add a test with incorrect flag propagation, NFC



Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/237746
DeltaFile
+56-0llvm/test/Transforms/SLPVectorizer/X86/minbw-and-mask-unsigned-operand.ll
+56-01 files