[AMDGPU] Add heuristic to set CarriedLatencies (#224057)
After
https://github.com/llvm/llvm-project/commit/8723e4a1bc0b6078e35c17532952f79fb8480f53
users have some control to defer scheduling instructions which depend on
loads from predecessor blocks. This PR adds a simple heuristic to
control setting the Fence mode, which has shown to be the most useful in
practice.
We would like to defer scheduling the ATOMIC_FENCE, if 1. there is a
corresponding load/store in flight, and 2. there have not been enough
cycles for that instruction to reasonably finish. Unfortunately, since
we are reasoning about loads/stores in predecessor blocks, we can not
reliably know where these will in the final schedule. However, we can
inspect the dependency structure to identify cases where these
instructions may be pushed back.
This heuristic identifies predecessor blocks in which ds_loads must be
scheduled after all wmma instructions, as this dependency structure
[5 lines not shown]
[mlir][Arith] Rename Conversion/ArithCommon to ArithAttrToLLVM. NFC (#231743)
The directory holds only MLIRArithAttrToLLVMConversion. Rename it to
match the library and free ArithCommon for code shared by Arith
conversions.
LLM-aided
[PowerPC] Don't let optimizeCompareInstr define CR0 while it is still live (#220999)
This replaces the compare-against-zero in
`PPCInstrInfo::optimizeCompareInstr` with the record form of the
instruction defining the compared register only when CR0 is dead at that
point, checked with `MachineBasicBlock::computeRegisterLiveness`
scanning to the end of the block.
Fixes #220996.
## Why
The conversion makes `MI` define CR0. CR0 can still be live there: the
`ANDI_rec_1_{EQ,GT}_BIT` pseudo expansion emits `ANDI_rec` followed by
COPYs of `$cr0eq`/`$cr0gt`, and nothing keeps those copies adjacent to
their `andi.` once other instructions are scheduled in between. A later
compare candidate sitting between an `andi.` and one of its copies gets
converted, clobbers CR0, and the copy then reads the wrong value — the
two flag tests swap conditions.
[41 lines not shown]
[libc] Fix mbstate proxy header dep (#231984)
The proxy header for mbstate_t listed the dependency on the
llvm-libc-types definition as a regular `DEPENDS` and not a
`FULL_BUILD_DEPENDS`. This PR move the dependency to the right category.
[msan] Handle vector.partial.reduce.{add,fadd} (#229649)
The key insight is that after reducing the shadow of each element of the
vector to either a single 0 bit (fully initialized) or 1 (not fully
initialized), we can apply vector.partial.reduce.add to obtain the
output shadow (with a few type conversions in between).
When the first and second arguments are the same (e.g., `<4 x i32>
@llvm.vector.partial.reduce.add(<4 x i32>, <4 x i32>`), the new
instrumentation will propagate using "all-or-nothing" semantics (vs. the
bitwise OR of the heuristic handler which currently applies). These
all-or-nothing semantics are necessary in the worst case (e.g., for
8-bit integer, 11111111 + 0000000? could result in either 00000000 or
11111111; for floating-point, single bit changes can likewise have
avalanche effects).
This likewise propagates the shadow when the first and second arguments
are not the same (e.g., `<4 x i32> @llvm.vector.partial.reduce.add(<4 x
i32>, <8 x i32>`), unlike the default handler which currently applies.
[CIR][SPIR-V] Update HIP atomic scope checks (#231970)
PR #230829 made CIR translate AMDGPU scope names to their SPIR-V
equivalents, matching classic CodeGen. PR #231754 subsequently added HIP
atomic scope coverage with checks that still expected the AMDGPU names
for wavefront and agent scopes.
Expect subgroup and device for those scopes, share the LLVM checks
between CIR and classic CodeGen, and remove the obsolete FIXME.
Assisted-by: Codex / GPT-6
[IR] Remove Instruction::isDebugOrPseudoInst (NFC) (#231766)
This patch replaces Instruction::isDebugOrPseudoInst with
isa<PseudoProbeInst> at most call sites and drops the check altogether
where PseudoProbeInst is already handled or cannot occur.
Note that debug info is now represented with DbgRecord rather than
debug intrinsics outside the DirectX backend. None of the callers are
in the DirectX backend, so the DbgInfoIntrinsic check is dead.
Assisted-by: Antigravity
build: Fix uninitialized errors in 'make rpm-utils'
Fix 'make rpm-utils' error on Fedora 42:
CCLD libzfs_core.la
tests/unit/test_nvpair.c: In function 'test_nv_fnvpair_value':
tests/unit/test_nvpair.c:1713:9: error: 'rv' may be used uninitialized
1713 | unit_str_eq(fnvpair_value_string(fnvlist_lookup_nvpair ...
| ^
module/nvpair/fnvpair.c:575:21: note: 'rv' was declared here
575 | const char *rv;
| ^
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Signed-off-by: Tony Hutter <hutter2 at llnl.gov>
Closes #19386
zio: Remove the priority match assertion when joining a batch
zio_change_priority() may upgrade an in-flight read tree at any time,
so a child created from the parent's stale priority can legitimately
disagree with the parent and with its peers. Priority steers the
batch's taskq choice only for ZIO_PRIORITY_SYNC_WRITE, which no member
can reach.
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Rob Norris <rob.norris at truenas.com>
Signed-off-by: Alexander Motin <alexander.motin at truenas.com>
Closes #19360
Closes #18921
Closes #19381
metaslab: don't gang every block on a degraded single-disk vdev
metaslab_group_allocatable() skips a top-level vdev that is a single
disk below VDEV_STATE_HEALTHY for the first copy of a block, so that a
healthy vdev is used instead. Since be5c6d965 the allocator no longer
retries with try_hard before ganging, so when every vdev in the class
is skipped this way, e.g. on a pool with one disk that ZED degraded
for checksum errors, every block larger than spa_min_alloc becomes a
gang block. The gang header and members are allocated with try_hard,
so they land on the same degraded vdev: the guard keeps nothing off
it, but the blocks take more space, more I/O to read, and some boot
loaders can't read them. This lasts until zpool clear.
Retry with try_hard when a normal-class allocation fails after
skipping an unhealthy vdev. Normal is the class the special and dedup
classes fall back to, so failing there only leads to ganging. In the
special and dedup classes the block still falls back to the next
class as before.
[5 lines not shown]
ZTS: gang blocks on a degraded single-disk vdev
Add gang_blocks_degraded_vdev: a pool whose only top-level vdev is a
single disk marked DEGRADED (zinject -A degrade) must still write
128K blocks without ganging them, and a pool with a second, healthy
single-disk vdev must put the blocks on the healthy one.
On master every L0 and L1 block of the file is a gang block.
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Signed-off-by: Will Rouesnel <wrouesnel at wrouesnel.com>
Closes #19351
Reapply "clang: Use TargetID parsing from AMDGPUTargetParser" (#213824) (#231420)
This reverts commit 6327754ad4eb21b3c27034bc170e8b9944e5e318.
Resolve conflicts with the addition of FEAT_SRAMECC_ON_OFF_MODES.
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
curl: update to 8.23.0.
curl and libcurl 8.23.0
This release includes the following changes:
o lib: CURL_GLOBAL_WIN32 -> CURL_GLOBAL_WINSOCK [64]
o SMB: drop support [63]
o tool_cb_wrt: inject the no-clobber number before the extension [21]
o tool_cb_wrt: try up to .9999 when no-clobbering [46]
This release includes the following bugfixes:
o apple-sectrust: check ocsp copy alloc [292]
o apple: shorten versions in `__builtin_available()` calls [251]
o apple: sync hash init calls, add comments [217]
o apple: sync up version guard macro style [263]
o base64: avoid repeated input loads when encoding [114]
o base64: optimize decode lookup table and quantum loop [88]
[277 lines not shown]