[llvm-commits] CVS: llvm/include/llvm/ADT/APInt.h
Reid Spencer
reid at x10sys.com
Wed Feb 28 09:34:01 PST 2007
Changes in directory llvm/include/llvm/ADT:
APInt.h updated: 1.29 -> 1.30
---
Log message:
Make APInt a little more friendly to its users:
* Add support for + and - of a uint64_t.
* Make trunc/sext/zext return *this so it can be chained with other ops
* Add smin, smax, umin, umax functions for getting min/max values.
---
Diffs of the changes: (+30 -3)
APInt.h | 33 ++++++++++++++++++++++++++++++---
1 files changed, 30 insertions(+), 3 deletions(-)
Index: llvm/include/llvm/ADT/APInt.h
diff -u llvm/include/llvm/ADT/APInt.h:1.29 llvm/include/llvm/ADT/APInt.h:1.30
--- llvm/include/llvm/ADT/APInt.h:1.29 Tue Feb 27 20:20:49 2007
+++ llvm/include/llvm/ADT/APInt.h Wed Feb 28 11:33:36 2007
@@ -268,10 +268,17 @@
/// Adds this APInt by the given APInt& RHS.
/// @brief Addition operator.
APInt operator+(const APInt& RHS) const;
+ APInt operator+(uint64_t RHS) const {
+ return (*this) + APInt(BitWidth, RHS);
+ }
+
/// Subtracts this APInt by the given APInt& RHS
/// @brief Subtraction operator.
APInt operator-(const APInt& RHS) const;
+ APInt operator-(uint64_t RHS) const {
+ return (*this) - APInt(BitWidth, RHS);
+ }
/// @brief Unary negation operator
inline APInt operator-() const {
@@ -401,20 +408,20 @@
/// Truncate the APInt to a specified width. It is an error to specify a width
/// that is greater than or equal to the current width.
/// @brief Truncate to new width.
- void trunc(uint32_t width);
+ APInt &trunc(uint32_t width);
/// This operation sign extends the APInt to a new width. If the high order
/// bit is set, the fill on the left will be done with 1 bits, otherwise zero.
/// It is an error to specify a width that is less than or equal to the
/// current width.
/// @brief Sign extend to a new width.
- void sext(uint32_t width);
+ APInt &sext(uint32_t width);
/// This operation zero extends the APInt to a new width. Thie high order bits
/// are filled with 0 bits. It is an error to specify a width that is less
/// than or equal to the current width.
/// @brief Zero extend to a new width.
- void zext(uint32_t width);
+ APInt &zext(uint32_t width);
/// @brief Set every bit to 1.
APInt& set();
@@ -691,6 +698,26 @@
namespace APIntOps {
+/// @brief Determine the smaller of two APInts considered to be signed.
+inline APInt smin(const APInt &A, const APInt &B) {
+ return A.slt(B) ? A : B;
+}
+
+/// @brief Determine the larger of two APInts considered to be signed.
+inline APInt smax(const APInt &A, const APInt &B) {
+ return A.sgt(B) ? A : B;
+}
+
+/// @brief Determine the smaller of two APInts considered to be signed.
+inline APInt umin(const APInt &A, const APInt &B) {
+ return A.ult(B) ? A : B;
+}
+
+/// @brief Determine the larger of two APInts considered to be unsigned.
+inline APInt umax(const APInt &A, const APInt &B) {
+ return A.ugt(B) ? A : B;
+}
+
/// @brief Check if the specified APInt has a N-bits integer value.
inline bool isIntN(uint32_t N, const APInt& APIVal) {
return APIVal.isIntN(N);
More information about the llvm-commits
mailing list