From: Dale Johannesen Date: Wed, 12 Aug 2009 17:42:34 +0000 (+0000) Subject: Fix a nondeterministic bug in APInt::roundToDouble; X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=39c177d8b7b03d5a851a3adf5ae816da1211c49e;p=oota-llvm.git Fix a nondeterministic bug in APInt::roundToDouble; when !isSingleWord() but getActiveBits() is small, we were using the pointer value instead of the low word of the integer value. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78821 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Support/APInt.cpp b/lib/Support/APInt.cpp index a034fd1e797..6638fccfef5 100644 --- a/lib/Support/APInt.cpp +++ b/lib/Support/APInt.cpp @@ -897,10 +897,10 @@ double APInt::roundToDouble(bool isSigned) const { // Handle the simple case where the value is contained in one uint64_t. if (isSingleWord() || getActiveBits() <= APINT_BITS_PER_WORD) { if (isSigned) { - int64_t sext = (int64_t(VAL) << (64-BitWidth)) >> (64-BitWidth); + int64_t sext = (int64_t(getWord(0)) << (64-BitWidth)) >> (64-BitWidth); return double(sext); } else - return double(VAL); + return double(getWord(0)); } // Determine if the value is negative.