[llvm] d899dc5 - [NFC][ValueTracking]: Move some code from isKnownNonZero to isKnownNonZeroFromOperator

Dhruv Chawla via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 26 01:29:23 PDT 2023


Author: Dhruv Chawla
Date: 2023-07-26T13:50:38+05:30
New Revision: d899dc5296c751a60afbe3eae2039dd1b326a499

URL: https://github.com/llvm/llvm-project/commit/d899dc5296c751a60afbe3eae2039dd1b326a499
DIFF: https://github.com/llvm/llvm-project/commit/d899dc5296c751a60afbe3eae2039dd1b326a499.diff

LOG: [NFC][ValueTracking]: Move some code from isKnownNonZero to isKnownNonZeroFromOperator

There is some pointer simplification code originally from isKnownNonNull
that is now better suited to be in isKnownNonZeroFromOperator.

Differential Revision: https://reviews.llvm.org/D156141

Added: 
    

Modified: 
    llvm/lib/Analysis/ValueTracking.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 5d526858e00e0c..e335d7c181995d 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -2454,6 +2454,9 @@ static bool isKnownNonZeroFromOperator(const Operator *I,
                                        unsigned Depth, const SimplifyQuery &Q) {
   unsigned BitWidth = getBitWidth(I->getType()->getScalarType(), Q.DL);
   switch (I->getOpcode()) {
+  case Instruction::Alloca:
+    // Alloca never returns null, malloc might.
+    return I->getType()->getPointerAddressSpace() == 0;
   case Instruction::GetElementPtr:
     if (I->getType()->isPointerTy())
       return isGEPKnownNonNull(cast<GEPOperator>(I), Depth, Q);
@@ -2688,6 +2691,15 @@ static bool isKnownNonZeroFromOperator(const Operator *I,
     // handled in isKnownNonZero.
     return false;
   case Instruction::Call:
+  case Instruction::Invoke:
+    if (I->getType()->isPointerTy()) {
+      const auto *Call = cast<CallBase>(I);
+      if (Call->isReturnNonNull())
+        return true;
+      if (const auto *RP = getArgumentAliasingToReturnedPointer(Call, true))
+        return isKnownNonZero(RP, Depth, Q);
+    }
+
     if (auto *II = dyn_cast<IntrinsicInst>(I)) {
       switch (II->getIntrinsicID()) {
       case Intrinsic::sshl_sat:
@@ -2838,10 +2850,6 @@ bool isKnownNonZero(const Value *V, const APInt &DemandedElts, unsigned Depth,
   // Check for pointer simplifications.
 
   if (PointerType *PtrTy = dyn_cast<PointerType>(V->getType())) {
-    // Alloca never returns null, malloc might.
-    if (isa<AllocaInst>(V) && PtrTy->getAddressSpace() == 0)
-      return true;
-
     // A byval, inalloca may not be null in a non-default addres space. A
     // nonnull argument is assumed never 0.
     if (const Argument *A = dyn_cast<Argument>(V)) {
@@ -2850,13 +2858,6 @@ bool isKnownNonZero(const Value *V, const APInt &DemandedElts, unsigned Depth,
            A->hasNonNullAttr()))
         return true;
     }
-
-    if (const auto *Call = dyn_cast<CallBase>(V)) {
-      if (Call->isReturnNonNull())
-        return true;
-      if (const auto *RP = getArgumentAliasingToReturnedPointer(Call, true))
-        return isKnownNonZero(RP, Depth, Q);
-    }
   }
 
   if (const auto *I = dyn_cast<Operator>(V))


        


More information about the llvm-commits mailing list