<feed xmlns='http://www.w3.org/2005/Atom'>
<title>llvm-project.git/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.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>[SelectionDAG] Fix AArch64 machine verifier bug when expanding LOOP_DEPENDENCE_MASK (#168221)</title>
<updated>2025-11-15T21:12:11+00:00</updated>
<author>
<name>AZero13</name>
<email>gfunni234@gmail.com</email>
</author>
<published>2025-11-15T21:12:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=d831f8df52e5ef7bbea27bde467293ff76828f25'/>
<id>d831f8df52e5ef7bbea27bde467293ff76828f25</id>
<content type='text'>
TargetConstant nodes don't match TableGen ImmLeaf patterns during
instruction selection. When this zero constant flows into the AArch64
CCMP formation code, the machine verifier hits an assertion in expensive
checks.

Fixes: #168227</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
TargetConstant nodes don't match TableGen ImmLeaf patterns during
instruction selection. When this zero constant flows into the AArch64
CCMP formation code, the machine verifier hits an assertion in expensive
checks.

Fixes: #168227</pre>
</div>
</content>
</entry>
<entry>
<title>DAG: Move expandMultipleResultFPLibCall to TargetLowering (NFC) (#166988)</title>
<updated>2025-11-12T03:50:33+00:00</updated>
<author>
<name>Matt Arsenault</name>
<email>Matthew.Arsenault@amd.com</email>
</author>
<published>2025-11-12T03:50:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=c5aace42360184a75323d8fab3a26f0a1d8ba5e7'/>
<id>c5aace42360184a75323d8fab3a26f0a1d8ba5e7</id>
<content type='text'>
This kind of helper is higher level and not general enough to go
directly in SelectionDAG. Most similar utilities are in TargetLowering.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This kind of helper is higher level and not general enough to go
directly in SelectionDAG. Most similar utilities are in TargetLowering.</pre>
</div>
</content>
</entry>
<entry>
<title>DAG: Stop using TargetLibraryInfo for multi-result FP intrinsic codegen (#166987)</title>
<updated>2025-11-12T02:47:28+00:00</updated>
<author>
<name>Matt Arsenault</name>
<email>Matthew.Arsenault@amd.com</email>
</author>
<published>2025-11-12T02:47:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=95f2728b5cdaf03c5f0c13983903f8e7b50b22b4'/>
<id>95f2728b5cdaf03c5f0c13983903f8e7b50b22b4</id>
<content type='text'>
Only use RuntimeLibcallsInfo. Remove the helper functions used to
transition.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Only use RuntimeLibcallsInfo. Remove the helper functions used to
transition.</pre>
</div>
</content>
</entry>
<entry>
<title>DAG: Use modf vector libcalls through RuntimeLibcalls (#166986)</title>
<updated>2025-11-12T02:05:35+00:00</updated>
<author>
<name>Matt Arsenault</name>
<email>Matthew.Arsenault@amd.com</email>
</author>
<published>2025-11-12T02:05:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=4b9771e41a2a53a0398f53bc90d8d0587f03e162'/>
<id>4b9771e41a2a53a0398f53bc90d8d0587f03e162</id>
<content type='text'>
Copy new process from sincos/sincospi</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Copy new process from sincos/sincospi</pre>
</div>
</content>
</entry>
<entry>
<title>DAG: Use sincos vector libcalls through RuntimeLibcalls (#166984)</title>
<updated>2025-11-11T18:51:23+00:00</updated>
<author>
<name>Matt Arsenault</name>
<email>Matthew.Arsenault@amd.com</email>
</author>
<published>2025-11-11T18:51:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=de68181d7f490f993c478019bc0ab299d3238296'/>
<id>de68181d7f490f993c478019bc0ab299d3238296</id>
<content type='text'>
Copy new process from sincospi.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Copy new process from sincospi.</pre>
</div>
</content>
</entry>
<entry>
<title>RuntimeLibcalls: Remove incorrect sincospi from most targets (#166982)</title>
<updated>2025-11-10T19:05:08+00:00</updated>
<author>
<name>Matt Arsenault</name>
<email>Matthew.Arsenault@amd.com</email>
</author>
<published>2025-11-10T19:05:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=821d2825a4f782da3da3c03b8a002802bff4b95c'/>
<id>821d2825a4f782da3da3c03b8a002802bff4b95c</id>
<content type='text'>
sincospi/sincospif/sincospil does not appear to exist on common
targets. Darwin targets have __sincospi and __sincospif, so define
and use those implementations. I have no idea what version added
those calls, so I'm just guessing it's the same conditions as
__sincos_stret.

Most of this patch is working to preserve codegen when a vector
library is explicitly enabled. This only covers sleef and armpl,
as those are the only cases tested.

The multiple result libcalls have an aberrant process where the
legalizer looks for the scalar type's libcall in RuntimeLibcalls,
and then cross references TargetLibraryInfo to find a matching
vector call. This was unworkable in the sincospi case, since the
common case is there is no scalar call available. To preserve
codegen if the call is available, first try to match a libcall
with the vector type before falling back on the old scalar search.

Eventually all of this logic should be contained in RuntimeLibcalls,
without the link to TargetLibraryInfo. In principle we should perform
the same legalization logic as for an ordinary operation, trying
to find a matching subvector type with a libcall.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
sincospi/sincospif/sincospil does not appear to exist on common
targets. Darwin targets have __sincospi and __sincospif, so define
and use those implementations. I have no idea what version added
those calls, so I'm just guessing it's the same conditions as
__sincos_stret.

Most of this patch is working to preserve codegen when a vector
library is explicitly enabled. This only covers sleef and armpl,
as those are the only cases tested.

The multiple result libcalls have an aberrant process where the
legalizer looks for the scalar type's libcall in RuntimeLibcalls,
and then cross references TargetLibraryInfo to find a matching
vector call. This was unworkable in the sincospi case, since the
common case is there is no scalar call available. To preserve
codegen if the call is available, first try to match a libcall
with the vector type before falling back on the old scalar search.

Eventually all of this logic should be contained in RuntimeLibcalls,
without the link to TargetLibraryInfo. In principle we should perform
the same legalization logic as for an ordinary operation, trying
to find a matching subvector type with a libcall.</pre>
</div>
</content>
</entry>
<entry>
<title>Add `llvm.vector.partial.reduce.fadd` intrinsic (#159776)</title>
<updated>2025-11-07T15:36:54+00:00</updated>
<author>
<name>Damian Heaton</name>
<email>Damian.Heaton@arm.com</email>
</author>
<published>2025-11-07T15:36:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=70f4b596cf453369ce4111c23e7e93633e5fe4b1'/>
<id>70f4b596cf453369ce4111c23e7e93633e5fe4b1</id>
<content type='text'>
With this intrinsic, and supporting SelectionDAG nodes, we can better
make use of instructions such as AArch64's `FDOT`.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
With this intrinsic, and supporting SelectionDAG nodes, we can better
make use of instructions such as AArch64's `FDOT`.</pre>
</div>
</content>
</entry>
<entry>
<title>[Intrinsics][AArch64] Add intrinsics for masking off aliasing vector lanes (#117007)</title>
<updated>2025-09-02T14:35:15+00:00</updated>
<author>
<name>Sam Tebbs</name>
<email>samuel.tebbs@arm.com</email>
</author>
<published>2025-09-02T14:35:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=569d738d4e58dea13bac9864b16eb6b6ac0afa30'/>
<id>569d738d4e58dea13bac9864b16eb6b6ac0afa30</id>
<content type='text'>
It can be unsafe to load a vector from an address and write a vector to
an address if those two addresses have overlapping lanes within a
vectorised loop iteration.

This PR adds intrinsics designed to create a mask with lanes disabled if
they overlap between the two pointer arguments, so that only safe lanes
are loaded, operated on and stored. The `loop.dependence.war.mask`
intrinsic represents cases where the store occurs after the load, and
the opposite for `loop.dependence.raw.mask`. The distinction between
write-after-read and read-after-write is important, since the ordering
of the read and write operations affects if the chain of those
instructions can be done safely.

Along with the two pointer parameters, the intrinsics also take an
immediate that represents the size in bytes of the vector element types.

This will be used by #100579.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It can be unsafe to load a vector from an address and write a vector to
an address if those two addresses have overlapping lanes within a
vectorised loop iteration.

This PR adds intrinsics designed to create a mask with lanes disabled if
they overlap between the two pointer arguments, so that only safe lanes
are loaded, operated on and stored. The `loop.dependence.war.mask`
intrinsic represents cases where the store occurs after the load, and
the opposite for `loop.dependence.raw.mask`. The distinction between
write-after-read and read-after-write is important, since the ordering
of the read and write operations affects if the chain of those
instructions can be done safely.

Along with the two pointer parameters, the intrinsics also take an
immediate that represents the size in bytes of the vector element types.

This will be used by #100579.</pre>
</div>
</content>
</entry>
<entry>
<title>[CodeGen] Give ArgListEntry a proper constructor (NFC) (#153817)</title>
<updated>2025-08-15T16:06:07+00:00</updated>
<author>
<name>Nikita Popov</name>
<email>npopov@redhat.com</email>
</author>
<published>2025-08-15T16:06:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=01bc7421855889dcc3b10a131928e3a4a8e4b38c'/>
<id>01bc7421855889dcc3b10a131928e3a4a8e4b38c</id>
<content type='text'>
This ensures that the required fields are set, and also makes the
construction more convenient.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This ensures that the required fields are set, and also makes the
construction more convenient.</pre>
</div>
</content>
</entry>
<entry>
<title>[SelectionDAG] Pass SDNodeFlags through getNode instead of setFlags. (#149852)</title>
<updated>2025-07-22T15:06:30+00:00</updated>
<author>
<name>Craig Topper</name>
<email>craig.topper@sifive.com</email>
</author>
<published>2025-07-22T15:06:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=8d549cf036b6facf455b9add2d878012dfeb3d0d'/>
<id>8d549cf036b6facf455b9add2d878012dfeb3d0d</id>
<content type='text'>
getNode updates flags correctly for CSE. Calling setFlags after getNode
may set the flags where they don't apply.

I've added a Flags argument to getSelectCC and the signature of getNode that takes
an ArrayRef of EVTs.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
getNode updates flags correctly for CSE. Calling setFlags after getNode
may set the flags where they don't apply.

I've added a Flags argument to getSelectCC and the signature of getNode that takes
an ArrayRef of EVTs.</pre>
</div>
</content>
</entry>
</feed>
