Added counters for PBQP reduction rules.
authorLang Hames <lhames@gmail.com>
Thu, 2 Sep 2010 05:37:52 +0000 (05:37 +0000)
committerLang Hames <lhames@gmail.com>
Thu, 2 Sep 2010 05:37:52 +0000 (05:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112807 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/PBQP/HeuristicBase.h
lib/CodeGen/PBQP/HeuristicSolver.h
lib/CodeGen/PBQP/Solution.h

index 3bb24e1cc370c9e3605315ab047b38dfeae306db..37442317bb61b3ebfe5593a97d4ab8a8f0eb0aca 100644 (file)
@@ -174,8 +174,11 @@ namespace PBQP {
 
       while (!finished) {
         if (!optimalReduce())
-          if (!impl().heuristicReduce())
+          if (impl().heuristicReduce()) {
+            getSolver().recordRN();
+          } else {
             finished = true;
+          }
       }
     }
 
index 02938df007004c4d2e4fefef4887e9df558d2c11..35514f9674785579257fff073ae698c8f848ef4b 100644 (file)
@@ -226,6 +226,8 @@ namespace PBQP {
 
       // Nothing to do. Just push the node onto the reduction stack.
       pushToStack(nItr);
+
+      s.recordR0();
     }
 
     /// \brief Apply rule R1.
@@ -274,6 +276,7 @@ namespace PBQP {
       assert(nd.getSolverDegree() == 0 &&
              "Degree 1 with edge removed should be 0.");
       pushToStack(xnItr);
+      s.recordR1();
     }
 
     /// \brief Apply rule R2.
@@ -378,8 +381,14 @@ namespace PBQP {
       removeSolverEdge(zxeItr);
 
       pushToStack(xnItr);
+      s.recordR2();
     }
 
+    /// \brief Record an application of the RN rule.
+    ///
+    /// For use by the HeuristicBase.
+    void recordRN() { s.recordRN(); } 
+
   private:
 
     NodeData& getSolverNodeData(Graph::NodeItr nItr) {
index 294b5370afdfed2461031c0da045687b207f442c..047fd04c7cb8f71d5b4907d935d39e53c6f17872 100644 (file)
@@ -26,15 +26,46 @@ namespace PBQP {
   /// To get the selection for each node in the problem use the getSelection method.
   class Solution {
   private:
+
     typedef std::map<Graph::NodeItr, unsigned, NodeItrComparator> SelectionsMap;
     SelectionsMap selections;
 
+    unsigned r0Reductions, r1Reductions, r2Reductions, rNReductions;
+
   public:
 
     /// \brief Number of nodes for which selections have been made.
     /// @return Number of nodes for which selections have been made.
     unsigned numNodes() const { return selections.size(); }
 
+    /// \brief Records a reduction via the R0 rule. Should be called from the
+    ///        solver only.
+    void recordR0() { ++r0Reductions; }
+
+    /// \brief Returns the number of R0 reductions applied to solve the problem.
+    unsigned numR0Reductions() const { return r0Reductions; }
+
+    /// \brief Records a reduction via the R1 rule. Should be called from the
+    ///        solver only.
+    void recordR1() { ++r1Reductions; }
+
+    /// \brief Returns the number of R1 reductions applied to solve the problem.
+    unsigned numR1Reductions() const { return r1Reductions; }
+
+    /// \brief Records a reduction via the R2 rule. Should be called from the
+    ///        solver only.
+    void recordR2() { ++r2Reductions; }
+
+    /// \brief Returns the number of R2 reductions applied to solve the problem.
+    unsigned numR2Reductions() const { return r2Reductions; }
+
+    /// \brief Records a reduction via the RN rule. Should be called from the
+    ///        solver only.
+    void recordRN() { ++ rNReductions; }
+
+    /// \brief Returns the number of RN reductions applied to solve the problem.
+    unsigned numRNReductions() const { return rNReductions; }
+
     /// \brief Set the selection for a given node.
     /// @param nItr Node iterator.
     /// @param selection Selection for nItr.