diff options
author | Cameron Zwarich <zwarich@apple.com> | 2011-02-24 10:00:20 +0000 |
---|---|---|
committer | Cameron Zwarich <zwarich@apple.com> | 2011-02-24 10:00:20 +0000 |
commit | 3cf92802148655027d277940eafb1f38d4d6b1fb (patch) | |
tree | a13a69800ee4f3ccaf75082c850ae5c86e238655 | |
parent | 97eb52da7b25467014e1bb99a82a2fb515461b37 (diff) | |
download | bcm5719-llvm-3cf92802148655027d277940eafb1f38d4d6b1fb.tar.gz bcm5719-llvm-3cf92802148655027d277940eafb1f38d4d6b1fb.zip |
Add a getNumSignBits() method to APInt.
llvm-svn: 126379
-rw-r--r-- | llvm/include/llvm/ADT/APInt.h | 6 | ||||
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 7 |
2 files changed, 7 insertions, 6 deletions
diff --git a/llvm/include/llvm/ADT/APInt.h b/llvm/include/llvm/ADT/APInt.h index b91d5dc9bcf..d1fd3e5034b 100644 --- a/llvm/include/llvm/ADT/APInt.h +++ b/llvm/include/llvm/ADT/APInt.h @@ -1193,6 +1193,12 @@ public: /// @brief Count the number of leading one bits. unsigned countLeadingOnes() const; + /// Computes the number of leading bits of this APInt that are equal to its + /// sign bit. + unsigned getNumSignBits() const { + return isNegative() ? countLeadingOnes() : countLeadingZeros(); + } + /// countTrailingZeros - This function is an APInt version of the /// countTrailingZeros_{32,64} functions in MathExtras.h. It counts /// the number of zeros from the least significant bit to the first set bit. diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 2fb2f2d8aa1..0b7cbcc47e1 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -2088,12 +2088,7 @@ unsigned SelectionDAG::ComputeNumSignBits(SDValue Op, unsigned Depth) const{ case ISD::Constant: { const APInt &Val = cast<ConstantSDNode>(Op)->getAPIntValue(); - // If negative, return # leading ones. - if (Val.isNegative()) - return Val.countLeadingOnes(); - - // Return # leading zeros. - return Val.countLeadingZeros(); + return Val.getNumSignBits(); } case ISD::SIGN_EXTEND: |