summaryrefslogtreecommitdiff
path: root/lib/Support
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-06-23 17:47:40 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-06-23 17:47:40 +0000
commit18a301e5788cbc7f0e1bcc2567d3a1d76fb4bf2a (patch)
tree630d1bfd42752004df3a1e0f4db0c9aabab86739 /lib/Support
parent88a564f55ee92e2ffe916d8d69271308d05479d1 (diff)
downloadllvm-18a301e5788cbc7f0e1bcc2567d3a1d76fb4bf2a.tar.gz
llvm-18a301e5788cbc7f0e1bcc2567d3a1d76fb4bf2a.tar.bz2
llvm-18a301e5788cbc7f0e1bcc2567d3a1d76fb4bf2a.tar.xz
Support: Extract ScaledNumbers::compare()
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211507 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support')
-rw-r--r--lib/Support/ScaledNumber.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/Support/ScaledNumber.cpp b/lib/Support/ScaledNumber.cpp
index e7531744b6..10b23273d0 100644
--- a/lib/Support/ScaledNumber.cpp
+++ b/lib/Support/ScaledNumber.cpp
@@ -117,3 +117,16 @@ std::pair<uint64_t, int16_t> ScaledNumbers::divide64(uint64_t Dividend,
return getRounded(Quotient, Shift, Dividend >= getHalf(Divisor));
}
+
+int ScaledNumbers::compareImpl(uint64_t L, uint64_t R, int ScaleDiff) {
+ assert(ScaleDiff >= 0 && "wrong argument order");
+ assert(ScaleDiff < 64 && "numbers too far apart");
+
+ uint64_t L_adjusted = L >> ScaleDiff;
+ if (L_adjusted < R)
+ return -1;
+ if (L_adjusted > R)
+ return 1;
+
+ return L > L_adjusted << ScaleDiff ? 1 : 0;
+}