From ae05e7d945aee2846370313e90d2a735f9696a71 Mon Sep 17 00:00:00 2001 From: Nick Lewycky Date: Sun, 27 Sep 2009 21:33:04 +0000 Subject: [PATCH] Round out the API for the new optimization flags. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82930 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/InstrTypes.h | 15 ++++++++++++--- include/llvm/Instructions.h | 5 ++++- lib/VMCore/Instructions.cpp | 16 ++++++++++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/include/llvm/InstrTypes.h b/include/llvm/InstrTypes.h index 6d6d0bae29b..cc923dec298 100644 --- a/include/llvm/InstrTypes.h +++ b/include/llvm/InstrTypes.h @@ -311,17 +311,26 @@ public: /// setHasNoUnsignedWrap - Set or clear the nsw flag on this instruction, /// which must be an operator which supports this flag. See LangRef.html /// for the meaning of this flag. - void setHasNoUnsignedWrap(bool); + void setHasNoUnsignedWrap(bool b = true); /// setHasNoSignedWrap - Set or clear the nsw flag on this instruction, /// which must be an operator which supports this flag. See LangRef.html /// for the meaning of this flag. - void setHasNoSignedWrap(bool); + void setHasNoSignedWrap(bool b = true); /// setIsExact - Set or clear the exact flag on this instruction, /// which must be an operator which supports this flag. See LangRef.html /// for the meaning of this flag. - void setIsExact(bool); + void setIsExact(bool b = true); + + /// hasNoUnsignedWrap - Determine whether the no unsigned wrap flag is set. + bool hasNoUnsignedWrap() const; + + /// hasNoSignedWrap - Determine whether the no signed wrap flag is set. + bool hasNoSignedWrap() const; + + /// isExact - Determine whether the exact flag is set. + bool isExact() const; // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const BinaryOperator *) { return true; } diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h index 51ea50af3bd..c71d64ab072 100644 --- a/include/llvm/Instructions.h +++ b/include/llvm/Instructions.h @@ -604,7 +604,10 @@ public: /// setIsInBounds - Set or clear the inbounds flag on this GEP instruction. /// See LangRef.html for the meaning of inbounds on a getelementptr. - void setIsInBounds(bool); + void setIsInBounds(bool b = true); + + /// isInBounds - Determine whether the GEP has the inbounds flag. + bool isInBounds() const; // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const GetElementPtrInst *) { return true; } diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp index 1300e5fa259..c2fddfa3477 100644 --- a/lib/VMCore/Instructions.cpp +++ b/lib/VMCore/Instructions.cpp @@ -1282,6 +1282,10 @@ void GetElementPtrInst::setIsInBounds(bool B) { cast(this)->setIsInBounds(B); } +bool GetElementPtrInst::isInBounds() const { + return cast(this)->isInBounds(); +} + //===----------------------------------------------------------------------===// // ExtractElementInst Implementation //===----------------------------------------------------------------------===// @@ -1838,6 +1842,18 @@ void BinaryOperator::setIsExact(bool b) { cast(this)->setIsExact(b); } +bool BinaryOperator::hasNoUnsignedWrap() const { + return cast(this)->hasNoUnsignedWrap(); +} + +bool BinaryOperator::hasNoSignedWrap() const { + return cast(this)->hasNoSignedWrap(); +} + +bool BinaryOperator::isExact() const { + return cast(this)->isExact(); +} + //===----------------------------------------------------------------------===// // CastInst Class //===----------------------------------------------------------------------===//