[mlir][acc] Do not tile unstructured loops (#237357)
A loop with an early exit is lowered to an unstructured acc.loop: it has
no induction variables, and its iterations are implemented by the
control flow in its body. Flang produces one for a valid program such as
!$acc serial
!$acc loop tile(4)
do i = 1, n
if (a(i) < 0) exit
a(i) = 1.0
end do
!$acc end serial
ACCLoopTiling still tried to tile such a loop and indexed its missing
induction variables out of bounds. The tile clause does not require
tiling, so drop it from unstructured loops and leave them as they are.
Assisted-by: Cursor
[mlir][acc] Apply tile sizes to the innermost loop first (#237355)
The OpenACC tile clause lists its sizes innermost loop first (OpenACC
3.4, section 2.9.8). In
!$acc loop tile(128, 1)
do k = 1, nk
do i = 1, ni
the i loop is tiled by 128 and the k loop by 1. Frontends store the
sizes on acc.loop in clause order and list the induction variables
outermost first, but tileACCLoops paired the size at position k with
induction variable k, so the nest above was tiled by 128 along k and by
1 along i. The results stay correct, but the tile is transposed: for an
array indexed (i, k), the vector lanes of a tile access memory with a
stride instead of contiguously.
Pair the size at position k with induction variable n - 1 - k in
tileACCLoops and in the pass's tile size type check, and document the
[10 lines not shown]
[Mips] Fix disassembler linking in shared builds (#238133)
Follow up to ed4de391c25b065bdf7bc8d9e47feea672.
Fixes the undefined `MIPS_MC::getCOP0Register` symbol when linking
`LLVMMipsDisassembler` with `BUILD_SHARED_LIBS=ON` by adding the missing
`MipsDesc` link dependency.
audio/maolan-plugins: New port: CLAP plugins from the Maolan ecosystem
Maolan plugins are a collection of CLAP plugins which currently includes:
- drust: A DrumGizmo-inspired drum sampler plugin.
- rural-modeler: A guitar amp modeler based on NAM and IR.
- EQ: parametric and graphic
- maximizer: adaptive clipper/limiter with Vintage and Modern variants
- imager: stereo width processor with Mild, Wide, and Aggressive algorithms
- monitoring: monitoring toolbox with 17 modes
- saturator: waveshape saturation
WWW: https://maolan.rs
PR: 294885
Reported by: Goran Mekić <meka at sys.it.com> (new maintainer)
audio/maolan-plugins: New port: CLAP plugins from the Maolan ecosystem
Maolan plugins are a collection of CLAP plugins which currently includes:
- drust: A DrumGizmo-inspired drum sampler plugin.
- rural-modeler: A guitar amp modeler based on NAM and IR.
- EQ: parametric and graphic
- maximizer: adaptive clipper/limiter with Vintage and Modern variants
- imager: stereo width processor with Mild, Wide, and Aggressive algorithms
- monitoring: monitoring toolbox with 17 modes
- saturator: waveshape saturation
WWW: https://maolan.rs
PR: 294885
Reported by: Goran Mekić <meka at sys.it.com> (new maintainer)
[Clang][CodeGen] Don't crash on a struct inline asm output in a mask register (#236728)
A struct register output with "=k" crashes when x86's
'adjustInlineAsmType' returned '<N x i1>' for "k". The conversion chain
then bitcast that vector to the struct type, which is invalid IR.
Fix this by casting the vector to an integer that's the same size as the
vector, then truncate it to the destination's size.
Fixes: 8d6e82d501cd ("[X86] Use vXi1 for `k` constraint in inline asm (#77733)")
Assisted-by: Claude Opus 5.5
[Clang][CodeGen] Pass 128-bit aggregate inline asm register inputs by value
Clang returns a register output of aggregate type, such as '_Complex
double' or a 16-byte struct, by value as an integer of the same size
(i128 for both). EmitAsmInputLValue, however, loaded aggregate register
inputs by value only up to 64 bits and passed larger ones by pointer.
So '"+r"' on a '_Complex double' emitted '"=r,*0"', which SelectionDAG
rejects as an unsupported tied indirect register input, and '"r"' on a
16-byte struct emitted '"*r"', which it rejects as an indirect register
input. Read-write '"rm"' and '"g"' operands hit the same error.
Load power-of-2 aggregate register inputs of up to 128 bits by value,
as with '__int128'. Tied aggregate operands of other sizes are still
passed by pointer and rejected.
Assisted-by: Claude Opus 5.5
FUNCTION_PROFILER(): On 68010, use the same two step profile counter
reference strategy as ColdFire does. This avoids overflowing R_68K_PC16
relocations for pretty much every reasonably sized program build for
profiling.
[GlobalISel] Fall back on tied inline asm inputs needing several registers
InlineAsmLowering ties a matching input to a single register, and
asserted that the output it matches uses only one. But an i128 output
with an "r" constraint on AArch64 uses two 64-bit registers, so '"+r"'
on an '__int128' crashed at -O0, where GlobalISel is the default. Fall
back to SelectionDAG, which ties each register, instead.
Assisted-by: Claude Opus 5.5