[llvm-commits] CVS: llvm/lib/Support/APInt.cpp
Reid Spencer
reid at x10sys.com
Sat May 12 11:02:15 PDT 2007
Changes in directory llvm/lib/Support:
APInt.cpp updated: 1.79 -> 1.80
---
Log message:
Fix shl to produce the correct result when the bitwidth is > 64 and the
shift amount is 0. Previously this code would do a lshr by the bit width
which can lead to incorrect results.
---
Diffs of the changes: (+6 -0)
APInt.cpp | 6 ++++++
1 files changed, 6 insertions(+)
Index: llvm/lib/Support/APInt.cpp
diff -u llvm/lib/Support/APInt.cpp:1.79 llvm/lib/Support/APInt.cpp:1.80
--- llvm/lib/Support/APInt.cpp:1.79 Thu May 3 13:15:36 2007
+++ llvm/lib/Support/APInt.cpp Sat May 12 13:01:57 2007
@@ -1199,6 +1199,12 @@
if (shiftAmt == BitWidth)
return APInt(BitWidth, 0);
+ // If none of the bits are shifted out, the result is *this. This avoids a
+ // lshr by the words size in the loop below which can produce incorrect
+ // results. It also avoids the expensive computation below for a common case.
+ if (shiftAmt == 0)
+ return *this;
+
// Create some space for the result.
uint64_t * val = new uint64_t[getNumWords()];
More information about the llvm-commits
mailing list