1 //===- Solution.h - PBQP Solution -------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // PBQP Solution class. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_CODEGEN_PBQP_SOLUTION_H 15 #define LLVM_CODEGEN_PBQP_SOLUTION_H 16 17 #include "llvm/CodeGen/PBQP/Graph.h" 18 #include <cassert> 19 #include <map> 20 21 namespace llvm { 22 namespace PBQP { 23 24 /// \brief Represents a solution to a PBQP problem. 25 /// 26 /// To get the selection for each node in the problem use the getSelection method. 27 class Solution { 28 private: 29 using SelectionsMap = std::map<GraphBase::NodeId, unsigned>; 30 SelectionsMap selections; 31 32 unsigned r0Reductions = 0; 33 unsigned r1Reductions = 0; 34 unsigned r2Reductions = 0; 35 unsigned rNReductions = 0; 36 37 public: 38 /// \brief Initialise an empty solution. 39 Solution() = default; 40 41 /// \brief Set the selection for a given node. 42 /// @param nodeId Node id. 43 /// @param selection Selection for nodeId. 44 void setSelection(GraphBase::NodeId nodeId, unsigned selection) { 45 selections[nodeId] = selection; 46 } 47 48 /// \brief Get a node's selection. 49 /// @param nodeId Node id. 50 /// @return The selection for nodeId; 51 unsigned getSelection(GraphBase::NodeId nodeId) const { 52 SelectionsMap::const_iterator sItr = selections.find(nodeId); 53 assert(sItr != selections.end() && "No selection for node."); 54 return sItr->second; 55 } 56 }; 57 58 } // end namespace PBQP 59 } // end namespace llvm 60 61 #endif // LLVM_CODEGEN_PBQP_SOLUTION_H 62