LLVM/project 3ed4eae — llvm/lib/Transforms/IPO OpenMPOpt.cpp, llvm/test/Transforms/OpenMP par_region_merge_profile.ll

[OpenMPOpt][PGO] Set entry count on merged parallel wrapper (#221654)

When OpenMPOpt merges adjacent parallel regions, it creates a new
wrapper (*..omp_par) that calls the original outlined callbacks through
a single __kmpc_fork_call.

Preserve profiling information for the merged wrapper by assigning it
the
largest function_entry_count from the original callbacks. Also preserve
callsite counts for calls to the original callbacks, since SamplePGO may
otherwise treat them as cold once the wrapper itself has profile data.
DeltaFile
+156-0llvm/test/Transforms/OpenMP/par_region_merge_profile.ll
+44-0llvm/lib/Transforms/IPO/OpenMPOpt.cpp
+200-02 files

LLVM/project d9f4c2d — flang/lib/Semantics resolve-names.cpp, flang/test/Semantics resolve36.f90

[flang] Reject MODULE prefix in abstract interface body (#212980)

Issue: Flang accepts a MODULE prefix on a function or subroutine inside
an ABSTRACT INTERFACE. C1547 allows MODULE only on a module subprogram,
or on a nonabstract interface body in a module or submodule.

Fixes #208200

Root cause
- BeginSubprogram() only enforced the module/submodule half of C1547. An
abstract interface inside a module or submodule still has that scope, so
the check passed.
- In PushSubprogramScope(), an abstract interface body takes the
isAbstract() path, sets ABSTRACT, and never looks at hasModulePrefix, so
the prefix was ignored with no diagnostic.
```
if (isAbstract()) {
  SetExplicitAttr(*symbol, Attr::ABSTRACT);
} else if (hasModulePrefix) {

    [21 lines not shown]
DeltaFile
+33-0flang/test/Semantics/resolve36.f90
+5-1flang/lib/Semantics/resolve-names.cpp
+38-12 files

LLVM/project 917ea76 — flang/lib/Optimizer/HLFIR/IR HLFIROps.cpp, flang/lib/Optimizer/HLFIR/Transforms LowerHLFIRIntrinsics.cpp SimplifyHLFIRIntrinsics.cpp

[Flang][HLFIR] Lower PACK(array, .TRUE.) to hlfir.reshape (#220860)

When the PACK mask is the compile-time scalar .TRUE., the result is
equivalent to RESHAPE(array, [SIZE(array)]). Lower all PACK calls to
hlfir.pack, then simplify pack(array, .TRUE.) to hlfir.reshape with an
index-typed SHAPE temporary in SimplifyHLFIRIntrinsics. Variable or
array masks, VECTOR, and non-trivial or polymorphic operands continue to
use the runtime PACK path.

Add regression tests for character and real(k) PACK with scalar .TRUE.

Relanding the patch #213603 after fixing the regression

---------

Co-authored-by: Cursor <cursoragent at cursor.com>
DeltaFile
+111-0flang/test/HLFIR/simplify-hlfir-intrinsics-pack.fir
+71-0flang/lib/Optimizer/HLFIR/Transforms/SimplifyHLFIRIntrinsics.cpp
+60-0flang/lib/Optimizer/HLFIR/IR/HLFIROps.cpp
+41-8flang/lib/Optimizer/HLFIR/Transforms/LowerHLFIRIntrinsics.cpp
+48-0flang/test/Lower/HLFIR/pack_scalar_true.f90
+40-0flang/test/HLFIR/invalid.fir
+371-86 files not shown
+469-3412 files

FreeBSD/src bf97446 — share/man/man4 ipmi.4, sys/dev/ipmi ipmi.c

ipmi(4): improve debugging for ioctl(IPMICTL_SEND_COMMAND)

Add a knob to debug ioctl(IPMICTL_SEND_COMMAND). Log the IPMI NetFn and
Cmd fields, followed by a hexdump of the request data. Upon completion,
log the hexdump of the response data.

Reviewed by:    adrian, imp, ngie
Sponsored by:   Vdura
Differential Revision:  https://reviews.freebsd.org/D59514
DeltaFile
+33-1share/man/man4/ipmi.4
+18-0sys/dev/ipmi/ipmi.c
+51-12 files

FreeBSD/ports 7e6eb47 — misc/py-litellm Makefile distinfo

misc/py-litellm: Update to 1.104.1

Changelog: https://github.com/BerriAI/litellm/releases/tag/v1.104.1

Reported by:    Repology
DeltaFile
+3-3misc/py-litellm/distinfo
+1-1misc/py-litellm/Makefile
+4-42 files

FreeBSD/ports 89ff517 — misc/py-litellm-proxy-extras Makefile distinfo

misc/py-litellm-proxy-extras: Update to 0.4.106

Reported by:    Repology
DeltaFile
+3-3misc/py-litellm-proxy-extras/distinfo
+1-1misc/py-litellm-proxy-extras/Makefile
+4-42 files

LLVM/project 5bd54fd — clang/test/CXX/over/over.oper/over.inc/over.inc.default p1.cpp

Add various defaulted postfix operator overloads with restrictions and error checks

Introduce new structures demonstrating defaulted postfix increment and decrement operators with various qualifiers such as `__restrict__`, `volatile`, and `const`. Include error checks for invalid return types and parameter types in defaulted operators. Enhance the handling of placeholder types and clarify the rules around defaulted operators in the context of C++ concepts and templates.
DeltaFile
+157-0clang/test/CXX/over/over.oper/over.inc/over.inc.default/p1.cpp
+157-01 files

LLVM/project 9ceae7c — clang/include/clang/Basic DiagnosticSemaKinds.td, clang/lib/Sema SemaDeclCXX.cpp

Merge `err_defaulted_comparison_template` and `err_defaulted_postfix_operator_template`
DeltaFile
+3-7clang/lib/Sema/SemaDeclCXX.cpp
+3-5clang/include/clang/Basic/DiagnosticSemaKinds.td
+6-122 files

FreeBSD/src 8436cbd — sys/kern kern_jaildesc.c

jaildesc: Lock prison pointer when filling kinfo

Submitted by:   Yuri Tkachenko <yura.tkachenko at gmail.com>
MFC after:      3 days
Differential Revision:  https://reviews.freebsd.org/D60392

(cherry picked from commit a5ae2a9bfb1ca7f49e79ee63ed39216c42326d02)
DeltaFile
+2-0sys/kern/kern_jaildesc.c
+2-01 files

LLVM/project 87e28b1 — compiler-rt/lib/tsan/go test.c, compiler-rt/lib/tsan/rtl tsan_interface_atomic.cpp

[tsan][go] Relax alignment for 128-bit Go atomic args buffer access (#213123)

The Go 128-bit atomic helpers added by #196833 read and write the
128-bit value through an a128* cast of the u8* args buffer (e.g.
*(a128*)(a + 8)). Clang treats a128* as requiring 16-byte alignment and
emits MOVAPS or MOVDQA on x86_64. The Go runtime only guarantees 8-byte
alignment of the args buffer, so a+8 may not be 16-byte aligned. The
misaligned MOVAPS raises GP and causes a SIGSEGV.

Use an 8-byte-aligned typedef (`using a128_u64 ALIGNED(8) = a128;`) for
args buffer accesses so Clang emits unaligned 128-bit moves (MOVDQU).
The target address of the atomic operation itself (`*(a128**)a`) is
always 16-byte aligned from the Go side.
DeltaFile
+23-0compiler-rt/lib/tsan/go/test.c
+9-4compiler-rt/lib/tsan/rtl/tsan_interface_atomic.cpp
+32-42 files

LLVM/project a7a4469 — clang/lib/Sema SemaDeclCXX.cpp

Refactor defaulted function handling by introducing a helper to define functions with synthesized bodies. Update exception specification computation to utilize this new helper for better code clarity and maintainability.
DeltaFile
+57-83clang/lib/Sema/SemaDeclCXX.cpp
+57-831 files

LLVM/project 4660019 — clang/test/Modules GH221548.cpp

[NFC][clang][Modules] Add regression test for implicit lambda capture from merged module copies (#222020)

Adds a regression test for
https://github.com/llvm/llvm-project/issues/221548.

When the same header is textually included into the global module
fragments of two different module interface units, and the header
defines an out-of-line member template whose body contains a lambda
capturing a local variable, instantiating that template for a type named
through the second copy must keep the capture. On affected compilers the
reproducer miscompiles (a `static_assert` on the same value fails with
the bogus `unimplemented constexpr lambda feature: captures not
currently allowed` note); on current main it compiles cleanly.

Verification performed locally:
- Reproduced both symptoms from the issue with the system clang 18
(runtime exit value 21 instead of 42; bogus constexpr note), and
confirmed the closure is missing the capture in IR.
- Built current main with assertions: the reproducer passes (constexpr

    [15 lines not shown]
DeltaFile
+65-0clang/test/Modules/GH221548.cpp
+65-01 files

LLVM/project 209f61d — clang/lib/Sema SemaDeclCXX.cpp

Fix logic for determining the first declaration in CheckExplicitlyDefaultedPostfixOperator by using getFirstDecl instead of getCanonicalDecl.
DeltaFile
+1-1clang/lib/Sema/SemaDeclCXX.cpp
+1-11 files

LLVM/project ba61f4d — clang/include/clang/Basic DiagnosticSemaKinds.td, clang/lib/Sema SemaDeclCXX.cpp

Rewrite logic for determining C type
DeltaFile
+63-44clang/lib/Sema/SemaDeclCXX.cpp
+10-3clang/test/CXX/over/over.oper/over.inc/over.inc.default/p1.cpp
+3-0clang/include/clang/Basic/DiagnosticSemaKinds.td
+76-473 files

LLVM/project 2d1b74f — clang/lib/StaticAnalyzer/Checkers/WebKit RawPtrRefLambdaCapturesChecker.cpp RawPtrRefSafetyModel.cpp, clang/test/Analysis/Checkers/WebKit unborrowed-local-vars-cxx23.cpp unborrowed-call-args.cpp

[WebKit Checkers] Allow a view into a const CanBorrow object without a Borrow<T> (#229843)

Example:

        const Vector<char> vector = copyToVector(x);
        use(vector.span());

A const object can never be mutated, so it can never invalidate a view
into
    its interior.
    
This applies to a const-declared object only, not a const reference or
const
    pointer -- which might refer to a non-const object.
    
A const object also makes the values it contains const, so a view into a
    CanBorrow object held in a const std::optional qualifies too:

        const std::optional<Vector<char>> vector = copyToVector(x);

    [17 lines not shown]
DeltaFile
+142-47clang/test/Analysis/Checkers/WebKit/unborrowed-local-vars.cpp
+49-8clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefSafetyModel.cpp
+22-17clang/test/Analysis/Checkers/WebKit/unborrowed-call-args.cpp
+31-8clang/test/Analysis/Checkers/WebKit/unborrowed-lambda-captures.cpp
+14-18clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLambdaCapturesChecker.cpp
+15-15clang/test/Analysis/Checkers/WebKit/unborrowed-local-vars-cxx23.cpp
+273-1135 files not shown
+304-12811 files

LLVM/project a150fc2 — lld/ELF DriverUtils.cpp Options.td, lld/test/ELF sectionstart.s

[ELF] Simplify Eq/EEq options with SeparateOrEq. NFC (#229977)
DeltaFile
+2-6lld/ELF/Options.td
+4-1lld/ELF/DriverUtils.cpp
+2-2lld/test/ELF/sectionstart.s
+8-93 files

LLVM/project 3823425 — clang/docs ReleaseNotes.md, clang/include/clang/Sema Sema.h

[clang][Sema] Reject oversized arrays deduced from initializer lists (#226983)

When an array's size is deduced from its initializer list, Sema skips
the array size check.

On x86_64,

```cpp
typedef char B[1ULL << 60];
B e[16];                                     // error: array is too large
B d[] = { {0}, {0}, /* ... 16 elements */ }; // accepted, sizeof(d) == 0
```

On i386,

```cpp
struct B { char c[1 << 30]; };
struct B e[5];                                        // error: array is too large
struct B d[] = { {{0}}, {{0}}, {{0}}, {{0}}, {{0}} }; // accepted, sizeof(d) == 1 GiB

    [12 lines not shown]
DeltaFile
+53-0clang/test/Sema/array-init-list-too-large.c
+22-13clang/lib/Sema/SemaType.cpp
+3-11clang/lib/Sema/SemaExprCXX.cpp
+10-0clang/lib/Sema/SemaInit.cpp
+6-0clang/include/clang/Sema/Sema.h
+2-0clang/docs/ReleaseNotes.md
+96-246 files

LLVM/project e9b9fca — llvm/lib/Target/Mips/MCTargetDesc MipsELFStreamer.h MipsTargetStreamer.h, llvm/test/MC/Mips directive-ent.s micromips-label-test.s

[Mips] Track ISA mode and distinguish ELF data labels (#228883)

Represent standard MIPS, microMIPS and MIPS16 with a shared ISA mode in
the ELF target streamer. Initialize it from the subtarget, save and
restore it across .set push/pop, and reset it for .set mips0. Disabling
one compressed ISA must not clear the other ISA's active mode. Keep the
assembler's feature bits consistent when switching between them.

Use the mode to mark function and pending instruction labels, propagate
it to aliases, and set the MIPS16 ELF flag for command-line MIPS16 mode.
Clear pending code labels when emitting byte strings or fill directives,
as already done for integer data, so data does not inherit the following
instruction's mode.

Extend the existing label and .ent tests with command-line microMIPS
mode, nested mode changes, initial-mode resets, and data emission.

Assisted-by: OpenAI Codex # Testcases
DeltaFile
+119-2llvm/test/MC/Mips/micromips-label-test.s
+43-8llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp
+22-3llvm/lib/Target/Mips/MCTargetDesc/MipsELFStreamer.cpp
+12-2llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.h
+8-2llvm/test/MC/Mips/directive-ent.s
+6-0llvm/lib/Target/Mips/MCTargetDesc/MipsELFStreamer.h
+210-171 files not shown
+212-177 files

FreeNAS/freenas 1eaeb32 — src/middlewared/middlewared job.py, src/middlewared/middlewared/pytest/unit test_job_typesafe.py

Return Secret job results to the caller

## Problem
`zfs.resource.encryption.export_key` is a typed job whose result is `Secret[str | None]`, so it returns a `Secret`. The finished-job event sends the raw result to the client and cannot serialize a `Secret`, so the job succeeded but the caller got "Failed to JSON serialize server message" instead of the key.

## Solution
Jobs unwrap a returned `Secret` before storing the result, matching how non-job methods already serialize it. Job listings and debugs still mask the value through the result model.
DeltaFile
+13-0src/middlewared/middlewared/pytest/unit/test_job_typesafe.py
+6-0src/middlewared/middlewared/job.py
+1-0tests/api2/test_zfs_resource_create.py
+20-03 files

FreeNAS/freenas 16bc1be — src/middlewared/middlewared/plugins/pool_ dataset_query_utils.py, src/middlewared/middlewared/plugins/zfs create_rules.py encryption_keys.py

Unlock zfs resources through typed models

## Problem
Internal callers (failover, boot import, KMIP) started a private dict-based unlock job with its own private models, and results were read with dict indexing. Changing a key from a pipe also rejected valid keys with a leading zero, and change_key accepted keys and passphrases that ZFS would later refuse.

## Solution
- **Unlock**: `zfs.resource.encryption.unlock` gains `start_attachments`, and internal callers start the public job with `ZFSResourceEncryptionUnlockArgsData` and read the returned entry by attribute. `unlock_impl` is now the non-job implementation that takes the model and unwraps secrets once; pool.dataset.unlock calls it directly since it already holds the same job lock.
- **Change key**: the key must be 64 hex characters and a passphrase 8 to 512 characters; a key read from the input pipe is matched as hex text instead of round-tripped through int.
- **Cleanup**: shared `secret_value`/`ancestor_chain` and `is_internal_dataset_name` live in one place each, store_key receives the lowercase ZFS key format while hook payloads are uppercase, and the sync_keys failure is logged with its traceback.
DeltaFile
+27-42src/middlewared/middlewared/plugins/zfs/encryption_lock.py
+9-30src/middlewared/middlewared/plugins/zfs/encryption_service.py
+33-0src/middlewared/middlewared/pytest/unit/plugins/zfs/test_read_hex_key_from_pipe.py
+3-27src/middlewared/middlewared/plugins/pool_/dataset_query_utils.py
+10-20src/middlewared/middlewared/plugins/zfs/encryption_keys.py
+5-17src/middlewared/middlewared/plugins/zfs/create_rules.py
+87-13615 files not shown
+178-18121 files

FreeNAS/freenas 26a9b2b — src/middlewared/middlewared/plugins/pool_ dataset_encryption.py, src/middlewared/middlewared/plugins/zfs encryption_job_locks.py encryption_ops.py

Tidy dataset encryption naming and readability

## Problem
The encryption move left `zfs_resource` wording on the `pool.dataset` side (shared job lock names, the `zr_args` helper, "compatibility wrapper" docstring lines, a `PoolDataset` message raised from zr), and a lot of the moved logic was dense comprehension and `filter`/lambda one-liners that were hard to read.

## Solution
- Job lock names live once in `plugins/zfs/encryption_job_locks.py` with neutral `dataset_encryption_*` names, used by both `pool.dataset` shims and `zfs.resource.encryption`, so both APIs still serialize on the same lock per dataset.
- Shims build zr arguments with the existing `validate_model` instead of a local helper, and their docstrings no longer describe the wrapping.
- zr raises "Dataset {path} does not exist", and the key table model is renamed `EncryptedDatasetModel` (table unchanged).
- Comprehensions, generator expressions, `filter`/`map` lambdas and inline ternaries in the encryption code are plain loops and `if` blocks, with behaviour unchanged.
DeltaFile
+64-73src/middlewared/middlewared/plugins/pool_/dataset_encryption.py
+56-34src/middlewared/middlewared/plugins/zfs/encryption_lock.py
+44-26src/middlewared/middlewared/plugins/zfs/encryption_keys.py
+35-22src/middlewared/middlewared/plugins/zfs/encryption_info.py
+29-25src/middlewared/middlewared/plugins/zfs/encryption_ops.py
+29-0src/middlewared/middlewared/plugins/zfs/encryption_job_locks.py
+257-1803 files not shown
+282-1949 files

FreeNAS/freenas 05e68b6 — src/middlewared/middlewared/plugins/pool_ dataset_encryption_operations.py dataset_encryption.py, src/middlewared/middlewared/plugins/zfs encryption_service.py encryption_lock.py

Move dataset encryption to zfs.resource.encryption

## Problem
Dataset encryption still lived in the `pool.dataset` namespace even though `zfs.resource` is now the dataset API, and zr's own create path had to call back into `pool.dataset.insert_or_update_encrypted_record` to record keys.

## Solution
- **New `zfs.resource.encryption` sub-service** owning lock, unlock, unlock_summary, export_key, export_keys, export_replication_keys, change_key and inherit, with zr conventions (`path`, lowercase enums, `Secret` keys, `ZFS_RESOURCE_*` roles, audit). Public methods delegate to private `*_impl` methods for thread local storage, as the rest of zr does, and everything is synchronous except starting attachment delegates, whose API is async.
- **Private methods moved and renamed** (store_key, delete_keys, stored_keys, sync_keys, encryption_roots, encryption_state, replication_keys, encryption_root_mapping, unlock_impl), together with the `storage_encrypteddataset` model. Every internal caller (failover, pool create/import/export, KMIP, replication, zfs events, zr create) now calls zr directly; no `pool.dataset` alias is left.
- **`pool.dataset` encryption methods are thin shims** keeping their models, roles and pipes. They call the zr `*_impl` methods through the namespace with their own job, so no nested jobs are created, and they share zr's job locks so both APIs serialize on the same dataset. Error messages are unchanged; validation attributes now follow zr names.
- `unlock_impl` has a private Secret-typed accepts model so passphrases handed over by failover stay redacted in job listings.
- Hook names and payloads, including the uppercase key formats failover relies on, are unchanged, and nothing renamed is called across HA controllers.
DeltaFile
+433-0src/middlewared/middlewared/plugins/zfs/encryption_lock.py
+0-416src/middlewared/middlewared/plugins/pool_/dataset_encryption_lock.py
+0-405src/middlewared/middlewared/plugins/pool_/dataset_encryption_info.py
+353-0src/middlewared/middlewared/plugins/zfs/encryption_service.py
+322-0src/middlewared/middlewared/plugins/pool_/dataset_encryption.py
+0-271src/middlewared/middlewared/plugins/pool_/dataset_encryption_operations.py
+1,108-1,09224 files not shown
+2,070-1,25530 files

LLVM/project 89dfa40 — clang/lib/Sema SemaDeclCXX.cpp

Enhance comment clarity in CheckExplicitlyDefaultedPostfixOperator regarding lookup scope and its equivalence to function-body context.
DeltaFile
+7-0clang/lib/Sema/SemaDeclCXX.cpp
+7-01 files

LLVM/project b02dbdd — clang/include/clang/Options Options.td, flang/test/Driver lto-opt-level.f90

[flang][Driver] Enable bare -O flag alias when specified with -flto (#228483)

Currently, `O_flag` (`-O` as an alias for `-O1`) in Options.td is not
visible to FlangOption. As a result, invoking flang with a bare `-O` 
(without a trailing digit) is treated by the joined `-O` definition as 
`-O""`, causing an error when forwarded to the linker.

Add `FlangOption` to `O_flag`'s Visibility so that `flang -O` correctly
aliases to `-O1`.

Assisted-by: IBM Bob

Resolve https://github.com/llvm/llvm-project/issues/227474
DeltaFile
+27-0flang/test/Driver/lto-opt-level.f90
+1-1clang/include/clang/Options/Options.td
+28-12 files

LLVM/project d19f7e8 — compiler-rt/lib/scudo/standalone list.h, compiler-rt/lib/scudo/standalone/tests list_test.cpp

[scudo] Validate list endpoints and links before removing a node (#229245)

`DoublyLinkedList::remove()` currently modifies the predecessor's link
before validating the successor's reciprocal link, and checks endpoint
consistency only in debug builds. A corrupted successor can therefore be
rejected after a list write has already occurred, while inconsistent
null links can bypass endpoint checks in release builds.

Check that the list is nonempty, enforce endpoint consistency in release
builds, and validate both reciprocal links before modifying any list
state. The production change is confined to `remove()`. This strengthens
consistency checks; it does not authenticate list membership or protect
against mutually consistent forged interior nodes.

Tests cover all 24 removal orders of four nodes, plus empty-list
removal, both directions of endpoint inconsistency, and corrupted
reciprocal links, using pointer and index links.

Local validation on Linux x86_64 in WSL, Clang 21.1.8:

    [23 lines not shown]
DeltaFile
+76-0compiler-rt/lib/scudo/standalone/tests/list_test.cpp
+14-19compiler-rt/lib/scudo/standalone/list.h
+90-192 files

LLVM/project f4a3ec1 — clang/lib/Sema SemaDeclCXX.cpp

Reintroduce OR_Success case in analyzeDefaultedPostfixOperator with llvm_unreachable for initialization sequence validation.
DeltaFile
+2-1clang/lib/Sema/SemaDeclCXX.cpp
+2-11 files

LLVM/project a48b32f — clang/lib/Sema SemaDeclCXX.cpp

clarify 0
DeltaFile
+2-2clang/lib/Sema/SemaDeclCXX.cpp
+2-21 files

LLVM/project 0a8d6e5 — clang/lib/Sema SemaDeclCXX.cpp

clarify lvalue comment
DeltaFile
+3-1clang/lib/Sema/SemaDeclCXX.cpp
+3-11 files

LLVM/project d0a41a0 — clang/include/clang/Basic DiagnosticCommonKinds.td DiagnosticSemaKinds.td, clang/lib/Parse ParseDeclCXX.cpp ParseDecl.cpp

use `enum_select`
DeltaFile
+21-33clang/lib/Sema/SemaDeclCXX.cpp
+5-3clang/include/clang/Basic/DiagnosticCommonKinds.td
+6-2clang/include/clang/Basic/DiagnosticSemaKinds.td
+5-1clang/lib/Parse/ParseDeclCXX.cpp
+5-1clang/lib/Parse/ParseDecl.cpp
+42-405 files

LLVM/project 0904551 — llvm/lib/Target/AMDGPU AMDGPUTargetTransformInfo.cpp, llvm/test/Analysis/UniformityAnalysis/AMDGPU workitem-intrinsics.ll

[AMDGPU] Require wave ID masks to be constants (#229917)

PR #177713 added some cases to the wave ID recognizer, such
as (ThreadID & Mask) >> log2(WaveSize) but, after it landed, Claude
noticed a bug. `Mask` in those types of expressions was an arbitrary
vale, which could be divergent, meaning that the "uniform" value of
that expression wouldn't actually be uniform.

The quick fix that preserves most of the cases we're worried about in
practice is to restrict these patterns to constant masks.

AI disclosure: Claude found the issue and created the patch, I wrote
this message.

Co-Authored-By: Claude Opus 5 (1M context) <noreply at anthropic.com>

Co-authored-by: Claude Opus 5 (1M context) <noreply at anthropic.com>
DeltaFile
+5-5llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
+6-3llvm/test/Analysis/UniformityAnalysis/AMDGPU/workitem-intrinsics.ll
+2-5llvm/test/CodeGen/AMDGPU/uniform-load-from-tid.ll
+13-133 files