[qt/clang/llvm]: Summary of bulk changes made
KDE Git Services - Bulk Change <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git repository change summary for qt/clang/llvm
Pushed by mirror-service into branch 'upstream/users/gandhi56/sandbox-vectorizer/topdown-vec'.
Changed from 1b7b2e7f4a91cfce1b7d248129f1d402e5cc1cd5 to 351d2fd4e8589c899703fbd9cd77f210ed0d6348
Acknowledgement was received that this change introduces only existing code that has been pushed to another public open source repository.
This change contains the following new commits:
Git commit c56ea6d942e7160d6d2ec82ace17a31c7806ae9e by GitHub (on behalf of Tomer Shafir) on 29/07/2026 at 23:29..
[MacroFusion] Add SDep param to predicates(NFC) (#212255)
This patch aims to extend the API for macro fusion predicates with an
additional SDep param which allows each predicate to individually decide
wether a pair should be macro fused based on the kind of dependency
between the 2 instructions.
A followup patch https://github.com/llvm/llvm-project/pull/212603
introduces a real user in AArch64.
https://invent.kde.org/qt/clang/llvm/-/commit/c56ea6d942e7160d6d2ec82ace17a31c7806ae9e
Git commit 397743f4301326b23f70d0f8505090eb8be30dcf by GitHub (on behalf of Erich Keane) on 29/07/2026 at 23:34..
[CIR] Implement complex rvalues NYI (#211645)
emitReturnOfRValue had an NYI for _Complex types, so returning one as an
Rvalue (see example of a lambda invoker) would NYI. Since the logic to
the store is already handled in the lower-to-LLVM, this ended up being a
pretty trivial patch.
Note; There are some differences in how this lowers, because our calling
convention for the ret is different here, and we maintain the 'complex'
type differently even through LLVM-IR. However, the IR looks to be
equivilent.
https://invent.kde.org/qt/clang/llvm/-/commit/397743f4301326b23f70d0f8505090eb8be30dcf
Git commit d998634dbeaa1b651026f1180043f68ba62c2313 by GitHub (on behalf of Daniil Kovalev) on 29/07/2026 at 23:43..
[PAC][clang] Enable `-fptrauth-elf-got` as part of pauthtest (#212446)
https://invent.kde.org/qt/clang/llvm/-/commit/d998634dbeaa1b651026f1180043f68ba62c2313
Git commit 3ca8b6e0afef0370c189721f71cb9092ea8009fd by GitHub (on behalf of Ayokunle Amodu) on 29/07/2026 at 23:48..
[CIR][CUDA] Add support for NVVM xchg builtins (#211815)
Adds codegen support for the scoped and unscoped NVVM atomic exchange
builtins:
`atom_xchg,` `atom_cta_xchg,` and `atom_sys_xchg.`
These are lowered to the corresponding CIR `cir.atomic.xchg` operations
and subsequently lowered to LLVM `atomicrmw xchg` instructions.
https://invent.kde.org/qt/clang/llvm/-/commit/3ca8b6e0afef0370c189721f71cb9092ea8009fd
Git commit 5e0a2aa0d72b832ee9a9b2f29d6183e1d94f4354 by GitHub (on behalf of compilersutra) on 30/07/2026 at 00:09..
[X86] Make WinEH crash test reliable under ASan (#212820)
The WinEH unwind `v2 error` test uses `not --crash` for malformed MIR
inputs.
In AddressSanitizer builds, the default `abort_on_error=0` can prevent
the
expected fatal error from being reported as a crash, causing FileCheck
to
receive no diagnostic output.
Set `ASAN_OPTIONS=abort_on_error=1` for the expected-crash invocations
in
`win64-eh-unwindv2-errors.mir`.
## Testing
- ASan build focused test passes.
- Non-ASan build focused test passes.
- Five additional serial ASan reruns pass.
- `git diff --check` passes.
Fixes #212684
Co-authored-by: aabhinavg1 <[email protected]>
https://invent.kde.org/qt/clang/llvm/-/commit/5e0a2aa0d72b832ee9a9b2f29d6183e1d94f4354
Git commit e82a934f56d27a06168d2e8c04edf3b223f4920f by GitHub (on behalf of Anshul Nigham) on 30/07/2026 at 00:14..
[docs] de-highlight code snippet errors in dark mode (#212894)
Apply https://github.com/llvm/llvm-project/pull/212698 to dark mode as
well as light mode.
https://invent.kde.org/qt/clang/llvm/-/commit/e82a934f56d27a06168d2e8c04edf3b223f4920f
Git commit 3889ccc1a35fdd3f18eecbc01663534fb3f64478 by GitHub (on behalf of wieDasDing) on 30/07/2026 at 00:46..
[llvm-ml] make TEXTEQU directive not to eagerly expand macros in arguments (#209526)
We observed a crash in `TEXTEQU` that pastes two macros into one.
```masm
.data
part1 TEXTEQU <1>
part2 TEXTEQU <0>
joined TEXTEQU part1, part2 ; crash
```
`part1` is immediately rewritten into `1` as integer, which is rejected
by `TEXTEQU` parser. We need to keep `part1` as identifier for `TEXTEQU`
to pick up later.
https://invent.kde.org/qt/clang/llvm/-/commit/3889ccc1a35fdd3f18eecbc01663534fb3f64478
Git commit e7b04c15e6b18294c923f874f16e2d5a8e885706 by GitHub (on behalf of Alexey Samsonov) on 30/07/2026 at 00:49..
[libc] Modernize and extend dirent.h header. (#212902)
Extend the `<dirent.h>` header with macro and types specified in recent
POSIX.1-2024:
* Add `posix_dent` structure, which has more fields than `dirent`, that
are actually used in practice. This struct would be identical to
`dirent` that we have on Linux
* Add `reclen_t` type for `d_reclen` field.
* Add macro `DT_BLK` and friends
Also, extend the tests to verify the values of `d_type` field, now that
we have the proper macro defined.
Assisted by: Gemini, human-verified
https://invent.kde.org/qt/clang/llvm/-/commit/e7b04c15e6b18294c923f874f16e2d5a8e885706
Git commit 5857e09ae75d08c93de717f5a2e1c0e2c1ddd06f by GitHub (on behalf of Finn Plummer) on 30/07/2026 at 01:05..
[NFC][HLSL] Fix msan errors in tests (#212901)
Some of the tests were not initializing all the fields prior to
generating metadata, this caused a read of uninitialized memory and
caused the sanitizer to fail.
Assisted by: Claude Opus 5
Caught here: https://lab.llvm.org/buildbot/#/builders/94/builds/19767
https://invent.kde.org/qt/clang/llvm/-/commit/5857e09ae75d08c93de717f5a2e1c0e2c1ddd06f
Git commit 1a5fc1c6b6bfff561f767d5e2ffe8b0a7d81cb34 by GitHub (on behalf of Chuanqi Xu) on 30/07/2026 at 01:21..
[mlir] [linalg] Fold broadcast/transpose into linalg.generic (#212415)
Currently we are able to fold broadcast/transpose into
linalg.elementwise. This patch extends the ability to fold
broadcast/transpose into linalg.generic.
For example,
```
%empty = tensor.empty() : tensor<8x16xf32>
%broadcasted = linalg.broadcast ins(%A : tensor<8xf32>) outs(%empty : tensor<8x16xf32>) dimensions = [1]
%result = linalg.generic {
indexing_maps = [affine_map<(d0, d1) -> (d0, d1)>,
affine_map<(d0, d1) -> (d0, d1)>],
iterator_types = ["parallel", "parallel"]
} ins(%broadcasted : tensor<8x16xf32>) outs(%B : tensor<8x16xf32>) {
^bb0(%in: f32, %out: f32):
%v = arith.addf %in, %in : f32
linalg.yield %v : f32
} -> tensor<8x16xf32>
```
we can fold the broadcast into:
```
%result = linalg.generic {
indexing_maps = [affine_map<(d0, d1) -> (d0)>,
affine_map<(d0, d1) -> (d0, d1)>],
iterator_types = ["parallel", "parallel"]
} ins(%A: tensor<8xf32>) outs(%B : tensor<8x16xf32>) {
^bb0(%in: f32, %out: f32):
%v = arith.addf %in, %in : f32
linalg.yield %v : f32
} -> tensor<8x16xf32>
```
For simplicity, we only consider all parallel linalg.generic right now.
AI assisted.
https://invent.kde.org/qt/clang/llvm/-/commit/1a5fc1c6b6bfff561f767d5e2ffe8b0a7d81cb34
Git commit 44a11330d9c246c7c042c16f26a10373956731f7 by GitHub (on behalf of Med Ismail Bennani) on 30/07/2026 at 01:44..
[lldb/script] Add class-based summary providers via ScriptedStringSummaryInterface (#210469)
https://invent.kde.org/qt/clang/llvm/-/commit/44a11330d9c246c7c042c16f26a10373956731f7
Git commit dc57785129b1e3dfd489ef8c39e74a262d90a0c2 by GitHub (on behalf of Jianjian Guan) on 30/07/2026 at 01:54..
[CIR][RISCV] Support XAndesPerf builtins (#211490)
https://invent.kde.org/qt/clang/llvm/-/commit/dc57785129b1e3dfd489ef8c39e74a262d90a0c2
Git commit bdddd3e7202477e37c0a73dd036a0377d762f2e6 by GitHub (on behalf of Zane Hambly) on 30/07/2026 at 02:37..
[X86] Apply the data32 mode switch in the Intel matcher (#212417)
In .code16, `data32 push 8` in Intel syntax assembled as `pushw $8` with
the 66 prefix dropped, and `data32 push 0x1234` truncated the immediate
to 16 bits. AT&T syntax gets both right.
`ForcedDataPrefix` is set while parsing either syntax, but only
`matchAndEmitATTInstruction` switched mode on it, so the Intel path took
the operand size from the mode and never saw the prefix.
Do the same switch in `matchAndEmitIntelInstruction`. The mode has to go
back to 16-bit before the instruction is emitted, otherwise the 32-bit
form is emitted without its 66 prefix. That function has several error
returns partway through matching, so a scope guard covers those.
Encodings after the change match both AT&T syntax and GNU as:
```
data32 push 8 [0x6a,0x08] -> [0x66,0x6a,0x08]
data32 push 0x1234 [0x68,0x34,0x12] -> [0x66,0x68,0x34,0x12,0x00,0x00]
```
Fixes #156286
https://invent.kde.org/qt/clang/llvm/-/commit/bdddd3e7202477e37c0a73dd036a0377d762f2e6
Git commit a01f8c85bcac35be5b6b9d5f081a3763feb5b530 by GitHub (on behalf of higher-performance) on 30/07/2026 at 02:38..
Speed up compilation of typical invocations of std::visit(std::variant<...>) for up to 11 types (#164196)
Similar to https://reviews.llvm.org/D90168 which was reverted (https://github.com/llvm/llvm-project/issues/62648#issuecomment-1832315651), but uses `switch` statements rather than function pointer tables.
https://invent.kde.org/qt/clang/llvm/-/commit/a01f8c85bcac35be5b6b9d5f081a3763feb5b530
Git commit 7ded638ea33b96d9fd628e2a5cbc06df12ede153 by GitHub (on behalf of William Tran-Viet) on 30/07/2026 at 03:12..
[libc++] Granularize `<optional>` (#206644)
Certain headers require `optional<T&>`, so it may be beneficial to split
out `optional<T>` and `optional<T&>`. This can allow consumers to only
bring in the `optional` flavour it needs..
- Parcel out the respective pieces into their own header.
- Certain sources rely on transitive includes brought in by
`<optional>`, so they're kept there for now, and only tests have been
fixed.
---------
Co-authored-by: Louis Dionne <[email protected]>
https://invent.kde.org/qt/clang/llvm/-/commit/7ded638ea33b96d9fd628e2a5cbc06df12ede153
Git commit 693d0a9d04fcbdd20730922f3218cfed701d3004 by GitHub (on behalf of Madhur Amilkanthwar) on 30/07/2026 at 03:17..
[SLP][modularisation][NFC] Extract InstructionsState (2/3) (#211461)
Move the InstructionsState class out of SLPVectorizer.cpp into the
existing private module SLPVectorizer/SLPCompatibilityAnalysis.{h,cpp}.
The class declaration (with trivial accessors) lives in the header; the
non-trivial method bodies are defined out-of-line in the .cpp:
isSameOperation
getMatchingMainOpOrAltOp
isMulDivLikeOp
isAddSubLikeOp
isCopyableElement
isExpandedBinOp
isExpandedOperand
isNonSchedulable
Part of the effort to modularize SLPVectorizer.cpp. See the RFC:
https://discourse.llvm.org/t/modularizing-slpvectorizer-cpp/90922
https://invent.kde.org/qt/clang/llvm/-/commit/693d0a9d04fcbdd20730922f3218cfed701d3004
Git commit c94c7cc893d72dfa37c1cfe667ea9dac6da5e4a4 by GitHub (on behalf of agozillon) on 30/07/2026 at 03:18..
[Flang][OpenMP] Remove present modifier application on descriptor (#211856)
This was a minor change upstreamed in the original PR:
https://github.com/llvm/llvm-project/pull/208133
However, it is a modification that needs a little more thought from a
specification perspective before it is rolled out, there's a number of
code bases that depend on the presence modifier being applied only to
the underlying data. However, this leads to inconsistencies when a user
makes use of any reference semantic modifiers when mapping as they
SHOULD be allowed to specify present applying to the descriptor. So, we
need to work out what the correct defualt behaviour is, and regardless
of the default support a user intentionally specifying presence
application on a descriptor via reference semantics.
For now, we will revert to previous state.
https://invent.kde.org/qt/clang/llvm/-/commit/c94c7cc893d72dfa37c1cfe667ea9dac6da5e4a4
Git commit e5359187080a4250c40fe9aee8b1cb9b518a63ef by GitHub (on behalf of Anutosh Bhat) on 30/07/2026 at 03:43..
[AArch64][SLP][NFC] Precommit scalar fmul extract cost test (#212837)
Precommit a baseline SLP test for the AArch64 scalar fmul extract cost.
The current cost model overestimates the cost of the lane-1 use, so only
one of the two fadd pairs is vectorized at the selected SLP threshold.
A follow-up patch will correct this #212739 should correct this.
https://invent.kde.org/qt/clang/llvm/-/commit/e5359187080a4250c40fe9aee8b1cb9b518a63ef
Git commit 3f28472185bb8df103f2fbf9f3ccc22b62f1fe1c by GitHub (on behalf of adeshcom14) on 30/07/2026 at 03:47..
[AMDGPU] Fix S_ADD_I32 frame index folding emitting COPY with immediate (#212440)
When eliminating a frame index in `S_ADD_I32 %fi, imm`,
`SIRegisterInfo::eliminateFrameIndex` can simplify `0 + offset` into a
COPY or S_MOV_B32. The pass used a `MachineOperand` reference captured
before `removeOperand()`, which becomes stale after operands are removed
and shifted. That caused the wrong opcode to be selected (`COPY` instead
of `S_MOV_B32`), producing invalid machine IR such as `copy s4, 4`.
The invalid COPY is later hit by Machine Copy Propagation, which asserts
when calling `getReg()` on the immediate source operand.
Co-authored-by: Matt Arsenault <[email protected]>
https://invent.kde.org/qt/clang/llvm/-/commit/3f28472185bb8df103f2fbf9f3ccc22b62f1fe1c
Git commit 508b5be88431b3cce7546baf752ed628a531d699 by GitHub (on behalf of Matt Arsenault) on 30/07/2026 at 03:53..
AMDGPU: Add supports-wgp subtarget feature (#212704)
https://invent.kde.org/qt/clang/llvm/-/commit/508b5be88431b3cce7546baf752ed628a531d699
Git commit b65d79f8800e3d15d1f6cbf1a52f5426da992b59 by GitHub (on behalf of Arseniy Obolenskiy) on 30/07/2026 at 04:15..
[AMDGPU] Exclude CDNA parts from POPS exiting wave id pattern (#210892)
POPS hardware is graphics-pipe-only and absent on compute-only CDNA
targets (gfx908, gfx90a, gfx940, gfx942, gfx950), which incorrectly
matched the isGFX9GFX10 predicate and selected a nonexistent register
https://invent.kde.org/qt/clang/llvm/-/commit/b65d79f8800e3d15d1f6cbf1a52f5426da992b59
Git commit f21b9cc9c6386cc1f4b057d8af6a3fdf617cddf9 by GitHub (on behalf of Erich Keane) on 30/07/2026 at 04:15..
[CIR] Implement __builtin_cpu_supports, _init, and _is (#212900)
These are pretty trivial checks to a builtin variable, so this
implements it for x86, as this shows up in self-build. The tests are
pulled from classic-codegen and shows that we do the reasonable thing
for each of them.
https://invent.kde.org/qt/clang/llvm/-/commit/f21b9cc9c6386cc1f4b057d8af6a3fdf617cddf9
Git commit d5c1b6cb92a9b77eee3d986171ed2dd6bb7bf972 by Anshil Gandhi on 30/07/2026 at 04:38..
[SandboxIR] Fix notifyEraseInstr to skip scheduled neighbors
Guard both loops with !PredN->scheduled() / !SuccN->scheduled() so
scheduled neighbors are left untouched, and add a unit test that erases
a node with one scheduled and one unscheduled predecessor to cover the
fix.
https://invent.kde.org/qt/clang/llvm/-/commit/d5c1b6cb92a9b77eee3d986171ed2dd6bb7bf972
Git commit 2f3a5431cb59af5185858f0f0de406fcb54c9e36 by Anshil Gandhi on 30/07/2026 at 04:38..
[SBVec] Add top-down vectorization to the unified Sandbox Vectorizer
Extend the Sandbox Vectorizer's `bottom-up-vec` pass so a single
implementation can vectorize in either direction, and add the top-down
strategy that walks def-use chains forward from a seed.
Direction selection
--------------------
The pass direction is chosen from the Region's auxiliary pass argument:
"bottom-up" (or empty, the default) and "top-down" map onto a
SchedDirection, and any other value is rejected with a fatal usage error.
The vectorizer always runs in the same direction as the scheduler.
Top-down traversal
------------------
Bottom-up starts from a seed slice (e.g. stores to consecutive addresses)
and recurses into operands. Top-down instead starts from a seed of
consecutive loads and recurses into *users*:
- vectorizeRec() registers the current bundle's vector (pre-order) before
recursing, so instructions are marked vectorized as soon as they are
claimed. This prevents sibling user bundles from claiming the same
instruction and guarantees termination.
- VecUtils::getNextUserBundles() drives the walk. For each user of lane 0
it tries to assemble a matching user for every remaining lane, requiring
the same opcode, type, parent block, and operand-usage indices, and
claiming each instruction at most once. Only complete bundles (one user
per lane) are returned.
- A non-Widen legality result stops the walk down that path: the bundle is
left scalar and no action is recorded. DiamondReuse results cannot occur
top-down because already-vectorized users are skipped, so a bundle never
contains an instruction already in InstrMaps.
Operand and external-use handling
---------------------------------
Because a user bundle is emitted after its operand bundle, emitVectors()
looks up each operand's vector in InstrMaps and creates a pack when the
operand was not vectorized. emitUnpacksForExternalUses() now redirects
only the genuinely external (non-vectorized) uses via replaceUsesWithIf(),
instead of a blanket replaceAllUsesWith() that would corrupt the operands
of user bundles not yet emitted. Scheduling is currently skipped for the
top-down direction (TODO).
Refactoring
-----------
Unify the two strategies to avoid code duplication: introduce a shared
BundleTy alias, move user-bundle collection into VecUtils (with unit
tests), and thread the direction through legality checks and vector
emission.
Co-authored-by: Cursor <[email protected]>
https://invent.kde.org/qt/clang/llvm/-/commit/2f3a5431cb59af5185858f0f0de406fcb54c9e36
Git commit 9a33269f2124e3e094cf9efda1caf90894d2e39a by Anshil Gandhi on 30/07/2026 at 04:38..
[SBVec] Refactor BottomUpVec pass for clarity and maintainability
- Corrected comments to clarify the direction of def-use and use-def chains.
- Changed the initialization of the SchedDirection variable to improve clarity.
- Updated documentation in vectorizeRec() to better describe the purpose of UserBndl.
- Removed outdated TODO comment regarding top-down vectorization scheduling.
https://invent.kde.org/qt/clang/llvm/-/commit/9a33269f2124e3e094cf9efda1caf90894d2e39a
Git commit a5906955fcabe3be656f410f100e4bb73d9e9c5b by Anshil Gandhi on 30/07/2026 at 04:38..
[SBVec] Track claimed users across bundles
https://invent.kde.org/qt/clang/llvm/-/commit/a5906955fcabe3be656f410f100e4bb73d9e9c5b
Git commit 25ff34637f6d1535ad90dc6431c9adcdef35af8f by Anshil Gandhi on 30/07/2026 at 04:38..
3 element tests
- nits
https://invent.kde.org/qt/clang/llvm/-/commit/25ff34637f6d1535ad90dc6431c9adcdef35af8f
Git commit 4604b8c0b6178f6bec133f9afe6465c42522e317 by Anshil Gandhi on 30/07/2026 at 04:38..
Add 3-way test to check for consecutive matching
https://invent.kde.org/qt/clang/llvm/-/commit/4604b8c0b6178f6bec133f9afe6465c42522e317
Git commit b13012291955c562d58a3be765fd5a38c5a50dd6 by Anshil Gandhi on 30/07/2026 at 04:38..
Pass Claimed by ref to getNextUserBundles
A user should not be claimed by multiple successful
bundles. Added a test for this.
https://invent.kde.org/qt/clang/llvm/-/commit/b13012291955c562d58a3be765fd5a38c5a50dd6
Git commit e161ca34728c1698456bf56eed6fa03bbb5528f9 by Anshil Gandhi on 30/07/2026 at 04:38..
Remove stores
https://invent.kde.org/qt/clang/llvm/-/commit/e161ca34728c1698456bf56eed6fa03bbb5528f9
Git commit 49e9537efdaf975cad0f6bed2c186e2f6a093738 by Anshil Gandhi on 30/07/2026 at 04:38..
Refactor getNextUserBundles
https://invent.kde.org/qt/clang/llvm/-/commit/49e9537efdaf975cad0f6bed2c186e2f6a093738
Git commit 919cf64aa6f80218576e45b734f8088b6015d04f by Anshil Gandhi on 30/07/2026 at 04:38..
Add a cl::opt to limit the number of users visited
https://invent.kde.org/qt/clang/llvm/-/commit/919cf64aa6f80218576e45b734f8088b6015d04f
Git commit 351d2fd4e8589c899703fbd9cd77f210ed0d6348 by Anshil Gandhi on 30/07/2026 at 04:38..
Refactor VecUtilsTest for readability
https://invent.kde.org/qt/clang/llvm/-/commit/351d2fd4e8589c899703fbd9cd77f210ed0d6348