mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
[PBQP] Assert conservativelly allocatable nodes are spilled by choice.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229302 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
52f1b6dbed
commit
19cd7ccdf1
@ -144,6 +144,23 @@ namespace PBQP {
|
||||
// TODO: Try to normalize newly added/modified edge.
|
||||
}
|
||||
|
||||
// Does this Cost vector have any register options ?
|
||||
template <typename VectorT>
|
||||
bool hasRegisterOptions(const VectorT &V) {
|
||||
unsigned VL = V.getLength();
|
||||
|
||||
// An empty or spill only cost vector does not provide any register option.
|
||||
if (VL <= 1)
|
||||
return false;
|
||||
|
||||
// If there are registers in the cost vector, but all of them have infinite
|
||||
// costs, then ... there is no available register.
|
||||
for (unsigned i = 1; i < VL; ++i)
|
||||
if (V[i] != std::numeric_limits<PBQP::PBQPNum>::infinity())
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// \brief Find a solution to a fully reduced graph by backpropagation.
|
||||
//
|
||||
@ -170,6 +187,13 @@ namespace PBQP {
|
||||
|
||||
RawVector v = G.getNodeCosts(NId);
|
||||
|
||||
// Although a conservatively allocatable node can be allocated to a register,
|
||||
// spilling it may provide a lower cost solution. Assert here that spilling
|
||||
// is done by choice, not because there were no register available.
|
||||
if (G.getNodeMetadata(NId).isConservativelyAllocatable())
|
||||
assert(hasRegisterOptions(v) && "A conservatively allocatable node "
|
||||
"must have available register options");
|
||||
|
||||
for (auto EId : G.adjEdgeIds(NId)) {
|
||||
const Matrix& edgeCosts = G.getEdgeCosts(EId);
|
||||
if (NId == G.getEdgeNode1Id(EId)) {
|
||||
|
Loading…
Reference in New Issue
Block a user