LLVM 22.0.0git
llvm::SpillPlacement::Node Struct Reference

Node - Each edge bundle corresponds to a Hopfield node. More...

Public Types

using LinkVector = SmallVector<std::pair<BlockFrequency, unsigned>, 4>

Public Member Functions

bool preferReg () const
 preferReg - Return true when this node prefers to be in a register.
bool mustSpill () const
 mustSpill - Return True if this node is so biased that it must spill.
void clear (BlockFrequency Threshold)
 clear - Reset per-query data, but preserve frequencies that only depend on the CFG.
void addLink (unsigned b, BlockFrequency w)
 addLink - Add a link to bundle b with weight w.
void addBias (BlockFrequency freq, BorderConstraint direction)
 addBias - Bias this node.
bool update (const Node nodes[], BlockFrequency Threshold)
 update - Recompute Value from Bias and Links.
void getDissentingNeighbors (SparseSet< unsigned > &List, const Node nodes[]) const

Public Attributes

BlockFrequency BiasN
 BiasN - Sum of blocks that prefer a spill.
BlockFrequency BiasP
 BiasP - Sum of blocks that prefer a register.
int Value
 Value - Output value of this node computed from the Bias and links.
LinkVector Links
 Links - (Weight, BundleNo) for all transparent blocks connecting to other bundles.
BlockFrequency SumLinkWeights
 SumLinkWeights - Cached sum of the weights of all links + ThresHold.

Detailed Description

Node - Each edge bundle corresponds to a Hopfield node.

The node contains precomputed frequency data that only depends on the CFG, but Bias and Links are computed each time placeSpills is called.

The node Value is positive when the variable should be in a register. The value can change when linked nodes change, but convergence is very fast because all weights are positive.

Definition at line 72 of file SpillPlacement.cpp.

Member Typedef Documentation

◆ LinkVector

Member Function Documentation

◆ addBias()

void llvm::SpillPlacement::Node::addBias ( BlockFrequency freq,
BorderConstraint direction )
inline

◆ addLink()

void llvm::SpillPlacement::Node::addLink ( unsigned b,
BlockFrequency w )
inline

addLink - Add a link to bundle b with weight w.

Definition at line 118 of file SpillPlacement.cpp.

References Links, and SumLinkWeights.

◆ clear()

void llvm::SpillPlacement::Node::clear ( BlockFrequency Threshold)
inline

clear - Reset per-query data, but preserve frequencies that only depend on the CFG.

Definition at line 109 of file SpillPlacement.cpp.

References BiasN, BiasP, Links, SumLinkWeights, and Value.

◆ getDissentingNeighbors()

void llvm::SpillPlacement::Node::getDissentingNeighbors ( SparseSet< unsigned > & List,
const Node nodes[] ) const
inline

Definition at line 180 of file SpillPlacement.cpp.

References Links, llvm::List, and Value.

◆ mustSpill()

bool llvm::SpillPlacement::Node::mustSpill ( ) const
inline

mustSpill - Return True if this node is so biased that it must spill.

Definition at line 100 of file SpillPlacement.cpp.

References BiasN, BiasP, and SumLinkWeights.

◆ preferReg()

bool llvm::SpillPlacement::Node::preferReg ( ) const
inline

preferReg - Return true when this node prefers to be in a register.

Definition at line 94 of file SpillPlacement.cpp.

References Value.

Referenced by update().

◆ update()

bool llvm::SpillPlacement::Node::update ( const Node nodes[],
BlockFrequency Threshold )
inline

update - Recompute Value from Bias and Links.

Return true when node preference changes.

Definition at line 151 of file SpillPlacement.cpp.

References BiasN, BiasP, Links, preferReg(), and Value.

Member Data Documentation

◆ BiasN

BlockFrequency llvm::SpillPlacement::Node::BiasN

BiasN - Sum of blocks that prefer a spill.

Definition at line 74 of file SpillPlacement.cpp.

Referenced by addBias(), clear(), mustSpill(), and update().

◆ BiasP

BlockFrequency llvm::SpillPlacement::Node::BiasP

BiasP - Sum of blocks that prefer a register.

Definition at line 77 of file SpillPlacement.cpp.

Referenced by addBias(), clear(), mustSpill(), and update().

◆ Links

LinkVector llvm::SpillPlacement::Node::Links

Links - (Weight, BundleNo) for all transparent blocks connecting to other bundles.

The weights are all positive block frequencies.

Definition at line 88 of file SpillPlacement.cpp.

Referenced by addLink(), clear(), getDissentingNeighbors(), and update().

◆ SumLinkWeights

BlockFrequency llvm::SpillPlacement::Node::SumLinkWeights

SumLinkWeights - Cached sum of the weights of all links + ThresHold.

Definition at line 91 of file SpillPlacement.cpp.

Referenced by addLink(), clear(), and mustSpill().

◆ Value

int llvm::SpillPlacement::Node::Value

Value - Output value of this node computed from the Bias and links.

This is always on of the values {-1, 0, 1}. A positive number means the variable should go in a register through this bundle.

Definition at line 82 of file SpillPlacement.cpp.

Referenced by clear(), getDissentingNeighbors(), preferReg(), and update().


The documentation for this struct was generated from the following file: