1
//===-- Solution.h ------- PBQP Solution ------------------------*- C++ -*-===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// PBQP Solution class.
12
//===----------------------------------------------------------------------===//
14
#ifndef LLVM_CODEGEN_PBQP_SOLUTION_H
15
#define LLVM_CODEGEN_PBQP_SOLUTION_H
24
/// \brief Represents a solution to a PBQP problem.
26
/// To get the selection for each node in the problem use the getSelection method.
30
typedef std::map<Graph::NodeItr, unsigned, NodeItrComparator> SelectionsMap;
31
SelectionsMap selections;
33
unsigned r0Reductions, r1Reductions, r2Reductions, rNReductions;
37
/// \brief Number of nodes for which selections have been made.
38
/// @return Number of nodes for which selections have been made.
39
unsigned numNodes() const { return selections.size(); }
41
/// \brief Records a reduction via the R0 rule. Should be called from the
43
void recordR0() { ++r0Reductions; }
45
/// \brief Returns the number of R0 reductions applied to solve the problem.
46
unsigned numR0Reductions() const { return r0Reductions; }
48
/// \brief Records a reduction via the R1 rule. Should be called from the
50
void recordR1() { ++r1Reductions; }
52
/// \brief Returns the number of R1 reductions applied to solve the problem.
53
unsigned numR1Reductions() const { return r1Reductions; }
55
/// \brief Records a reduction via the R2 rule. Should be called from the
57
void recordR2() { ++r2Reductions; }
59
/// \brief Returns the number of R2 reductions applied to solve the problem.
60
unsigned numR2Reductions() const { return r2Reductions; }
62
/// \brief Records a reduction via the RN rule. Should be called from the
64
void recordRN() { ++ rNReductions; }
66
/// \brief Returns the number of RN reductions applied to solve the problem.
67
unsigned numRNReductions() const { return rNReductions; }
69
/// \brief Set the selection for a given node.
70
/// @param nItr Node iterator.
71
/// @param selection Selection for nItr.
72
void setSelection(Graph::NodeItr nItr, unsigned selection) {
73
selections[nItr] = selection;
76
/// \brief Get a node's selection.
77
/// @param nItr Node iterator.
78
/// @return The selection for nItr;
79
unsigned getSelection(Graph::NodeItr nItr) const {
80
SelectionsMap::const_iterator sItr = selections.find(nItr);
81
assert(sItr != selections.end() && "No selection for node.");
89
#endif // LLVM_CODEGEN_PBQP_SOLUTION_H