[NVPTX] Postprocess selection DAG to merge I16 extraction (#230570)
Currently, code like
```
%lo = trunc i32 %word to i16
%shift = lshr i32 %word, 16
%hi = trunc i32 %shift to i16
```
results in the ptx
```
cvt.u16.u32 lo, word;
mov.b32 {_, hi}, word;
```
This adds a DAG-postprocess to merge these pairs into a single vector
unpack
```
mov.b32 {lo, hi}, word;
[10 lines not shown]
[SLP][NFCI] Cache isGuaranteedNotToBePoison for extractelement sources (#232405)
isFixedVectorShuffle re-runs isGuaranteedNotToBePoison on the same
source vectors for every gather of extractelements it inspects, which
shows up in compile time on large blocks.
Assisted-by: Claude
[VPlan] Add latch phis for all values used in the middle block. (#233227)
Extend the logic to check all operands used in the middle block, and
generate phis if they are defined in the loop region.
Currently NFC as the only users are extracts, but similar to
https://github.com/llvm/llvm-project/pull/232512 this prepares the code
for early sinking.
PR: https://github.com/llvm/llvm-project/pull/233227
[AArch64][llvm] Add support for FEAT_SME_F16F8F16
Add support for FEAT_SME_F16F8F16 (SME half-precision and FP8 sum-of-products
accumulating to half-precision instructions).
fixup! Make predicate more condensed
Remove the sve_perm256 predicate and replace the only other predicate
using it with a more condensed one and make it capture the entire
condition.
[AArch64][llvm] Armv9.8-A: Add support for FEAT_SVE_PERM256
Add support for FEAT_SVE_PERM256 (SVE 128-bit element permute
instructions), which enables already existing instructions,
independently of FEAT_F64MM
www/node2{2,4,6}: Use bundled merve to avoid loading two simdutfs
node dies with SIGBUS (signal 10) the first time it lexes the exports
of a CommonJS module, e.g. early in any `npm install`, for example
www/tailwindcss4 fails to build, reporting "*** Signal 10".
Running lldb inside poudriere build, because we get a core dump:
frame #0 libsimdutf.so.36 simdutf::detail::find(...) +77: jmpq *%rax
frame #1 libmerve.so.1 lexer::CJSLexer::addReexport(...)
...
frame #6 node node::cjs_lexer::Parse(...)
rax = 0x4444444443434343 ("CCCCDDDD", string data)
This appears to be caused by having two different simdutf versions
loaded into one process:
- node is configured with --shared-merve but not --shared-simdutf, so
[26 lines not shown]
benchmarks/mangohud: unbreak the port and update to version 0.6.9
Using system Vulkan is no longer possible -- newer versions of the
XML and headers don't play nice, particularly, the VK_LAYER_EXPORT
macro was removed and the XML was reworked quite significantly, so
the generator no longer works.
Reported by: portscout
AMDGPU: Only add address space AAs for flat pointers (#232057)
AMDGPUAttributor created AAAddressSpace and AANoAliasAddrSpace for the
pointer operand of every memory access. For a pointer that is not
flat, both are at an optimistic fixpoint after initialization and
manifest nothing, so only create them for flat pointers.
Instructions spent in amdgpu-attributor
(opt, parse cost subtracted, median of 3 runs):
rocPRIM test_device_scan, gfx942: 1963M -> 1404M (-28.5%)
Blender Cycles HIP kernel, gfx1100: 636M -> 459M (-27.8%)
rocPRIM 16 tests, full LTO, closed world: 7415M -> 5590M (-24.6%)
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
Attributor: Reuse string attributes when manifesting them (#232205)
Manifesting a string attribute looked it up by kind and then created
it again from its kind and value, which hashes both strings to find
the uniqued attribute that was already passed in. Add the given
attribute instead. Also don't replace a string attribute with an equal
one, and don't report that as a change.
AMDGPUAttributor manifests about 20 string attributes per function.
Instructions spent in amdgpu-attributor
(opt, parse cost subtracted, median of 3 runs):
rocPRIM test_device_scan, gfx942: 1963M -> 1903M (-3.1%)
Blender Cycles HIP kernel, gfx1100: 636M -> 632M (within noise)
rocPRIM 16 tests, full LTO, closed world: 7415M -> 7198M (-2.9%)
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
AVR: Run AtomicExpand
Atomics wider than 16 bits were lowered to __sync_* calls. No AVR
runtime provides __sync_* or __atomic_*, but __sync_* requires a
lock-free implementation, which AVR cannot provide at those sizes.
Use the __atomic_* calls instead.
Alternatively it may be appropriate to change getDefaultThreadModel to
singlethread for avr so all atomics are lowered into non-atomic
sequences.
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
[Offload] Fix default_returns.td test after olInit doc changes (#233879)
#232355 renamed the documented success return from the nonexistent
`OL_RESULT_SUCCESS` to `OL_SUCCESS` and added `OL_ERRC_UNINITIALIZED` to
the default returns, but did not update
`offload/test/tools/offload-tblgen/default_returns.td`, which now fails:
```
default_returns.td:26:15: error: CHECK-API: expected string not found in input
// CHECK-API: OL_RESULT_SUCCESS
```
This updates the test to check the actual generated output.
Assisted-by: Claude
Attributor: Don't remove attributes with an empty mask (#232244)
Manifesting attributes always removed the attributes of an empty
AttributeMask, which copies the attribute set into an AttrBuilder and
looks up each of its attributes in the mask. Skip the removal if the
mask is empty, and add AttributeMask::empty for that.
Instructions spent in amdgpu-attributor
(opt, parse cost subtracted, median of 3 runs):
rocPRIM test_device_scan, gfx942: 1963M -> 1927M (-1.8%)
Blender Cycles HIP kernel, gfx1100: 636M -> 632M (within noise)
rocPRIM 16 tests, full LTO, closed world: 7415M -> 7313M (-1.4%)
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
[LifetimeSafety] Add a group for experimental warnings (#233377)
Added the `-Wlifetime-safety-experimental` diagnostic group. It is not
included in `-Wlifetime-safety-all`, and it contains two warnings:
- `-Wlifetime-safety-experimental-invalidation`, renamed from
`-Wlifetime-safety-invalidation`.
- `-Wlifetime-safety-experimental-field-origin-escape`, renamed from
`-Wexperimental-lifetime-safety-field-origin-escape`.
Invalidation checking and field-origin-escape checking are experimental
and can produce false positives or even non-actionable warnings.
AMDGPU: Create the implicit argument attributes once (#232245)
AAAMDAttributes created all 21 string attributes again for every
function it manifested, which hashes the attribute name to find the
uniqued attribute. Create them once sorted in the information cache.
Instructions spent in amdgpu-attributor:
rocPRIM test_device_scan, gfx942: 1376M -> 1313M (-4.5%)
Blender Cycles HIP kernel, gfx1100: 503M -> 502M (-0.1%)
rocPRIM 16 tests, full LTO, closed world: 5148M -> 4982M (-3.2%)
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
[OpenMP] Add arg extensions to library functions. (#232938)
Add missing entries with parameter extension attributes for 3 library
functions in OMPKinds.def. These extensions are required by some
ABIs (e.g. SystemZ) for correctness, since the receiver of the argument
(callee) is free to assume that caller has already extended the passed value.
Patch by IBM Bob.
@efriedma-quic