<feed xmlns='http://www.w3.org/2005/Atom'>
<title>llvm-project.git/llvm/lib/CodeGen/InterleavedAccessPass.cpp, branch main</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/'/>
<entry>
<title>Revert "[InterleavedAccess] Construct interleaved access store with shuffles"</title>
<updated>2025-11-06T09:09:26+00:00</updated>
<author>
<name>Martin Storsjö</name>
<email>martin@martin.st</email>
</author>
<published>2025-11-06T09:00:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=8b3a124ad87d1e808852644090ea5d1117fe2f9f'/>
<id>8b3a124ad87d1e808852644090ea5d1117fe2f9f</id>
<content type='text'>
This reverts commit 78d649199b47370b72848c1ca8d9bd3323b050ac.

That commit caused failed asserts, see
https://github.com/llvm/llvm-project/pull/164000 for details.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This reverts commit 78d649199b47370b72848c1ca8d9bd3323b050ac.

That commit caused failed asserts, see
https://github.com/llvm/llvm-project/pull/164000 for details.
</pre>
</div>
</content>
</entry>
<entry>
<title>[InterleavedAccess] Construct interleaved access store with shuffles</title>
<updated>2025-11-05T20:06:30+00:00</updated>
<author>
<name>Ramkrishnan</name>
<email>ramkrishnan.nk@huawei.com</email>
</author>
<published>2025-11-05T20:06:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=78d649199b47370b72848c1ca8d9bd3323b050ac'/>
<id>78d649199b47370b72848c1ca8d9bd3323b050ac</id>
<content type='text'>
Cost of interleaved store of 8 factor and 16 factor are cheaper in AArch64 with additional interleave instructions.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Cost of interleaved store of 8 factor and 16 factor are cheaper in AArch64 with additional interleave instructions.</pre>
</div>
</content>
</entry>
<entry>
<title>[IR] Replace alignment argument with attribute on masked intrinsics (#163802)</title>
<updated>2025-10-20T08:50:09+00:00</updated>
<author>
<name>Nikita Popov</name>
<email>npopov@redhat.com</email>
</author>
<published>2025-10-20T08:50:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=573ca36753e9141f25b941ea9a84d0599e3baae7'/>
<id>573ca36753e9141f25b941ea9a84d0599e3baae7</id>
<content type='text'>
The `masked.load`, `masked.store`, `masked.gather` and `masked.scatter`
intrinsics currently accept a separate alignment immarg. Replace this
with an `align` attribute on the pointer / vector of pointers argument.

This is the standard representation for alignment information on
intrinsics, and is already used by all other memory intrinsics. This
means the signatures now match llvm.expandload, llvm.vp.load, etc.
(Things like llvm.memcpy used to have a separate alignment argument as
well, but were already migrated a long time ago.)

It's worth noting that the masked.gather and masked.scatter intrinsics
previously accepted a zero alignment to indicate the ABI type alignment
of the element type. This special case is gone now: If the align
attribute is omitted, the implied alignment is 1, as usual. If ABI
alignment is desired, it needs to be explicitly emitted (which the
IRBuilder API already requires anyway).</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The `masked.load`, `masked.store`, `masked.gather` and `masked.scatter`
intrinsics currently accept a separate alignment immarg. Replace this
with an `align` attribute on the pointer / vector of pointers argument.

This is the standard representation for alignment information on
intrinsics, and is already used by all other memory intrinsics. This
means the signatures now match llvm.expandload, llvm.vp.load, etc.
(Things like llvm.memcpy used to have a separate alignment argument as
well, but were already migrated a long time ago.)

It's worth noting that the masked.gather and masked.scatter intrinsics
previously accepted a zero alignment to indicate the ABI type alignment
of the element type. This special case is gone now: If the align
attribute is omitted, the implied alignment is 1, as usual. If ABI
alignment is desired, it needs to be explicitly emitted (which the
IRBuilder API already requires anyway).</pre>
</div>
</content>
</entry>
<entry>
<title>[PatternMatch] Introduce match functor (NFC) (#159386)</title>
<updated>2025-09-17T20:04:33+00:00</updated>
<author>
<name>Ramkumar Ramachandra</name>
<email>ramkumar.ramachandra@codasip.com</email>
</author>
<published>2025-09-17T20:04:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=7fb3a91418df61a81b1386eba3c29bc0df9e0787'/>
<id>7fb3a91418df61a81b1386eba3c29bc0df9e0787</id>
<content type='text'>
A common idiom is the usage of the PatternMatch match function within a
functional algorithm like all_of. Introduce a match functor to shorten
this idiom.

Co-authored-by: Luke Lau &lt;luke@igalia.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A common idiom is the usage of the PatternMatch match function within a
functional algorithm like all_of. Introduce a match functor to shorten
this idiom.

Co-authored-by: Luke Lau &lt;luke@igalia.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>[CodeGen] Fix failing assert in interleaved access pass (#156457)</title>
<updated>2025-09-03T09:55:39+00:00</updated>
<author>
<name>David Sherwood</name>
<email>david.sherwood@arm.com</email>
</author>
<published>2025-09-03T09:55:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=7da91fa801d8bd490c8dcd9a29faba209feb2954'/>
<id>7da91fa801d8bd490c8dcd9a29faba209feb2954</id>
<content type='text'>
In the InterleavedAccessPass the function getMask assumes that
shufflevector operations are always fixed width, which isn't true
because we use them for splats of scalable vectors. This patch fixes the
code by bailing out for scalable vectors.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In the InterleavedAccessPass the function getMask assumes that
shufflevector operations are always fixed width, which isn't true
because we use them for splats of scalable vectors. This patch fixes the
code by bailing out for scalable vectors.</pre>
</div>
</content>
</entry>
<entry>
<title>[IA][RISCV] Recognize interleaving stores that could lower to strided segmented stores (#154647)</title>
<updated>2025-08-26T20:22:42+00:00</updated>
<author>
<name>Min-Yih Hsu</name>
<email>min.hsu@sifive.com</email>
</author>
<published>2025-08-26T20:22:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=acaa925cb22b8559c491fff069b4b885cb4433f6'/>
<id>acaa925cb22b8559c491fff069b4b885cb4433f6</id>
<content type='text'>
This is a sibling patch to #151612: passing gap masks to the renewal TLI
hooks for lowering interleaved stores that use shufflevector to do the
interleaving.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This is a sibling patch to #151612: passing gap masks to the renewal TLI
hooks for lowering interleaved stores that use shufflevector to do the
interleaving.</pre>
</div>
</content>
</entry>
<entry>
<title>[IA][RISCV] Detecting gap mask from a mask assembled by interleaveN intrinsics (#153510)</title>
<updated>2025-08-15T16:22:47+00:00</updated>
<author>
<name>Min-Yih Hsu</name>
<email>min.hsu@sifive.com</email>
</author>
<published>2025-08-15T16:22:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=0e9b6d6c8a111e214a3907fe97ccadf8f438d854'/>
<id>0e9b6d6c8a111e214a3907fe97ccadf8f438d854</id>
<content type='text'>
If the mask of a (fixed-vector) deinterleaved load is assembled by
`vector.interleaveN` intrinsic, any intrinsic arguments that are
all-zeros are regarded as gaps.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If the mask of a (fixed-vector) deinterleaved load is assembled by
`vector.interleaveN` intrinsic, any intrinsic arguments that are
all-zeros are regarded as gaps.</pre>
</div>
</content>
</entry>
<entry>
<title>[IA][RISCV] Recognizing gap masks assembled from bitwise AND (#153324)</title>
<updated>2025-08-14T18:17:50+00:00</updated>
<author>
<name>Min-Yih Hsu</name>
<email>min.hsu@sifive.com</email>
</author>
<published>2025-08-14T18:17:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=c202d2f5157256208dcd2e46d910e633f52b74ad'/>
<id>c202d2f5157256208dcd2e46d910e633f52b74ad</id>
<content type='text'>
For a deinterleaved masked.load / vp.load, if it's mask, `%c`, is
synthesized by the following snippet:
```
%m = shufflevector %s, poison, &lt;0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3&gt;
%g = &lt;1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0&gt;
%c = and %m, %g
```
Then we can know that `%g` is the gap mask and `%s` is the mask for each
field / component. This patch teaches InterleaveAccess pass to recognize
such patterns</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
For a deinterleaved masked.load / vp.load, if it's mask, `%c`, is
synthesized by the following snippet:
```
%m = shufflevector %s, poison, &lt;0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3&gt;
%g = &lt;1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0&gt;
%c = and %m, %g
```
Then we can know that `%g` is the gap mask and `%s` is the mask for each
field / component. This patch teaches InterleaveAccess pass to recognize
such patterns</pre>
</div>
</content>
</entry>
<entry>
<title>[IA][RISCV] Recognize deinterleaved loads that could lower to strided segmented loads (#151612)</title>
<updated>2025-08-12T21:08:18+00:00</updated>
<author>
<name>Min-Yih Hsu</name>
<email>min.hsu@sifive.com</email>
</author>
<published>2025-08-12T21:08:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=ca05058b4995663d7081dd76b1ac186b3929e1cb'/>
<id>ca05058b4995663d7081dd76b1ac186b3929e1cb</id>
<content type='text'>
Turn the following deinterleaved load patterns
```
%l = masked.load(%ptr, /*mask=*/110110110110, /*passthru=*/poison)
%f0 = shufflevector %l, [0, 3, 6, 9]
%f1 = shufflevector %l, [1, 4, 7, 10]
%f2 = shufflevector %l, [2, 5, 8, 11]
```
into
```
%s = riscv.vlsseg2(/*passthru=*/poison, %ptr, /*mask=*/1111)
%f0 = extractvalue %s, 0
%f1 = extractvalue %s, 1
%f2 = poison
```
The mask `110110110110` is regarded as 'gap mask' since it effectively skips the entire third field / component.

Similarly,  turning the following snippet
```
%l = masked.load(%ptr, /*mask=*/110000110000, /*passthru=*/poison)
%f0 = shufflevector %l, [0, 3, 6, 9]
%f1 = shufflevector %l, [1, 4, 7, 10]
```
into
```
%s = riscv.vlsseg2(/*passthru=*/poison, %ptr, /*mask=*/1010)
%f0 = extractvalue %s, 0
%f1 = extractvalue %s, 1
```

Right now this patch only tries to detect gap mask from a constant mask supplied to a masked.load/vp.load. </content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Turn the following deinterleaved load patterns
```
%l = masked.load(%ptr, /*mask=*/110110110110, /*passthru=*/poison)
%f0 = shufflevector %l, [0, 3, 6, 9]
%f1 = shufflevector %l, [1, 4, 7, 10]
%f2 = shufflevector %l, [2, 5, 8, 11]
```
into
```
%s = riscv.vlsseg2(/*passthru=*/poison, %ptr, /*mask=*/1111)
%f0 = extractvalue %s, 0
%f1 = extractvalue %s, 1
%f2 = poison
```
The mask `110110110110` is regarded as 'gap mask' since it effectively skips the entire third field / component.

Similarly,  turning the following snippet
```
%l = masked.load(%ptr, /*mask=*/110000110000, /*passthru=*/poison)
%f0 = shufflevector %l, [0, 3, 6, 9]
%f1 = shufflevector %l, [1, 4, 7, 10]
```
into
```
%s = riscv.vlsseg2(/*passthru=*/poison, %ptr, /*mask=*/1010)
%f0 = extractvalue %s, 0
%f1 = extractvalue %s, 1
```

Right now this patch only tries to detect gap mask from a constant mask supplied to a masked.load/vp.load. </pre>
</div>
</content>
</entry>
<entry>
<title>[IA] Fix a bug introduced by a recent refactoring</title>
<updated>2025-07-26T18:46:15+00:00</updated>
<author>
<name>Philip Reames</name>
<email>preames@rivosinc.com</email>
</author>
<published>2025-07-26T18:38:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=f65b329d706c883ea469246de093219612390aa9'/>
<id>f65b329d706c883ea469246de093219612390aa9</id>
<content type='text'>
I had dropped the check for which intrinsics were supported.  This is
a quick fix to get tree back into an unbroken state, a cleaner change
may follow.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
I had dropped the check for which intrinsics were supported.  This is
a quick fix to get tree back into an unbroken state, a cleaner change
may follow.
</pre>
</div>
</content>
</entry>
</feed>
