mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +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:
		| @@ -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)) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user