<feed xmlns='http://www.w3.org/2005/Atom'>
<title>llvm-project.git/llvm/lib/Transforms/IPO/SCCP.cpp, branch users/nico/python-2</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>[SCCP] Move logic for removing ssa.copy into Solver (NFC)</title>
<updated>2025-06-19T15:28:39+00:00</updated>
<author>
<name>Nikita Popov</name>
<email>npopov@redhat.com</email>
</author>
<published>2025-06-19T15:26:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=f4db14229cd975822c41376afda9d56a29f9396c'/>
<id>f4db14229cd975822c41376afda9d56a29f9396c</id>
<content type='text'>
So it can be reused between IPSCCP and SCCP.

Make the implementation a bit more efficient by only lookup the
PredicateInfo once.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
So it can be reused between IPSCCP and SCCP.

Make the implementation a bit more efficient by only lookup the
PredicateInfo once.
</pre>
</div>
</content>
</entry>
<entry>
<title>[SCCP] Directly call SCCPSolver::isOverdefined (NFC) (#143059)</title>
<updated>2025-06-06T05:58:10+00:00</updated>
<author>
<name>Kazu Hirata</name>
<email>kazu@google.com</email>
</author>
<published>2025-06-06T05:58:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=ad6631fb0db6d25665b135bcd48bb9667e894017'/>
<id>ad6631fb0db6d25665b135bcd48bb9667e894017</id>
<content type='text'>
We don't need a lambda here.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We don't need a lambda here.</pre>
</div>
</content>
</entry>
<entry>
<title>[IR] Do not store Function inside BlockAddress (#137958)</title>
<updated>2025-05-02T07:40:50+00:00</updated>
<author>
<name>Nikita Popov</name>
<email>npopov@redhat.com</email>
</author>
<published>2025-05-02T07:40:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=4109bac3301eb7b7033eec3c8e8107be8cad9bc9'/>
<id>4109bac3301eb7b7033eec3c8e8107be8cad9bc9</id>
<content type='text'>
Currently BlockAddresses store both the Function and the BasicBlock they
reference, and the BlockAddress is part of the use list of both the
Function and BasicBlock.

This is quite awkward, because this is not really a use of the function
itself (and walks of function uses generally skip block addresses for
that reason). This also has weird implications on function RAUW (as that
will replace the function in block addresses in a way that generally
doesn't make sense), and causes other peculiar issues, like the ability
to have multiple block addresses for one block (with different
functions).

Instead, I believe it makes more sense to specify only the basic block
and let the function be implied by the BB parent. This does mean that we
may have block addresses without a function (if the BB is not inserted),
but this should only happen during IR construction.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Currently BlockAddresses store both the Function and the BasicBlock they
reference, and the BlockAddress is part of the use list of both the
Function and BasicBlock.

This is quite awkward, because this is not really a use of the function
itself (and walks of function uses generally skip block addresses for
that reason). This also has weird implications on function RAUW (as that
will replace the function in block addresses in a way that generally
doesn't make sense), and causes other peculiar issues, like the ability
to have multiple block addresses for one block (with different
functions).

Instead, I believe it makes more sense to specify only the basic block
and let the function be implied by the BB parent. This does mean that we
may have block addresses without a function (if the BB is not inserted),
but this should only happen during IR construction.</pre>
</div>
</content>
</entry>
<entry>
<title>[IR][ModRef] Introduce `errno` memory location</title>
<updated>2025-02-13T11:13:39+00:00</updated>
<author>
<name>Antonio Frighetto</name>
<email>me@antoniofrighetto.com</email>
</author>
<published>2025-02-10T14:30:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=ff585feacf58b384d7525d2b1368298435132fb4'/>
<id>ff585feacf58b384d7525d2b1368298435132fb4</id>
<content type='text'>
Model C/C++ `errno` macro by adding a corresponding `errno`
memory location kind to the IR. Preliminary work to separate
`errno` writes from other memory accesses, to the benefit of
alias analyses and optimization correctness.

Previous discussion: https://discourse.llvm.org/t/rfc-modelling-errno-memory-effects/82972.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Model C/C++ `errno` macro by adding a corresponding `errno`
memory location kind to the IR. Preliminary work to separate
`errno` writes from other memory accesses, to the benefit of
alias analyses and optimization correctness.

Previous discussion: https://discourse.llvm.org/t/rfc-modelling-errno-memory-effects/82972.
</pre>
</div>
</content>
</entry>
<entry>
<title>[NFC][DebugInfo] Make some block-start-position methods return iterators (#124287)</title>
<updated>2025-01-27T16:27:54+00:00</updated>
<author>
<name>Jeremy Morse</name>
<email>jeremy.morse@sony.com</email>
</author>
<published>2025-01-27T16:27:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=81d18ad86419fc612c7071e888d11aa923eaeb8a'/>
<id>81d18ad86419fc612c7071e888d11aa923eaeb8a</id>
<content type='text'>
As part of the "RemoveDIs" work to eliminate debug intrinsics, we're
replacing methods that use Instruction*'s as positions with iterators. A
number of these (such as getFirstNonPHIOrDbg) are sufficiently
infrequently used that we can just replace the pointer-returning version
with an iterator-returning version, hopefully without much/any
disruption.

Thus this patch has getFirstNonPHIOrDbg and
getFirstNonPHIOrDbgOrLifetime return an iterator, and updates all
call-sites. There are no concerns about the iterators returned being
converted to Instruction*'s and losing the debug-info bit: because the
methods skip debug intrinsics, the iterator head bit is always false
anyway.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
As part of the "RemoveDIs" work to eliminate debug intrinsics, we're
replacing methods that use Instruction*'s as positions with iterators. A
number of these (such as getFirstNonPHIOrDbg) are sufficiently
infrequently used that we can just replace the pointer-returning version
with an iterator-returning version, hopefully without much/any
disruption.

Thus this patch has getFirstNonPHIOrDbg and
getFirstNonPHIOrDbgOrLifetime return an iterator, and updates all
call-sites. There are no concerns about the iterators returned being
converted to Instruction*'s and losing the debug-info bit: because the
methods skip debug intrinsics, the iterator head bit is always false
anyway.</pre>
</div>
</content>
</entry>
<entry>
<title>[IPSCCP] Infer attributes on arguments (#107114)</title>
<updated>2024-09-16T08:23:41+00:00</updated>
<author>
<name>Nikita Popov</name>
<email>npopov@redhat.com</email>
</author>
<published>2024-09-16T08:23:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=b7e51b4f139ec18c498c818c6bcaa5a842cea83c'/>
<id>b7e51b4f139ec18c498c818c6bcaa5a842cea83c</id>
<content type='text'>
During inter-procedural SCCP, also infer attributes on arguments, not
just return values. This allows other non-interprocedural passes to make
use of the information later.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
During inter-procedural SCCP, also infer attributes on arguments, not
just return values. This allows other non-interprocedural passes to make
use of the information later.</pre>
</div>
</content>
</entry>
<entry>
<title>[SCCP] Remove LoadInst if it loaded from Constant GlobalVariable  (#107245)</title>
<updated>2024-09-06T08:16:30+00:00</updated>
<author>
<name>hanbeom</name>
<email>kese111@gmail.com</email>
</author>
<published>2024-09-06T08:16:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=861caf9b319ea44d48f1e077f07be3b5f102c6d5'/>
<id>861caf9b319ea44d48f1e077f07be3b5f102c6d5</id>
<content type='text'>
This patch removes the `LoadInst` when it loaded from Constant
GlobalVariable. This allows `canRemoveInstruction` function to be
removed.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch removes the `LoadInst` when it loaded from Constant
GlobalVariable. This allows `canRemoveInstruction` function to be
removed.</pre>
</div>
</content>
</entry>
<entry>
<title>[SCCP] Infer return attributes in SCCP as well (#106732)</title>
<updated>2024-09-02T09:44:37+00:00</updated>
<author>
<name>Nikita Popov</name>
<email>npopov@redhat.com</email>
</author>
<published>2024-09-02T09:44:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=24fe1d4fd61983277c8061ce591970bc775a0fb5'/>
<id>24fe1d4fd61983277c8061ce591970bc775a0fb5</id>
<content type='text'>
We can infer the range/nonnull attributes in non-interprocedural SCCP as
well. The results may be better after the function has been simplified.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We can infer the range/nonnull attributes in non-interprocedural SCCP as
well. The results may be better after the function has been simplified.</pre>
</div>
</content>
</entry>
<entry>
<title>[IPSCCP] Infer nonnull return attribute (#106553)</title>
<updated>2024-08-30T07:38:15+00:00</updated>
<author>
<name>Nikita Popov</name>
<email>npopov@redhat.com</email>
</author>
<published>2024-08-30T07:38:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=d6ad55167094b7b23e71ec6eabfe942e7a485b41'/>
<id>d6ad55167094b7b23e71ec6eabfe942e7a485b41</id>
<content type='text'>
Similarly to the existing range attribute inference, also infer the
nonnull attribute on function return values.

I think in practice FunctionAttrs will handle nearly all cases, the main
one I think it doesn't is cases involving branch conditions. But as we
already have the information here, we may as well materialize it.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Similarly to the existing range attribute inference, also infer the
nonnull attribute on function return values.

I think in practice FunctionAttrs will handle nearly all cases, the main
one I think it doesn't is cases involving branch conditions. But as we
already have the information here, we may as well materialize it.</pre>
</div>
</content>
</entry>
<entry>
<title>[SCCP] Merge return range attributes (#105998)</title>
<updated>2024-08-26T07:35:05+00:00</updated>
<author>
<name>Pedro Lobo</name>
<email>53238269+pedroclobo@users.noreply.github.com</email>
</author>
<published>2024-08-26T07:35:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=dad14d4d729360c2db36745ae9d9cd9d2a6a8c37'/>
<id>dad14d4d729360c2db36745ae9d9cd9d2a6a8c37</id>
<content type='text'>
Take the intersection of the existing range attribute for the return
value and the inferred range.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Take the intersection of the existing range attribute for the return
value and the inferred range.</pre>
</div>
</content>
</entry>
</feed>
