Move isTrueWhenEqual to ICmpInst.
authorNick Lewycky <nicholas@mxc.ca>
Sat, 17 May 2008 07:33:39 +0000 (07:33 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Sat, 17 May 2008 07:33:39 +0000 (07:33 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51215 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Instructions.h
lib/Transforms/Scalar/InstructionCombining.cpp

index 1bd2cba21955be8776a5f46ed86e7f556cd3db0a..c9bd1aa270c5aade6cb9097809369bde7c18a74e 100644 (file)
@@ -741,6 +741,22 @@ 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);
index 41282f2650e4d3a592c0a9e727bac3caa1491149..32f80871ce4287a7e06880f6f4510e3f1b97596a 100644 (file)
@@ -2056,22 +2056,6 @@ Value *InstCombiner::SimplifyDemandedVectorElts(Value *V, uint64_t DemandedElts,
   return MadeChange ? I : 0;
 }
 
-/// @returns true if the specified compare predicate is
-/// true when both operands are equal...
-/// @brief Determine if the icmp Predicate 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
-static bool isTrueWhenEqual(ICmpInst &ICI) {
-  return isTrueWhenEqual(ICI.getPredicate());
-}
-
 /// AssociativeOpt - Perform an optimization on an associative operator.  This
 /// function is designed to check a chain of associative operators for a
 /// potential to apply a certain optimization.  Since the optimization may be
@@ -5204,7 +5188,7 @@ Instruction *InstCombiner::FoldGEPICmp(User *GEPLHS, Value *RHS,
       if (NumDifferences == 0)   // SAME GEP?
         return ReplaceInstUsesWith(I, // No comparison is needed here.
                                    ConstantInt::get(Type::Int1Ty,
-                                                    isTrueWhenEqual(Cond)));
+                                             ICmpInst::isTrueWhenEqual(Cond)));
 
       else if (NumDifferences == 1) {
         Value *LHSV = GEPLHS->getOperand(DiffOperand);
@@ -5321,7 +5305,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
   // icmp X, X
   if (Op0 == Op1)
     return ReplaceInstUsesWith(I, ConstantInt::get(Type::Int1Ty, 
-                                                   isTrueWhenEqual(I)));
+                                                   I.isTrueWhenEqual()));
 
   if (isa<UndefValue>(Op1))                  // X icmp undef -> undef
     return ReplaceInstUsesWith(I, UndefValue::get(Type::Int1Ty));
@@ -5333,7 +5317,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
       (isa<GlobalValue>(Op1) || isa<AllocaInst>(Op1) ||
        isa<ConstantPointerNull>(Op1)))
     return ReplaceInstUsesWith(I, ConstantInt::get(Type::Int1Ty, 
-                                                   !isTrueWhenEqual(I)));
+                                                   !I.isTrueWhenEqual()));
 
   // icmp's with boolean values can always be turned into bitwise operations
   if (Ty == Type::Int1Ty) {
@@ -5614,7 +5598,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
         if (LHSI->hasOneUse() && isa<ConstantPointerNull>(RHSC)) {
           AddToWorkList(LHSI);
           return ReplaceInstUsesWith(I, ConstantInt::get(Type::Int1Ty,
-                                                         !isTrueWhenEqual(I)));
+                                                         !I.isTrueWhenEqual()));
         }
         break;
       }