diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-09-06 00:11:24 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-09-06 00:11:24 +0000 |
commit | 92a97a9166e359e195d949e63d7e24a4a33284cf (patch) | |
tree | 47fc373baf592033d473b376cc7a246697d5279b /include/llvm/Operator.h | |
parent | 0985b3c81c4b56c4fb7104778df8e9ab21438d4b (diff) |
Revert "Include optional subclass flags, such as inbounds, nsw, etc., ...", this
breaks MiniSAT on x86_64.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81098 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Operator.h')
-rw-r--r-- | include/llvm/Operator.h | 66 |
1 files changed, 16 insertions, 50 deletions
diff --git a/include/llvm/Operator.h b/include/llvm/Operator.h index 06eb243418..48ac09d54f 100644 --- a/include/llvm/Operator.h +++ b/include/llvm/Operator.h @@ -21,8 +21,6 @@ namespace llvm { class GetElementPtrInst; -class BinaryOperator; -class ConstantExpr; /// Operator - This is a utility class that provides an abstraction for the /// common functionality between Instructions and ConstantExprs. @@ -69,37 +67,24 @@ public: /// despite that operator having the potential for overflow. /// class OverflowingBinaryOperator : public Operator { -public: - enum { - NoUnsignedWrap = (1 << 0), - NoSignedWrap = (1 << 1) - }; - -private: ~OverflowingBinaryOperator(); // do not implement - - friend class BinaryOperator; - friend class ConstantExpr; - void setHasNoUnsignedWrap(bool B) { - SubclassOptionalData = - (SubclassOptionalData & ~NoUnsignedWrap) | (B * NoUnsignedWrap); - } - void setHasNoSignedWrap(bool B) { - SubclassOptionalData = - (SubclassOptionalData & ~NoSignedWrap) | (B * NoSignedWrap); - } - public: /// hasNoUnsignedWrap - Test whether this operation is known to never /// undergo unsigned overflow, aka the nuw property. bool hasNoUnsignedWrap() const { - return SubclassOptionalData & NoUnsignedWrap; + return SubclassOptionalData & (1 << 0); + } + void setHasNoUnsignedWrap(bool B) { + SubclassOptionalData = (SubclassOptionalData & ~(1 << 0)) | (B << 0); } /// hasNoSignedWrap - Test whether this operation is known to never /// undergo signed overflow, aka the nsw property. bool hasNoSignedWrap() const { - return SubclassOptionalData & NoSignedWrap; + return SubclassOptionalData & (1 << 1); + } + void setHasNoSignedWrap(bool B) { + SubclassOptionalData = (SubclassOptionalData & ~(1 << 1)) | (B << 1); } static inline bool classof(const OverflowingBinaryOperator *) { return true; } @@ -176,25 +161,15 @@ public: /// SDivOperator - An Operator with opcode Instruction::SDiv. /// class SDivOperator : public Operator { -public: - enum { - IsExact = (1 << 0) - }; - -private: ~SDivOperator(); // do not implement - - friend class BinaryOperator; - friend class ConstantExpr; - void setIsExact(bool B) { - SubclassOptionalData = (SubclassOptionalData & ~IsExact) | (B * IsExact); - } - public: /// isExact - Test whether this division is known to be exact, with /// zero remainder. bool isExact() const { - return SubclassOptionalData & IsExact; + return SubclassOptionalData & (1 << 0); + } + void setIsExact(bool B) { + SubclassOptionalData = (SubclassOptionalData & ~(1 << 0)) | (B << 0); } // Methods for support type inquiry through isa, cast, and dyn_cast: @@ -212,24 +187,15 @@ public: }; class GEPOperator : public Operator { - enum { - IsInBounds = (1 << 0) - }; - ~GEPOperator(); // do not implement - - friend class GetElementPtrInst; - friend class ConstantExpr; - void setIsInBounds(bool B) { - SubclassOptionalData = - (SubclassOptionalData & ~IsInBounds) | (B * IsInBounds); - } - public: /// isInBounds - Test whether this is an inbounds GEP, as defined /// by LangRef.html. bool isInBounds() const { - return SubclassOptionalData & IsInBounds; + return SubclassOptionalData & (1 << 0); + } + void setIsInBounds(bool B) { + SubclassOptionalData = (SubclassOptionalData & ~(1 << 0)) | (B << 0); } inline op_iterator idx_begin() { return op_begin()+1; } |