[OpenMPIRBuilder] Use generic pointers for outlined teams arguments (#222176)
createFakeIntVal models the thread and bound id arguments of the
function
outlined for a teams region as allocas. When the target's alloca address
space is not zero these were passed on as-is, so the outlined function
took
addrspace(5) pointers while __kmpc_fork_teams calls it with generic
ones.
Cast the alloca to address space zero when it is passed as a pointer,
which
only affects targets with a non-zero alloca address space such as
AMDGPU.
math/gap: update 4.14.0 → 4.16.1
30+ port options were added for all compiled packages.
This is in addition to non-compiled packages that come with
the base GAP.
ChangeLog: https://github.com/gap-system/gap/blob/v4.16.1/CHANGES.md
kernel - Update comments on PG_BUSY rules with page wirings
* Adjust code comments to reflect that a vm_page's wire_count can transition
from 1->0 without being busied under certain circumstances.
* The pmap system is allowed to do this when removing pages because other
references to the page are still present and there will be no race
against a vm_page freeing operation.
[IR] Avoid collecting COMDATs for non-module printing (#221460)
`AssemblyWriter` scans every global object in its constructor to collect
referenced COMDATs. That collection is only used when printing a
complete module, but the constructor also runs for standalone value and
instruction printing.
Move COMDAT emission into `printModule()`. Print each group at its first
global-object use and keep only a local set to avoid duplicate
declarations.
On `bench/sqlite/original/shell.ll` from `llvm-opt-benchmark`, the
median `opt -passes=dot-cfg` time dropped from 1.65 s to 0.40 s, about
4.1x faster. All 687 generated DOT files matched after normalizing
process-specific node IDs.
[flang-rt] Copy out only the modified suffix of an argument temporary (#222101)
`CopyOutAssign` currently copies the whole temporary back over the
original unconditionally. When the effective argument is not definable —
a named constant, for example — and the callee, conformingly, never
modified it, that copy-back stores unmodified bytes into storage that
may be read-only. With this change, `CopyOutAssign` scans the temporary
for the first element whose bit pattern differs from the original and
copies back only from that element through the end, in one fused pass:
an unmodified copy-out performs no stores at all, so compiler-generated
copy-out can never be the reason a conforming program writes into
read-only storage. The comparison is bitwise, which is exact here
because the temporary was created as a bitwise copy by `CopyInAssign`:
unmodified elements compare equal even for NaNs and padding bytes, which
a value comparison would misjudge.
The change is performance-neutral in practice (measurements summarized
in a comment below): copy-out's destination is essentially always
discontiguous — the temporary exists only because the actual argument
[11 lines not shown]
update the list of amdgpu files to build with sse
following the linux Makefiles it is amd/display/dc/dml*
and dcn401_soc_and_ip_translator.c
dml2_top_legacy.c is excluded as we don't build it
prompted by a shorter diff from daniel@
kernel - Fix cryptsetup bug / fix bug in mlockall()
* mlockall() uncovererd an old bug in the VM system that was previously
masked by other code. The VM system going way way back assumed that
wired pages were already wired and that at worst only a zero-fill was
needed, so the TRYPAGER() macro checked for the case.
However, when issuing a mlockall(), the refactored VM system uses
vm_fault() to bring in missing wired pages to satisfy the request,
was hitting the old condition, and doing a zero-fill instead.
* This caused cryptsetup() (one of the few programs to actually use
mlockall()) to seg-fault under typical conditions.
* Fix by removing that part of the conditional. Regardless of the
wiring flags, the pager is still tried for non-default VM objects.
Reported-by: mneumann, aly
[clang][Modules] make ActOnPrivateModuleFragmentDecl return non-null on success. (#223757)
his code
```cpp
module;
module :private;
export module Foo;
```
a Private module fragment here is illegal because it can only be
declared in a primary module interface unit, instead of raising an error
clang crashed because of this assertion
```cpp
assert((!getLangOpts().CPlusPlusModules ||
SeenGMF == (bool)this->TheGlobalModuleFragment) &&
"mismatched global module state");
```
the mismatch happened because `ParseModuleDecl` assigned ImporState
wether or not it was semantically correct:
```cpp
[12 lines not shown]
kernel - Fix pmap wiring bug
* Fix a pmap wiring accounting bug. The refactored wiring and pmap code
expects only a single increment for a pmap wiring when the "W" bit
transitions from 0 to 1, plus a count on the vm_page.
Found-by: Claude Sonnet 5 (aly)
uipc_usrreq: Fix unix-domain socket inode assignment.
1. `if (unp->unp_ino == 0) unp->unp_ino = unp_ino++' would assign
zero the first time around by mistake, and then assign nonzero
after that. `if (unp->unp_ino == 0) unp->unp_ino = ++unp_ino'
avoids this silliness.
2. Make the ++unp_ino part atomic.
PR kern/60729: incosistent st_ino from the first stat(2) on a socket
[Attributor] Only seed live internal callees during deduction (#222226)
When a basic block becomes live, assumeLive marks its internal callees
live to seed attributes for deduction. Currently, this also happens when
a liveness AA is initialized during MANIFEST or CLEANUP, after the
fixed-point iteration has finished.
In CGSCC runs, cleanup can query the liveness of a shared caller for
each callee SCC. Seeding all internal callees in that caller's live blocks
can then cause quadratic initialization work.
Restrict this bulk seeding to SEEDING and UPDATE. Continue recording
live blocks and allow on-demand attribute queries in the later stages.
[AMDGPU] Form VOPD3 pairs with pair-local literal moves
This PR lets GCNCreateVOPD form a VOPD3 pair when its components use one
distinct non-inline constant. VOPD3 cannot encode literal operands, but src0
can read scalar registers, so we move the value to a free SGPR. If both
components use the same value, one move serves both.
We reject pairs that need two values because two moves add more instructions
than one fusion removes. We also reject functions without tracked liveness and
functions optimized for size.
We use one reverse liveness walk to find an SGPR that is free over each
pair-local range. We exclude reserved registers and VCC. Disjoint selected
pairs can reuse the same SGPR, and each accepted pair adds at most one
S_MOV_B32 for the one instruction removed by fusion.
When overlapping candidates form the same number of pairs, we prefer the set
that needs fewer scalar moves. We keep pair count as the primary objective.
[2 lines not shown]
[NFC][AMDGPU] Separate VOPD candidate selection (#223518)
This PR separates VOPD candidate matching from selection without
changing generated code.
`GCNCreateVOPD` used to choose a pair as soon as `tryMatchVOPDPair`
found one. That made matching and selection one operation: the first
match consumed both instructions before later work could decide whether
the pair was usable.
We now record matches in program order, collect every adjacent
candidate, and select the same greedy non-overlapping set in a separate
step.
This gives later changes a place to reject or rank a candidate without
hiding an overlapping pair that uses its second instruction.
NAS-143145 / 27.0.0-BETA.1 / always trigger smbd service reload on attachment op (#19784)
This commit adds a manual reload of the smb.conf whenever we trigger a
filesystem attachment event for an SMB share. Established SMB sessions
will only check for changes to smb.conf every 180 seconds which can
cause TCON refused messages. This behavior regressed when we
transitioned from the old libzfs python library, which necessitated a
large-scale service / filesystem attachment refactor.
NAS-143860 / 27.0.0-BETA.1 / Restart the S3 service when the license changes (#19781)
The S3 daemon asks truenas.entitlements.check for S3_VERSIONING and
S3_AUDIT once, before it registers a bucket, and holds the answer for
the life of the process. A reload re-reads its files and not the license
-- by design, so every registration-consumed fact arrives the same way,
a restart. Nothing performed that restart: no system.post_license_update
subscriber reached the service, and the license reconcile pass carried
no S3 delegate.
So a revoked versioning entitlement went on minting versions until
someone restarted the service by hand, and -- the direction that reaches
a customer -- a granted one left every object-lock bucket the daemon had
excluded at start answering 503 after the license that would serve it
was installed.
Register a RESTART delegate for the service, ordered after the user
delegate since the credentials file the restart renders resolves every
access key through NSS. It runs only while the service is up: RESTART
starts a stopped unit, which a license change must not do, and a stopped
service reads the license fresh at its next start anyway.