[AArch64][GlobalISel] Add tablegen pattern for uaddo combine (#198724)
Related to #197693 which filters the worklist to only include opcodes
for which there are combines. It's mostly handled by canMatchOpcode
which is tablgen'ed but some old combines like this one are missing a
tablegen pattern and require extra handling. This adds a simple wrapper
so it gets picked up by canMatchOpcode and we can delete the C++
handling.
Assisted-by: codex
[clang][ASTImporter] Fix of crash at ConstraintSatisfaction import (#197407)
Null pointer dereference could happen during `ASTImporter` import of a
`ConstraintSatisfaction` object.
[GVN] Properly combine AA metadata if available load is hoisted (#197948)
Ensure the AA metadata are properly merged between the new load and the
old one during PRE. Actually set `DoesKMove` in `combineMetadataForCSE`,
otherwise the new load is assumed not to move, which is not correct if
the new load has happened to be hoisted.
Fixes: https://github.com/llvm/llvm-project/issues/196787.
[DenseMap] Invalidate iterators on erase (#199369)
Tighten DenseMap's `erase` contract so that, like `insert` and `grow`,
it invalidates iterators and references obtained before the call.
Under the current tombstone-based deletion this is purely an
LLVM_ENABLE_ABI_BREAKING_CHECKS check — the bucket array is not actually
mutated for other entries — but it surfaces stale-iterator-after-erase
patterns now rather than when DenseMap's deletion scheme changes.
Mirrors the SmallPtrSet change in #96762, which dropped tombstones in
small mode and likewise had `erase` invalidate iterators.
Depends on #198982 and #199365
[IR] Inline remove_if in PMDataManager::removeNotPreservedAnalysis (#199571)
PR #198982 rewrote removeNotPreservedAnalysis to use DenseMap::remove_if
with one predicate shared across two call sites. The predicate is always
inlined; the cost is that two call sites make
DenseMapBase::remove_if<...>
itself emit out of line instead of inlining into the caller. As this
runs
after every modifying codegen pass (legacy PM), it shows up as a small
instructions:u regression, most visibly at -O0 where the legacy codegen
PM
is a large fraction of compile time:
https://llvm-compile-time-tracker.com/compare.php?from=69a5cf515fd317bcf918e48de9137dd8549870c5&to=6302439f5aaea6cb776d8ceb5c2ef9108fccf702&stat=instructions%3Au
Collect the maps into a SmallVector and prune them from a single
remove_if
call site, so the instantiation is inlined again.
[InferAttrs] Annotate math and basic string libcalls with `nosync` (#197761)
Math libcalls as well as some simple string ones do not create
synchronizes-with edges, thus `nosync` may be derived.
Co-authored-by: Johannes Doerfert <jdoerfert.llvm at gmail.com>
www/iocaine: Add new port
Iocaine is the deadliest poison known to AI since it poisons AI models
by generating an infinite maze of garbage for them to consume.
WWW: https://iocaine.madhouse-project.org
PR: 287944
Reported by: Sebastian Oswald <sko at rostwald.de>
Co-authored-by: Paul Armstrong <freebsd at otoh.org>
Tested-by: pi, void at f-m.fm, Mark Millard <marklmi26-fbsd at yahoo.com>
Approved by: osa, vvd (Mentors, implicit)
[RISCV] Use append TableGen feature in RISCVInstrInfoXqci.td (#199603)
This improves the readability of the file.
An AI came up with the patch which I reviewed and ensured that the tests
pass.
[mlir][x86] Fix - multiple issues / F8 support for AMX dot-product lowering (#196984)
This patch fixes issues or support additional patterns for AMX
`dot-product` lowering.
1. Fix issue related to write-back to `C` matrix,
2. Supports additional lowering pattern where the cache tile sizes are:
32,32,32,
3. Online packing - loop peeling is now based on `step` size,
4. Extends support for `f8` lowering (`mx-fp8` lowering will be
supported after vector.contract has `mx` support).
[NFC] [clangd] [C++20] [Modules] Fix false duplicate module warning for equivalent paths (#199343)
When checking for multiple source files declaring the same module, the
comparison used raw string equality on file paths. This causes false
positives when the same file is represented by different but equivalent
path strings.
Use pathEqual(normalizePath(...), normalizePath(...)) instead to compare
canonical paths, consistent with how clangd handles path comparisons
elsewhere.