<feed xmlns='http://www.w3.org/2005/Atom'>
<title>llvm-project.git/llvm/lib/CodeGen/RDFGraph.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>[RDF] Rename RegisterId field in RegisterRef Reg-&gt;Id. NFC (#168154)</title>
<updated>2025-11-15T02:33:50+00:00</updated>
<author>
<name>Craig Topper</name>
<email>craig.topper@sifive.com</email>
</author>
<published>2025-11-15T02:33:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=5442aa1853df1ab4406628d7e6ee4f785044c11d'/>
<id>5442aa1853df1ab4406628d7e6ee4f785044c11d</id>
<content type='text'>
Not all RegisterId values are registers, so Id is a more appropriate
name.

Use asMCReg() in some places that assumed it was a register.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Not all RegisterId values are registers, so Id is a more appropriate
name.

Use asMCReg() in some places that assumed it was a register.</pre>
</div>
</content>
</entry>
<entry>
<title>[RDF] RegisterRef/RegisterId improvements. NFC (#168030)</title>
<updated>2025-11-14T18:30:25+00:00</updated>
<author>
<name>Craig Topper</name>
<email>craig.topper@sifive.com</email>
</author>
<published>2025-11-14T18:30:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=7108b12f6b678ba47adc485f814598bf6842b1ca'/>
<id>7108b12f6b678ba47adc485f814598bf6842b1ca</id>
<content type='text'>
RegisterId can represent a physical register, a MCRegUnit, or
an index into a side structure that stores register masks. These 3
types were encoded by using the physical reg, stack slot, and
virtual register encoding partitions from the Register class.
This encoding scheme alias wasn't well contained so
Register::index2StackSlot and Register::stackSlotIndex appeared
in multiple places.

This patch gives RegisterRef its own encoding defines and separates
it from Register.

I've removed the generic idx() method in favor of getAsMCReg(),
getAsMCRegUnit(), and getMaskIdx() for some degree of type safety.

Some places used the RegisterId field of RegisterRef directly as a
register. Those have been updated to use getAsMCReg.
    
Some special cases for RegisterId 0 have been removed as it can
be treated like a MCRegister by existing code.
    
I think I want to rename the Reg field of RegisterRef to Id, but
I'll do that in another patch.
    
Additionally, callers of the RegisterRef constructor need to be
audited for implicit conversions from Register/MCRegister
to unsigned.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
RegisterId can represent a physical register, a MCRegUnit, or
an index into a side structure that stores register masks. These 3
types were encoded by using the physical reg, stack slot, and
virtual register encoding partitions from the Register class.
This encoding scheme alias wasn't well contained so
Register::index2StackSlot and Register::stackSlotIndex appeared
in multiple places.

This patch gives RegisterRef its own encoding defines and separates
it from Register.

I've removed the generic idx() method in favor of getAsMCReg(),
getAsMCRegUnit(), and getMaskIdx() for some degree of type safety.

Some places used the RegisterId field of RegisterRef directly as a
register. Those have been updated to use getAsMCReg.
    
Some special cases for RegisterId 0 have been removed as it can
be treated like a MCRegister by existing code.
    
I think I want to rename the Reg field of RegisterRef to Id, but
I'll do that in another patch.
    
Additionally, callers of the RegisterRef constructor need to be
audited for implicit conversions from Register/MCRegister
to unsigned.</pre>
</div>
</content>
</entry>
<entry>
<title>[llvm] Use range constructors of *Set (NFC) (#133549)</title>
<updated>2025-03-29T02:55:18+00:00</updated>
<author>
<name>Kazu Hirata</name>
<email>kazu@google.com</email>
</author>
<published>2025-03-29T02:55:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=d4427f308eb6e42790a36b56d61b482cbc9f67ba'/>
<id>d4427f308eb6e42790a36b56d61b482cbc9f67ba</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>[llvm] Use *Set::insert_range (NFC) (#132325)</title>
<updated>2025-03-21T05:24:06+00:00</updated>
<author>
<name>Kazu Hirata</name>
<email>kazu@google.com</email>
</author>
<published>2025-03-21T05:24:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=599005686a1c27ffe97bb4eb07fcd98359a2af99'/>
<id>599005686a1c27ffe97bb4eb07fcd98359a2af99</id>
<content type='text'>
DenseSet, SmallPtrSet, SmallSet, SetVector, and StringSet recently
gained C++23-style insert_range.  This patch replaces:

  Dest.insert(Src.begin(), Src.end());

with:

  Dest.insert_range(Src);

This patch does not touch custom begin like succ_begin for now.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
DenseSet, SmallPtrSet, SmallSet, SetVector, and StringSet recently
gained C++23-style insert_range.  This patch replaces:

  Dest.insert(Src.begin(), Src.end());

with:

  Dest.insert_range(Src);

This patch does not touch custom begin like succ_begin for now.</pre>
</div>
</content>
</entry>
<entry>
<title>[RDF] Create phi nodes for clobbering defs (#123694)</title>
<updated>2025-02-07T14:28:29+00:00</updated>
<author>
<name>Yashas Andaluri</name>
<email>quic_yandalur@quicinc.com</email>
</author>
<published>2025-02-07T14:28:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=a361de6d13183111e942d9f5c6345ed3e8964b2b'/>
<id>a361de6d13183111e942d9f5c6345ed3e8964b2b</id>
<content type='text'>
When a def in a block A reaches another block B that is in A's iterated
dominance frontier, a phi node is added to B for the def register.

A clobbering def can be created at a call instruction, for a register
clobbered by a call.
However, phi nodes are not created for a register, when one of the
reaching defs of the register is a clobbering def.

This patch adds phi nodes for registers that have a clobbering reaching
def. These additional phis help in checking reaching defs for an
instruction in RDF based copy propagation and addressing mode
optimizations.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When a def in a block A reaches another block B that is in A's iterated
dominance frontier, a phi node is added to B for the def register.

A clobbering def can be created at a call instruction, for a register
clobbered by a call.
However, phi nodes are not created for a register, when one of the
reaching defs of the register is a clobbering def.

This patch adds phi nodes for registers that have a clobbering reaching
def. These additional phis help in checking reaching defs for an
instruction in RDF based copy propagation and addressing mode
optimizations.</pre>
</div>
</content>
</entry>
<entry>
<title>[RDF] Fix cover check when linking refs to defs (#113888)</title>
<updated>2024-11-19T18:38:36+00:00</updated>
<author>
<name>Yashas Andaluri</name>
<email>quic_yandalur@quicinc.com</email>
</author>
<published>2024-11-19T18:38:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=b28eebf9264a6b6843b15d4e17be70604f3e4ad8'/>
<id>b28eebf9264a6b6843b15d4e17be70604f3e4ad8</id>
<content type='text'>
During RDF graph construction, linkRefUp method links a register ref to
its upward reaching defs until all RegUnits of the ref have been covered
by defs.
However, when a sub-register def covers some, but not all, of the
RegUnits of a previous super-register def, a super-register ref is not
linked to the super-register def.
This can result in certain super register defs being dead code
eliminated.

This patch fixes the cover check for a register ref. A def must be
skipped only when all RegUnits of that def have already been covered by
a previously seen def.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
During RDF graph construction, linkRefUp method links a register ref to
its upward reaching defs until all RegUnits of the ref have been covered
by defs.
However, when a sub-register def covers some, but not all, of the
RegUnits of a previous super-register def, a super-register ref is not
linked to the super-register def.
This can result in certain super register defs being dead code
eliminated.

This patch fixes the cover check for a register ref. A def must be
skipped only when all RegUnits of that def have already been covered by
a previously seen def.</pre>
</div>
</content>
</entry>
<entry>
<title>[CodeGen] Remove unused includes (NFC) (#115996)</title>
<updated>2024-11-13T07:15:06+00:00</updated>
<author>
<name>Kazu Hirata</name>
<email>kazu@google.com</email>
</author>
<published>2024-11-13T07:15:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=735ab61ac828bd61398e6847d60e308fdf2b54ec'/>
<id>735ab61ac828bd61398e6847d60e308fdf2b54ec</id>
<content type='text'>
Identified with misc-include-cleaner.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Identified with misc-include-cleaner.</pre>
</div>
</content>
</entry>
<entry>
<title>[CodeGen] Use std::pair&lt;MCRegister, Register&gt; to match return from MRI.liveins(). NFC</title>
<updated>2024-08-25T22:28:08+00:00</updated>
<author>
<name>Craig Topper</name>
<email>craig.topper@sifive.com</email>
</author>
<published>2024-08-25T22:20:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=c503758ab6a4eacd3ef671a4a5ccf813995d4456'/>
<id>c503758ab6a4eacd3ef671a4a5ccf813995d4456</id>
<content type='text'>
MachineRegisterInfo::liveins returns std::pair&lt;MCRegister, Register&gt;.
Don't convert to std::pair&lt;unsigned, unsigned&gt;.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
MachineRegisterInfo::liveins returns std::pair&lt;MCRegister, Register&gt;.
Don't convert to std::pair&lt;unsigned, unsigned&gt;.
</pre>
</div>
</content>
</entry>
<entry>
<title>[llvm] Make lambda take const reference to prevent unneeded copy (NFC)</title>
<updated>2024-05-02T20:34:03+00:00</updated>
<author>
<name>Youngsuk Kim</name>
<email>youngsuk.kim@hpe.com</email>
</author>
<published>2024-05-02T20:31:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=9d4575c910c210c3780b1c882e09732464dd4f44'/>
<id>9d4575c910c210c3780b1c882e09732464dd4f44</id>
<content type='text'>
Closes #89198
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Closes #89198
</pre>
</div>
</content>
</entry>
<entry>
<title>[RDF] Skip over NoRegister. NFCI. (#80672)</title>
<updated>2024-02-05T14:15:55+00:00</updated>
<author>
<name>Jay Foad</name>
<email>jay.foad@amd.com</email>
</author>
<published>2024-02-05T14:15:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=abea3b27991dd73cad251f623a2a8f25a3e786ff'/>
<id>abea3b27991dd73cad251f623a2a8f25a3e786ff</id>
<content type='text'>
This just avoids useless work of adding NoRegister to BaseSet, for
consistency with other places that iterate over all physical registers.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This just avoids useless work of adding NoRegister to BaseSet, for
consistency with other places that iterate over all physical registers.</pre>
</div>
</content>
</entry>
</feed>
