diff options
| author | Nick Lewycky <nicholas@mxc.ca> | 2009-10-25 03:50:03 +0000 |
|---|---|---|
| committer | Nick Lewycky <nicholas@mxc.ca> | 2009-10-25 03:50:03 +0000 |
| commit | 36d0d2030275df7b40226a7979c6d7424955a2f6 (patch) | |
| tree | 3dc81ac9fed1799f51742701c4b7ec2fd5e03e21 | |
| parent | 83410aa8c59837bafd2fcab76c33abd14e72b5c1 (diff) | |
| download | external_llvm-36d0d2030275df7b40226a7979c6d7424955a2f6.zip external_llvm-36d0d2030275df7b40226a7979c6d7424955a2f6.tar.gz external_llvm-36d0d2030275df7b40226a7979c6d7424955a2f6.tar.bz2 | |
Sink isTrueWhenEqual from ICmpInst to CmpInst. Add a matching isFalseWhenEqual
which is equal to !isTrueWhenEqual for ints but not for floats.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85036 91177308-0d34-0410-b5e6-96231b3b80d8
| -rw-r--r-- | include/llvm/InstrTypes.h | 18 | ||||
| -rw-r--r-- | include/llvm/Instructions.h | 16 | ||||
| -rw-r--r-- | lib/VMCore/Instructions.cpp | 19 |
3 files changed, 36 insertions, 17 deletions
diff --git a/include/llvm/InstrTypes.h b/include/llvm/InstrTypes.h index 45d366f..9e9052c 100644 --- a/include/llvm/InstrTypes.h +++ b/include/llvm/InstrTypes.h @@ -718,6 +718,18 @@ public: /// @brief Determine if this is an equals/not equals predicate. bool isEquality(); + /// This is just a convenience. + /// @brief Determine if this is true when both operands are the same. + bool isTrueWhenEqual() const { + return isTrueWhenEqual(getPredicate()); + } + + /// This is just a convenience. + /// @brief Determine if this is false when both operands are the same. + bool isFalseWhenEqual() const { + return isFalseWhenEqual(getPredicate()); + } + /// @returns true if the predicate is unsigned, false otherwise. /// @brief Determine if the predicate is an unsigned operation. static bool isUnsigned(unsigned short predicate); @@ -732,6 +744,12 @@ public: /// @brief Determine if the predicate is an unordered operation. static bool isUnordered(unsigned short predicate); + /// Determine if the predicate is true when comparing a value with itself. + static bool isTrueWhenEqual(unsigned short predicate); + + /// Determine if the predicate is false when comparing a value with itself. + static bool isFalseWhenEqual(unsigned short predicate); + /// @brief Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const CmpInst *) { return true; } static inline bool classof(const Instruction *I) { diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h index f7e7a3d..43f0929 100644 --- a/include/llvm/Instructions.h +++ b/include/llvm/Instructions.h @@ -701,22 +701,6 @@ public: /// @brief Determine if the predicate is signed. static bool isSignedPredicate(Predicate pred); - /// @returns true if the specified compare predicate is - /// true when both operands are equal... - /// @brief Determine if the icmp is true when both operands are equal - static bool isTrueWhenEqual(ICmpInst::Predicate pred) { - return pred == ICmpInst::ICMP_EQ || pred == ICmpInst::ICMP_UGE || - pred == ICmpInst::ICMP_SGE || pred == ICmpInst::ICMP_ULE || - pred == ICmpInst::ICMP_SLE; - } - - /// @returns true if the specified compare instruction is - /// true when both operands are equal... - /// @brief Determine if the ICmpInst returns true when both operands are equal - bool isTrueWhenEqual() { - return isTrueWhenEqual(getPredicate()); - } - /// Initialize a set of values that all satisfy the predicate with C. /// @brief Make a ConstantRange for a relation with a constant value. static ConstantRange makeConstantRange(Predicate pred, const APInt &C); diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp index 60e203a..b73ce50 100644 --- a/lib/VMCore/Instructions.cpp +++ b/lib/VMCore/Instructions.cpp @@ -2943,7 +2943,7 @@ bool CmpInst::isUnsigned(unsigned short predicate) { } } -bool CmpInst::isSigned(unsigned short predicate){ +bool CmpInst::isSigned(unsigned short predicate) { switch (predicate) { default: return false; case ICmpInst::ICMP_SLT: case ICmpInst::ICMP_SLE: case ICmpInst::ICMP_SGT: @@ -2969,6 +2969,23 @@ bool CmpInst::isUnordered(unsigned short predicate) { } } +bool CmpInst::isTrueWhenEqual(unsigned short predicate) { + switch(predicate) { + default: return false; + case ICMP_EQ: case ICMP_UGE: case ICMP_ULE: case ICMP_SGE: case ICMP_SLE: + case FCMP_TRUE: case FCMP_UEQ: case FCMP_UGE: case FCMP_ULE: return true; + } +} + +bool CmpInst::isFalseWhenEqual(unsigned short predicate) { + switch(predicate) { + case ICMP_NE: case ICMP_UGT: case ICMP_ULT: case ICMP_SGT: case ICMP_SLT: + case FCMP_FALSE: case FCMP_ONE: case FCMP_OGT: case FCMP_OLT: return true; + default: return false; + } +} + + //===----------------------------------------------------------------------===// // SwitchInst Implementation //===----------------------------------------------------------------------===// |
