Fix PR 23525 - Separate header mass propagation in irregular loops.
[oota-llvm.git] / include / llvm / Support / BranchProbability.h
index bf6b01defadbd8d2f50609470b717fd355fc9774..a6429dd22a3b7ce6e82a8875280049d0ac20fb53 100644 (file)
@@ -31,7 +31,7 @@ class BranchProbability {
 
 public:
   BranchProbability(uint32_t n, uint32_t d) : N(n), D(d) {
-    assert(d > 0 && "Denomiator cannot be 0!");
+    assert(d > 0 && "Denominator cannot be 0!");
     assert(n <= d && "Probability cannot be bigger than 1!");
   }
 
@@ -46,10 +46,26 @@ public:
     return BranchProbability(D - N, D);
   }
 
-  void print(raw_ostream &OS) const;
+  raw_ostream &print(raw_ostream &OS) const;
 
   void dump() const;
 
+  /// \brief Scale a large integer.
+  ///
+  /// Scales \c Num.  Guarantees full precision.  Returns the floor of the
+  /// result.
+  ///
+  /// \return \c Num times \c this.
+  uint64_t scale(uint64_t Num) const;
+
+  /// \brief Scale a large integer by the inverse.
+  ///
+  /// Scales \c Num by the inverse of \c this.  Guarantees full precision.
+  /// Returns the floor of the result.
+  ///
+  /// \return \c Num divided by \c this.
+  uint64_t scaleByInverse(uint64_t Num) const;
+
   bool operator==(BranchProbability RHS) const {
     return (uint64_t)N * RHS.D == (uint64_t)D * RHS.N;
   }
@@ -64,7 +80,9 @@ public:
   bool operator>=(BranchProbability RHS) const { return !(*this < RHS); }
 };
 
-raw_ostream &operator<<(raw_ostream &OS, const BranchProbability &Prob);
+inline raw_ostream &operator<<(raw_ostream &OS, const BranchProbability &Prob) {
+  return Prob.print(OS);
+}
 
 }