[llvm-commits] CVS: llvm/include/llvm/ADT/APSInt.h
Reid Spencer
rspencer at reidspencer.com
Thu Apr 5 08:40:30 PDT 2007
On Thu, 2007-04-05 at 00:20 -0500, Chris Lattner wrote:
>
> Changes in directory llvm/include/llvm/ADT:
>
> APSInt.h added (r1.1)
> ---
> Log message:
>
> Add a helper class (APSInt) which can represent an APInt along with sign
> information. This is useful when a value does have a sign associated with
> it. This shouldn't be used generally in LLVM for mid-level optimizer stuff.
Do we really need this? I didn't see you use it in any subsequent
commits. What's the use case you have in mind?
Reid.
>
>
> ---
> Diffs of the changes: (+101 -0)
>
> APSInt.h | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 101 insertions(+)
>
>
> Index: llvm/include/llvm/ADT/APSInt.h
> diff -c /dev/null llvm/include/llvm/ADT/APSInt.h:1.1
> *** /dev/null Thu Apr 5 00:20:21 2007
> --- llvm/include/llvm/ADT/APSInt.h Thu Apr 5 00:20:11 2007
> ***************
> *** 0 ****
> --- 1,101 ----
> + //===-- llvm/Support/APSInt.h - Arbitrary Precision Signed Int -*- C++ -*--===//
> + //
> + // The LLVM Compiler Infrastructure
> + //
> + // This file was developed by Chris Lattner and is distributed under the
> + // University of Illinois Open Source License. See LICENSE.TXT for details.
> + //
> + //===----------------------------------------------------------------------===//
> + //
> + // This file implements the APSInt class, which is a simple class that
> + // represents an arbitrary sized integer that knows its signedness.
> + //
> + //===----------------------------------------------------------------------===//
> +
> + #ifndef LLVM_APSINT_H
> + #define LLVM_APSINT_H
> +
> + #include "llvm/ADT/APInt.h"
> +
> + namespace llvm {
> +
> +
> + class APSInt : public APInt {
> + bool IsUnsigned;
> + public:
> + /// APSInt ctor - Create an APSInt with the specified width, default to
> + /// unsigned.
> + explicit APSInt(unsigned BitWidth) : APInt(BitWidth, 0), IsUnsigned(true) {}
> + APSInt(const APInt &I) : APInt(I), IsUnsigned(true) {}
> +
> + APSInt &operator=(const APSInt &RHS) {
> + APInt::operator=(RHS);
> + IsUnsigned = RHS.IsUnsigned;
> + return *this;
> + }
> +
> + APSInt &operator=(const APInt &RHS) {
> + // Retain our current sign.
> + APInt::operator=(RHS);
> + return *this;
> + }
> +
> + APSInt &operator=(uint64_t RHS) {
> + // Retain our current sign.
> + APInt::operator=(RHS);
> + return *this;
> + }
> +
> + // Query sign information.
> + bool isSigned() const { return !IsUnsigned; }
> + bool isUnsigned() const { return IsUnsigned; }
> + void setIsUnsigned(bool Val) { IsUnsigned = Val; }
> +
> +
> + const APSInt &operator%=(const APSInt &RHS) {
> + assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!");
> + if (IsUnsigned)
> + *this = urem(RHS);
> + else
> + *this = srem(RHS);
> + return *this;
> + }
> + const APSInt &operator/=(const APSInt &RHS) {
> + assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!");
> + if (IsUnsigned)
> + *this = udiv(RHS);
> + else
> + *this = sdiv(RHS);
> + return *this;
> + }
> +
> + const APSInt &operator>>=(unsigned Amt) {
> + *this = *this >> Amt;
> + return *this;
> + }
> +
> + APSInt operator>>(unsigned Amt) {
> + return IsUnsigned ? lshr(Amt) : ashr(Amt);
> + }
> +
> + inline bool operator<(const APSInt& RHS) const {
> + assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!");
> + return IsUnsigned ? ult(RHS) : slt(RHS);
> + }
> + inline bool operator>(const APSInt& RHS) const {
> + assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!");
> + return IsUnsigned ? ugt(RHS) : sgt(RHS);
> + }
> + inline bool operator<=(const APSInt& RHS) const {
> + assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!");
> + return IsUnsigned ? ule(RHS) : sle(RHS);
> + }
> + inline bool operator>=(const APSInt& RHS) const {
> + assert(IsUnsigned == RHS.IsUnsigned && "Signedness mismatch!");
> + return IsUnsigned ? uge(RHS) : sge(RHS);
> + }
> + };
> +
> + } // end namespace llvm
> +
> + #endif
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list