<feed xmlns='http://www.w3.org/2005/Atom'>
<title>llvm-project.git/llvm/test/Transforms/LoopVectorize/opaque-ptr.ll, 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>[VPlan] Remove VPVectorPointer for part 0 after unrolling. (#149735)</title>
<updated>2025-07-27T12:53:26+00:00</updated>
<author>
<name>Florian Hahn</name>
<email>flo@fhahn.com</email>
</author>
<published>2025-07-27T12:53:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=89ae0858599549ce6f7be1b789b04a5301a626ba'/>
<id>89ae0858599549ce6f7be1b789b04a5301a626ba</id>
<content type='text'>
VPVectorPointer for part 0 is just the pointer operand. Simplify it
after unrolling. This removes a large number of redundant GEPs with
index 0.

PR: https://github.com/llvm/llvm-project/pull/149735</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
VPVectorPointer for part 0 is just the pointer operand. Simplify it
after unrolling. This removes a large number of redundant GEPs with
index 0.

PR: https://github.com/llvm/llvm-project/pull/149735</pre>
</div>
</content>
</entry>
<entry>
<title>[VPlan] Remove no-op SCALAR-STEPS after unrolling. (#123655)</title>
<updated>2025-03-25T12:57:24+00:00</updated>
<author>
<name>Florian Hahn</name>
<email>flo@fhahn.com</email>
</author>
<published>2025-03-25T12:57:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=dfca6c0d3bf9d1a0565b3ff46813ddd66bd493e9'/>
<id>dfca6c0d3bf9d1a0565b3ff46813ddd66bd493e9</id>
<content type='text'>
After unrolling, there may be additional simplifications that can be
applied. One example is removing SCALAR-STEPS for the first part where
only the first lane is demanded.

This removes redundant adds of 0 from a large number of tests (~200),
many which I am still working on updating.

In preparation for removing redundant WideIV steps added in
https://github.com/llvm/llvm-project/pull/119284.

PR: https://github.com/llvm/llvm-project/pull/123655</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
After unrolling, there may be additional simplifications that can be
applied. One example is removing SCALAR-STEPS for the first part where
only the first lane is demanded.

This removes redundant adds of 0 from a large number of tests (~200),
many which I am still working on updating.

In preparation for removing redundant WideIV steps added in
https://github.com/llvm/llvm-project/pull/119284.

PR: https://github.com/llvm/llvm-project/pull/123655</pre>
</div>
</content>
</entry>
<entry>
<title>[VPlan] Don't access canonical IV in VPWidenPointerInduction::execute.</title>
<updated>2025-03-15T21:32:48+00:00</updated>
<author>
<name>Florian Hahn</name>
<email>flo@fhahn.com</email>
</author>
<published>2025-03-15T21:32:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=6a8d5f22ffc5113de9868e2b4227d699b14d0421'/>
<id>6a8d5f22ffc5113de9868e2b4227d699b14d0421</id>
<content type='text'>
This updates VPWidenPointerInductionRecipe::execute to not use the
canonical IV to determine the insert point. Instead, it relies on the
current recipe position. In cases where this is not sufficient, set the
insert point to the first non-phi instruction, to ensure phis are
created together.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This updates VPWidenPointerInductionRecipe::execute to not use the
canonical IV to determine the insert point. Instead, it relies on the
current recipe position. In cases where this is not sufficient, set the
insert point to the first non-phi instruction, to ensure phis are
created together.
</pre>
</div>
</content>
</entry>
<entry>
<title>[VPlan] Add incoming values for all predecessor to ResumePHI (NFCI).</title>
<updated>2025-02-09T11:20:20+00:00</updated>
<author>
<name>Florian Hahn</name>
<email>flo@fhahn.com</email>
</author>
<published>2025-02-09T11:20:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=32c4493d5f8164ebe9d3d3e01ca744e6c3afcf17'/>
<id>32c4493d5f8164ebe9d3d3e01ca744e6c3afcf17</id>
<content type='text'>
Follow-up as discussed when using VPInstruction::ResumePhi for all resume
values (#112147). This patch explicitly adds incoming values for each
predecessor in VPlan. This simplifies codegen and allows transformations
adjusting the predecessors of blocks with

NFC modulo incoming block order in phis.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Follow-up as discussed when using VPInstruction::ResumePhi for all resume
values (#112147). This patch explicitly adds incoming values for each
predecessor in VPlan. This simplifies codegen and allows transformations
adjusting the predecessors of blocks with

NFC modulo incoming block order in phis.
</pre>
</div>
</content>
</entry>
<entry>
<title>[VPlan] Remove reverse() of predecessors from VPInstruction::generate.</title>
<updated>2024-12-17T20:44:32+00:00</updated>
<author>
<name>Florian Hahn</name>
<email>flo@fhahn.com</email>
</author>
<published>2024-12-17T20:44:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=4ad0fdd1631eeae432714c03ede01a10dc00025d'/>
<id>4ad0fdd1631eeae432714c03ede01a10dc00025d</id>
<content type='text'>
This was originally done to reduce the diff for the change. Remove it
and update the remaining tests. NFC modulo reordering of incoming
values.

Clean up after https://github.com/llvm/llvm-project/pull/114292.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This was originally done to reduce the diff for the change. Remove it
and update the remaining tests. NFC modulo reordering of incoming
values.

Clean up after https://github.com/llvm/llvm-project/pull/114292.
</pre>
</div>
</content>
</entry>
<entry>
<title>[SCEV] Add predicate in SolveLinEq to ensure B is a multiple of A. (#108777)</title>
<updated>2024-09-28T13:19:57+00:00</updated>
<author>
<name>Florian Hahn</name>
<email>flo@fhahn.com</email>
</author>
<published>2024-09-28T13:19:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=2f7ccaf4a8565628a4c7d2b5a49bb45478940be6'/>
<id>2f7ccaf4a8565628a4c7d2b5a49bb45478940be6</id>
<content type='text'>
This can help in cases where pointer alignment info is missing, e.g.
https://github.com/llvm/llvm-project/pull/108210

The predicate is formed for the complex expression that's passed to
SolveLinEquationWithOverflow and the checks could probably be pushed
closer to the root nodes, which in some cases may be cheaper to check.


PR: https://github.com/llvm/llvm-project/pull/108777</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This can help in cases where pointer alignment info is missing, e.g.
https://github.com/llvm/llvm-project/pull/108210

The predicate is formed for the complex expression that's passed to
SolveLinEquationWithOverflow and the checks could probably be pushed
closer to the root nodes, which in some cases may be cheaper to check.


PR: https://github.com/llvm/llvm-project/pull/108777</pre>
</div>
</content>
</entry>
<entry>
<title>[LV] Add pointer induction test variant with inbounds, remove TODO.</title>
<updated>2024-09-15T20:48:18+00:00</updated>
<author>
<name>Florian Hahn</name>
<email>flo@fhahn.com</email>
</author>
<published>2024-09-15T20:48:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=6749f2bbfed4cc4877aced3947c191f979d9434d'/>
<id>6749f2bbfed4cc4877aced3947c191f979d9434d</id>
<content type='text'>
The function doesn't crash any more with inbounds, add a variant with
inbounds.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The function doesn't crash any more with inbounds, add a variant with
inbounds.
</pre>
</div>
</content>
</entry>
<entry>
<title>[llvm] Remove explicit -opaque-pointers flag from tests (NFC)</title>
<updated>2023-07-12T12:35:55+00:00</updated>
<author>
<name>Nikita Popov</name>
<email>npopov@redhat.com</email>
</author>
<published>2023-07-12T12:19:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=edb2fc6dab2cf04779959829434e9e8572d48a26'/>
<id>edb2fc6dab2cf04779959829434e9e8572d48a26</id>
<content type='text'>
Opaque pointers mode is enabled by default, no need to explicitly
enable it.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Opaque pointers mode is enabled by default, no need to explicitly
enable it.
</pre>
</div>
</content>
</entry>
<entry>
<title>[LV] Don't consider pointer as uniform if it is also stored.</title>
<updated>2023-03-17T16:26:16+00:00</updated>
<author>
<name>Florian Hahn</name>
<email>flo@fhahn.com</email>
</author>
<published>2023-03-17T16:26:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=962c306a11d0a21c884c12e18825b8a41ba1bd7d'/>
<id>962c306a11d0a21c884c12e18825b8a41ba1bd7d</id>
<content type='text'>
Update isVectorizedMemAccessUse to also check if the pointer is stored.
This prevents LV to incorrectly consider a pointer as uniform if it is
used as both pointer and stored by the same StoreInst.

Fixes #61396.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Update isVectorizedMemAccessUse to also check if the pointer is stored.
This prevents LV to incorrectly consider a pointer as uniform if it is
used as both pointer and stored by the same StoreInst.

Fixes #61396.
</pre>
</div>
</content>
</entry>
<entry>
<title>[LV] Keep track of cost-based ScalarAfterVec in VPWidenPointerInd.</title>
<updated>2022-09-19T17:14:35+00:00</updated>
<author>
<name>Florian Hahn</name>
<email>flo@fhahn.com</email>
</author>
<published>2022-09-19T17:14:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=582f8ef19fe791e66c0bbe090edebfd74ba2b55d'/>
<id>582f8ef19fe791e66c0bbe090edebfd74ba2b55d</id>
<content type='text'>
Epilogue vectorization uses isScalarAfterVectorization to check if
widened versions for inductions need to be generated and bails out in
those cases.

At the moment, there are scenarios where isScalarAfterVectorization
returns true but VPWidenPointerInduction::onlyScalarsGenerated would
return false, causing widening.

This can lead to widened phis with incorrect start values being created
in the epilogue vector body.

This patch addresses the issue by storing the cost-model decision in
VPWidenPointerInductionRecipe and restoring the behavior before 151c144.
This effectively reverts 151c144, but the long-term fix is to properly
support widened inductions during epilogue vectorization

Fixes #57712.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Epilogue vectorization uses isScalarAfterVectorization to check if
widened versions for inductions need to be generated and bails out in
those cases.

At the moment, there are scenarios where isScalarAfterVectorization
returns true but VPWidenPointerInduction::onlyScalarsGenerated would
return false, causing widening.

This can lead to widened phis with incorrect start values being created
in the epilogue vector body.

This patch addresses the issue by storing the cost-model decision in
VPWidenPointerInductionRecipe and restoring the behavior before 151c144.
This effectively reverts 151c144, but the long-term fix is to properly
support widened inductions during epilogue vectorization

Fixes #57712.
</pre>
</div>
</content>
</entry>
</feed>
