because less bytes are allocated and subobject construction is gone.
For reference how it works, see BasicBlock.h.
Btw. it is very assuring to see that somebody has invented
this ilist-embedded sentinel technique before me :-)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66026
91177308-0d34-0410-b5e6-
96231b3b80d8
template <>
struct ilist_traits<MachineInstr> : public ilist_default_traits<MachineInstr> {
private:
- mutable MachineInstr Sentinel;
+ mutable ilist_node<MachineInstr> Sentinel;
// this is only set by the MachineBasicBlock owning the LiveList
friend class MachineBasicBlock;
MachineBasicBlock* Parent;
public:
- MachineInstr *createSentinel() const { return &Sentinel; }
+ MachineInstr *createSentinel() const {
+ return static_cast<MachineInstr*>(&Sentinel);
+ }
void destroySentinel(MachineInstr *) const {}
void addNodeToList(MachineInstr* N);
template <>
struct ilist_traits<MachineBasicBlock>
: public ilist_default_traits<MachineBasicBlock> {
- mutable MachineBasicBlock Sentinel;
+ mutable ilist_node<MachineBasicBlock> Sentinel;
public:
- MachineBasicBlock *createSentinel() const { return &Sentinel; }
+ MachineBasicBlock *createSentinel() const {
+ return static_cast<MachineBasicBlock*>(&Sentinel);
+ }
void destroySentinel(MachineBasicBlock *) const {}
void addNodeToList(MachineBasicBlock* MBB);
template<> struct ilist_traits<SDNode> : public ilist_default_traits<SDNode> {
private:
- mutable SDNode Sentinel;
+ mutable ilist_node<SDNode> Sentinel;
public:
- ilist_traits() : Sentinel(ISD::DELETED_NODE, DebugLoc::getUnknownLoc(),
- SDVTList()) {}
-
SDNode *createSentinel() const {
- return &Sentinel;
+ return static_cast<SDNode*>(&Sentinel);
}
static void destroySentinel(SDNode *) {}