[LV] Optimise code created by createElementCount (#216981)
At the moment when creating an element count we generate vplan like this
mul(vscale, EC)
however since we know that the VF should always be a power of 2 we can
just do
shl(vscale, log2(EC))
instead. This leads to IR simplifications in quite a few tests, where
redundant shifts get folded away.
There are some instances in tests like
AArch64/partial-reduce-dot-product.ll
where a nsw flag is being dropped, however I don't see this as a bad
thing since again I'm not sure how we could previously justify the nsw
flag anyway.
[MIPS] don't pass variadic arguments in float registers (#216519)
At least, I think that's what is going on here. Really it doesn't make
sense to use `inreg` float parameters here. Apparently the backend can
handle it on smaller floats but `_Complex long double` hits some edge
case and miscompiles.
https://godbolt.org/z/nqTM46Ej5
```c
extern void sink(int, ...);
void variadic_cld(_Complex long double z) { sink(0, z); }
```
Clang only sets up register 4 for the `int`, I think with the assumption
that the `f128` arguments are already in the right place:
```asm
[48 lines not shown]
[LV] Take LoopVectorizeHints from VFSelectionContext (NFC) (#216737)
VFSelectionContext already holds the LoopVectorizeHints for the loop, so
both the planner and LoopVectorizationCostModel can use it from
VFSelectionContext.
This moves out another piece of VF independent information.
PR: https://github.com/llvm/llvm-project/pull/216737
GlobalISel: Let m_GSExtInReg match its immediate with a sub-matcher
Add m_SpecificImm/m_Imm literal-immediate operand matchers, and give
m_GSExtInReg an optional immediate sub-matcher argument instead of binding the
raw int64_t. The RISCV selectSExtBits complex renderer now matches the width
directly with m_SpecificImm(Bits). NFC.
Co-authored-by: Claude (Opus 4.8) <noreply at anthropic.com>
[MLIR][GPU] Enable strict property assembly format (#217278)
Enable the strict property assembly format mode for the GPU dialect.
Remove unnecessary property dictionaries from GPU operation assembly
formats and spell subgroup MMA properties directly in the assembly
syntax.
Assisted-by: Codex
[CodeGen][AArch64] Use vector parts for internal non-power-of-two vectors (#213982)
Decompose fixed-length, non-power-of-two vectors into legal vector
parts, rather than scalarizing these. Apply this only to internal register
values.
Continue using the existing scalar breakdown for arguments and returns,
preserving the existing calling convention behaviour.
[LegalizeTypes] Allow v1i128 as a valid SETCC result type during vector operand scalarization (#216136)
PowerPC registers v1i128 as a legal type when P8Altivec is available.
When lowering <4 x fp128> comparisons, the type legalizer hits a v1i1
only assert. Generalize the assert to accept any single-element vector
result type.
[MLIR][X86] Enable strict property assembly format (#217284)
Enable the strict properties assembly format mode for the X86 dialect.
Spell the mask-compress constant source attribute directly in the
assembly format so it is not parsed from attr-dict in strict mode.
Assisted-by: Codex
[MLIR][PDLInterp] Enable strict property assembly format (#217293)
Enable the strict properties assembly format mode for the PDLInterp
dialect. Spell the default-valued isNegated attribute directly in the
assembly format so it is no longer parsed from attr-dict in strict mode.
Assisted-by: Codex
[MLIR][OpenMP] DeclareTargetInterface and DeclareTargetAttr cleanup, NFCI
The changes introduced by this patch are intended to avoid triggering
multiple by name lookups to the "omp.declare_target" attribute every
time any data from the `DeclareTargetInterface` is queried, remove the
need for keeping multiple default values for the same data, clean up
the assembly format and generally improve the usage of the interface.
List of changes:
- `DeclareTargetInterface` only provides `setDeclareTarget` and
`getDeclareTarget` methods to handle the "omp.declare_target"
attribute, maintaining a single canonical way of accessing it.
- `DeclareTargetAttr` provides direct access to the capture clause and
device type enums, rather than wrapping them into an `Attribute`.
These are now mandatory as well. Both changes together make accessing
them more straightforward and simplify the attribute representation.
[flang][OpenMP] Reuse canonical default mapper names for nested mappings - fix issue #210402 (#212251)
Summary
Fix issue #210402: [FLANG][OMP] flang compiled application failed with
core dumped at Kernel 'omp target in _QQmain @ 28
(__omp_offloading_3a_5aca0b86__QQmain_l28)' -- Flang OpenMP nested
implicit default-mapper naming so it reuses the same canonical symbol
naming scheme as explicit declare mapper(default: ...) lowering.
Problem
For nested derived types, implicit mapper generation could derive a
mapper symbol from FIR record names that did not match the explicit
mapper naming path. That mismatch could create a second synthesized
mapper, skip intended pointer-component mapping behavior, and lead to
runtime offload faults.
Changes
Add a canonical mapper-name helper:
getCanonicalDefaultDeclareMapperName(fir::RecordType)
[10 lines not shown]
[MLIR][PDL] Enable strict property assembly format (#217296)
Enable the strict properties assembly format mode for the PDL dialect.
Spell the default-valued isNegated attribute directly in the assembly
format so it is no longer parsed from attr-dict in strict mode.
Assisted-by: Codex
[MLIR][OpenMP] Add verification for DeclareTargetInterface
This patch introduces checks to ensure the "omp.declare_target"
attribute is only attached to `DeclareTargetInterface` operations, it is
always the right type attribute and its properties do not conflict with
the operation they are attached to.
ExpandIRInsts: Expand frem when the libcall is unavailable
The legalizer actions have a distinct LibCall kind, separate
from Expand. If the target specifies LibCall, but the call is not
available, fall back to expand. The action is a fixed property
of the subtarget, but the library call availability in the future
will be program state that depends on module flags.
The test is underhanded and exploits a defect in llc's -march
flag handling. Since the library call set is computed from the Module's
triple, and the module has no triple, the computed libcall set is
empty for the apparently unknown arch. Any real triple will have
an frem call, so the only observable case is this buggy -march case.
In the future module flags will be able to remove the call from
the usable set.
Co-authored-by: Claude (Claude-Opus-4.8)
SPARC: Disable generic codegen tests that depend on libcalls (#217264)
The module doesn't get the triple set without any target argument,
so the assumed set of libcalls is empty
devel/cargo-about: update to 0.9.2
0.9.2 - 2026-08-18
Fixed
PR#312 changed processing of detected license files so that they are never discarded, resolving #309.