[OpenMP] Preserve host capture lifetimes in frontend lowering
Mark captured alloca/global storage nofreeobj when Clang emits a synchronous
host parallel call. This preserves lifetime across outlining without claiming
that escaped capture slots are noalias or immutable, and without extending the
lifetime guarantee to pointers loaded from those slots.
Mark OpenMPIRBuilder's fresh host capture aggregate noalias and nofreeobj.
This covers the lowering path used by Flang and Clang's IRBuilder mode.
Replace callback Attributor seeding with frontend and translation tests,
including escaped captures, heap references, firstprivate pointers, debug
wrappers, serialized regions, and optimized load hoisting with OpenMPOpt
disabled. Refresh the affected parameter-attribute checks.
[CodeGen] Address review: error for "=m|r" direct outputs too
A direct output whose chosen alternative is memory, e.g. "=m|r", still
crashed SelectionDAG, which exempted multiple-alternative operands from the
check and then asked for the address of an output with no value. Drop the
exemption and test "=m|r" with both instruction selectors. Name the
selector explicitly in the RUN lines rather than relying on -O levels,
since X86 GlobalISel can't lower inline asm and both X86 lines ran
SelectionDAG anyway. Drop "yet" from the error: Clang never emits a
direct memory output, so there are no plans to support one.
Assisted-by: Claude Opus 5.5
[CodeGen] Report an error for a direct inline asm output in memory
An inline asm output returned by value has no memory to write to, yet a
constraint such as "=rm" picks memory, the most general constraint, as
does "=m". SelectionDAG asserted on that ("Can only indirectify direct
input operands!"), and GlobalISel dereferenced a null pointer. Clang
never emits such an output, since it passes the address of a memory
output, but other IR can. Report "cannot handle direct memory outputs
yet for constraint 'm'" instead, like the other inline asm errors there.
Assisted-by: Claude Opus 5.5
[TargetInstrInfo] Address review: autogenerate greedy-inline-asm-fold.mir checks
Generate the checks with update_mir_test_checks.py so that the spills and
reloads around each folded inline asm are verified, not just the INLINEASM
itself. Fix the "=r" comment to describe the C "+r" operand, note that which
"+rm" pair greedy folds is its own choice, and add a "+&rm" case on an
uninitialized value showing that folding a pair whose tied use is undef
stores to the slot without loading from it.
Assisted-by: Claude Opus 5.5
[TargetInstrInfo] Fix folding inline asm operands next to tied operands
foldInlineAsmMemOperand() swapped a register operand for the target's
memory operands with MachineInstr::removeOperand(), which asserts when a
later operand is tied, because moving it would break the tie. Inline asm
lists every input after every output, so folding any operand that comes
before another tied pair asserted, e.g. an "rm" input followed by the
input of a "+r" operand, or one of two "+rm" operands. Without
assertions, the moved operands kept stale tie indices. Untie the
operands, rebuild the operand list, and re-tie the remaining pairs at
their new positions.
It also gave up when the register appears in more than one operand, e.g.
one value passed to two "rm" operands, which left the greedy allocator
unable to spill that value at all. Fold every such operand into the
stack slot.
Finally, take MayLoad from the folded operands rather than from every
read of the register: a folded def whose tied use is another virtual
[9 lines not shown]
iwm: add iwm_enable_ac_txq(); use it for command queue setup
Port iwm_enable_ac_txq() from OpenBSD. It's effictively the
command FIFO path in the existing iwm_enable_txq().
The OpenBSD driver does a bunch of TX aggregation queue setup in
iwm_enable_txq() which isn't relevant here just quite yet and
it doesn't currently hurt to leave the existing one here
whilst I figure out the next steps.
Locally tested:
* 3160, 7260, 8260, 9260 - STA mode
Obtained from: OpenBSD a6e25c727a2214219715b51ba6af2221d7e0d674
Differential Revision: https://reviews.freebsd.org/D60696
iwm: add phy/mac context tasks; clean up task stop; add net80211 MAC methods
* Add phy/mac tasks, the phy task is currently a placeholder
* Add in the MAC methods from net80211 that are called whenever
the VAP mode needs updating
* Mark the hardware as STOPPED during shutdown so scheduled tasks
don't run
The fun side of this work:
* detaching net80211 causes the parent method to be called which leads
to iwm_stop() being called, and at least one of the entry paths
into iwm_stop() has IWM_LOCK held, and we can't do a taskqueue_drain()
or taskqueue_drain_all() call with any lock held as it will sleep.
* the net80211 detach path is calling at least one of the MAC methods
during detach, and since the taskqueue is being deleted /before/
the net80211 detach path, we have to make sure nothing is actually
going to do taskqueue work after that!
[12 lines not shown]
[flang-rt][cuda] Remove deprecated usage of cudaGetDriverEntryPoint (#232485)
deviceContextTornDown() resolves cuDevicePrimaryCtxGetState through
cudaGetDriverEntryPointByVersion, using the installed driver version,
and fell back to the unversioned cudaGetDriverEntryPoint when that
failed. The unversioned entry point is deprecated since CUDA 12.5 and
triggers -Wdeprecated-declarations.
The fallback adds nothing: the ByVersion call is already required to
build, and the unversioned lookup uses the runtime version, which is
the case that fails when the runtime is newer than the driver. If the
versioned lookup fails, leave the function pointer null, which already
takes the conservative "cannot prove torn down" path.
[flang] Fix NOTIFY= placement checking and folding (#231660)
F2023 C933 permits NOTIFY= only in the image selector of an intrinsic
assignment's target variable. Before this patch, semantic analysis
accepted it in other contexts.
Assignment checking reuses the analyzed assignment's classification as
intrinsic or defined. For intrinsic assignment, an existing parse-tree
helper identifies the target variable's own image selector. The new
check permits a NOTIFY= specifier only if its parse-tree node belongs to
that selector's specifier list. It rejects NOTIFY= on separate
designators nested within the target variable.
If an operand error prevents assignment analysis, the checker avoids an
extra placement diagnostic on the target's own selector. Existing
duplicate-specifier diagnostics remain unchanged.
Before this patch, FoldOperation(CoarrayRef) dropped NOTIFY= from the
rebuilt reference. The change retains and folds the notification
[8 lines not shown]
[flang][NFC] Expose force-no-alias option via CommandLineOpts (#232568)
Move the force-no-alias cl::opt from a file-local static in
Pipelines.cpp
to CommandLineOpts.cpp and declare it extern in CommandLineOpts.h, so
other pipelines built on top of flang can honor the same setting without
re-registering the option.
drm/amd/display: Don't replace a sink mode that shares the native totals
From Adrian Betschart
f94a12ddd3184280c4a1d0ce4c8be7d36d0a52a3 in linux-6.18.y/6.18.57
54c998c55fc9cbc391b350d67b86e0c2a0748f1a in mainline linux
[mlir][Diagnostics] Set parallel diagnostic order ids without a lock (#232520)
failableParallelForEach tells its ParallelDiagnosticHandler which
element each thread is processing before every element and clears it
after, so diagnostics come out in element order.
The order id now lives in a thread-local slot naming its handler by a
monotonic id (no raw pointers, so a handler destroyed with a stale slot
naming it is harmless). A thread handles one element at a time per
handler, so the slot covers every thread whose loop is not nested in
another loop on the same thread.
200K single-op func.func through per-function cse, 96 threads: sys time
22.9s to 3.8s, wall 3.4s to 3.2s. Unittest pins the nested fallback and
outer-id preservation.
drm/dp: don't mark the AUX backlight enabled when enabling failed
From Oleg Keri
5b26dbb27c0cb0e1b92fc0626c6ae052da8ff7d6 in linux-6.18.y/6.18.57
707ce102521496c67860d81221b20c56d8255f2f in mainline linux
drm/amdgpu: skip the VMID 0 flush for VRAM
From Arunpravin Paneer Selvam
30dacb56f07283a1acb353ce81baef31f85396b0 in linux-6.18.y/6.18.57
87ceb8cba73d0b3c4025ff42495bccd8164acaed in mainline linux
drm/amd/display: Fix dangling pointer in plane reset function
From Evgenii Burenchev
3d8391d3149a1aeb93505a4f9fb9ed8364882c42 in linux-6.18.y/6.18.57
98cad4bd1443975d972f4c7f705980da03722a22 in mainline linux
drm/amd/display: Fix dangling pointer in CRTC reset function
From Evgenii Burenchev
3a03827bb3cda1527aa923f18160c449f2b4cf2c in linux-6.18.y/6.18.57
0aeed866cb938943908c3ba46422128e49d2d080 in mainline linux
drm/amd/display: Resize MST HDCP per-connector arrays to 32
From Harry Wentland
562d24ac214ba9530d88841088eb6adce5c537b5 in linux-6.18.y/6.18.57
261e0fe4e2c99f687114b64b10b98db964b475f4 in mainline linux
drm/amd/display: disable replay when crc source is enabled
From Ray Wu
b5896fc269e9f3b3b4a67a7ce78872bc3bbd3b25 in linux-6.18.y/6.18.57
a036db3953140d5c2816b056aa3e73b8e98d9bc0 in mainline linux
drm/amdgpu: force complete the KIQ ring fences on reset
From Jesse Zhang
c26cbd5c33cd72daa03079235de60688a3c97c52 in linux-6.18.y/6.18.57
fd65d1742992361fc2201ecb4e43411e6e417fcb in mainline linux
[BOLT] Expand builtin_unreachable recognition heuristics (#231258)
A jump to the address right past the end of a function (the result of
__builtin_unreachable()) was replaced with a nop only when the target
was within the function's padding (MaxSize). However, there is a corner
case for the very last function in a section: MaxSize equals Size, so
BOLT would see __builtin_unreachable() instead as as an interprocedural
reference to an address outside of any section, tripping the "cannot get
section for referenced address" assertion in
processInterproceduralReferences(). Fix this.
drm/amdgpu: force complete the MES ring fences on reset
From Jesse Zhang
7d722821e2f626c4e34c8510f0ce1d6f10c77a3b in linux-6.18.y/6.18.57
48dc279c3010ac8f91b1845b2abb3a1e9943a0f5 in mainline linux
[X86] Address review: test a tied input's untied read under -regalloc=fast
Add the case from the #229630 review, one value passed to an untied "r"
input and to the "0" input tied to an "rm" output, to show that the fast
register allocator no longer folds the output when everything fits.
Drop the -O0 RUN line from inline-asm-direct-mem-output-error.ll: it only
showed that "=rm" still picks memory at -O0, which asm-constraints-rm.ll
already tests, and there make the -O0 line name the instruction selector
and say that it tests the optimization level.
Assisted-by: Claude Opus 5.5
[TargetLowering][X86] Prefer 'r' over 'm' for foldable "rm" inline asm operands
An "rm" (register-or-memory) inline asm operand has always resolved to
'm', because getConstraintPreferences() picks the most general
constraint present, and 'm' is more general than 'r'. That's safe, since
memory can't run out, but it forces a value that could stay in a
register through a stack slot even when there's no register pressure
(https://github.com/llvm/llvm-project/issues/20571).
Prefer 'r' instead where the register allocator can fold the register
back to a stack slot when it runs out of registers, and mark the
register operand foldable (InlineAsm::Flag::setRegMayBeFolded()) so it
does. Both allocators can: the greedy allocator folds an operand when it
spills its value, and the fast allocator folds operands up front when
the asm's register operands wouldn't fit.
ParseConstraints() sets AsmOperandInfo::MayFoldRegister for an operand
whose constraint codes include 'r' and 'm' and are otherwise only
immediate codes, above -O0, on a target that opts in through the new
[26 lines not shown]
drm/amdkfd: Add bounds check for CRAT subtype length
From William Palacek
69164d6bdad5d6657e51436a3f602822f620a46a in linux-6.18.y/6.18.57
6e7566ba4739dd573c331adde1c96690f7a567bd in mainline linux