[X86] Don't clobber x87 return values when zeroing call-used registers (#211129)
### Summary
`-fzero-call-used-regs=all` / `zero_call_used_regs("all")`
unconditionally push eight `fldz` onto the x87 stack before returning.
When a value is live in `ST0` (`long double`) or `ST0:ST1` (`_Complex
long double`), the pushes overflow the 8-slot x87 stack and the return
value becomes an indefinite NaN. Reproduces on x86-64 at every
optimization level, via both the flag and the attribute.
```c++
__attribute__((zero_call_used_regs("all")))
long double g(long double a) { return a + 1; }
// g(1.0L) returns nan, expected 2.0
```
### Root cause
The x87 return value lives in `ST0` (and `ST1` for `_Complex long
double`), but the FP stackifier's `handleReturn` deletes the `RET`'s FP
[33 lines not shown]
NAS-141948 / 26.0.0-RC.1 / Fix `JobProgressBuffer.set_progress` not being thread-safe (by themylogin) (#19409)
`JobProgressBuffer.set_progress` called `self.job.loop.call_later`. When
doing so from a thread, it might break event the loop.
Original PR: https://github.com/truenas/middleware/pull/19402
---------
Co-authored-by: themylogin <themylogin at gmail.com>
AMDGPU: Migrate assembler tests with content changes to subarch triples
Convert tests which failed after converting the arguments due to content
changes from checking the emitted target id string.
AMDGPU: Fix missing extended-image-insts missing from feature map (#212418)
Unsurprisingly, this manually maintained table is buggy.
fillAMDGCNFeatureMap never set extended-image-insts, so clang's builtin
feature check rejected every case. The tests were working around this
with manually specified -target-features flags.
Co-authored-by: Claude (Claude-Opus-4.8)
[IR] Autoupgrade trivial VP intrinsics to their non-VP counterparts
As a first step towards removing trivial VP intrinsics, autoupgrade them to their non-VP counterparts for backwards compatibility.
Since trivial VP intrinsics only set lanes to poison, it's safe to replace them with non predicated versions.
RFC: https://discourse.llvm.org/t/rfc-remove-trivial-vp-intrinsics/90972
[SimplifyCFG] Bail out on trivial cases in `mergeNestedCondBranch` (#212309)
Closes https://github.com/llvm/llvm-project/issues/212300.
When BB3 is identical to BB4, it is no longer profitable to perform this
fold, since it creates an unused xor instruction. The DomTree update
issue is also easy to fix. But I think this solution is better.
The following IR was dumped just before this function:
```
define void @func(i1 %cond1, i1 %cond2, i1 %cond3) {
entry:
br i1 %cond1, label %bb2, label %else
else: ; preds = %entry
br i1 %cond2, label %bb0, label %common.ret
bb0: ; preds = %else
br i1 %cond1, label %bb1, label %bb2
[12 lines not shown]
[VE] Fix crash when splitting all-ones v512i1 mask
The added test case crashes because we try to extract a subreg from vmp0 when selecting vec_unpack_*, but vmp0 has no subregisters, see d46e49838e17800cb72d95db1b23c04bbca610e2
vmp0 is hardwired to all ones, so it gets selected for an all ones mask.
Fix it by adding an explicit pattern for an all ones mask that selects vm0, the v256i1 version of vmp0, instead of creating an invalid subreg extract.
NAS-141984 / 26.0.0-RC.1 / Fix small bugs in NFS code (#19418)
`sanitize_networks` and `sanitize_hosts` reported incorrect error
messages when wildcard host/network was not the last on the list.
`clear_nfs3_rmtab` accepted mutable value as default argument. This
didn't affect anything currently, but can potentially result in memory
leaks and weird behavior if code is modified.
`dbgflg` was a leaked loop variable that worked by accident
Backported from https://github.com/truenas/middleware/pull/19417
[mlir]Add resultSegmentSizes/operandSegmentSizes to prop-dict. (#211222)
`setPropertiesFromParsedAttr` (generated by `OpFormatGen.cpp` for ops
using a custom `assemblyFormat`) rejects the trait-injected
`operandSegmentSizes` /. `resultSegmentSizes` properties when they
appear in a `prop-dict`, even though the printer emits them there for ops
whose format uses a bulk operand/result type directive
(`type(operands)`, `type(results)`, `functional-type(operands, results)`).
This breaks round-tripping: any op combining `AttrSizedOperandSegments`
/ `AttrSizedResultSegments` with such a bulk directive fails to re-parse
its own printed output, because printer-side elision of these keys
(introduced in #115930) is intentionally skipped in that case — the
sizes can't be reconstructed from individually-typed operand/result
groups, so they must survive in the text, but the custom parser was never
taught to read them back.
`setPropertiesFromAttr` (used by the generic-form parser, bytecode, and
C++ construction) already special-cases these two keys, so this change
[12 lines not shown]
AMDGPU: Remove dead FEATURE_FP64/FEATURE_LDEXP from ArchFeatureKind (#212479)
No GPU ever sets these bits, and clang's hasFP64()/hasLDEXPF()
short-circuit on isAMDGCN() before testing them, so the bits are
never observed.
Co-authored-by: Claude (Claude-Opus-4.8)
Revert "Add a few missed files to ObsoleteFiles.inc"
This reverts commit 33175a5059970bf9e888a799d3578e2902d765af, because
some of the directories and files are still being installed.
Revert "Add a few missed files to ObsoleteFiles.inc"
This reverts commit 2e089a89812b56329741cd8dc2d272405a6e73ff, because
some of the directories and files are still being installed.