diff options
author | Dhruv Chawla <44582521+dc03@users.noreply.github.com> | 2023-07-21 19:47:02 +0530 |
---|---|---|
committer | Dhruv Chawla <44582521+dc03@users.noreply.github.com> | 2023-07-24 15:29:46 +0530 |
commit | de7a7aa1106d23df71bb535649085db552d38de5 (patch) | |
tree | 4d07117f4e270fcd803ecaf3043cd620c54c98e1 /llvm/lib/Analysis/ValueTracking.cpp | |
parent | 5b95bba6fe411e82c7c31cb542748b00ff633cdb (diff) | |
download | llvm-de7a7aa1106d23df71bb535649085db552d38de5.zip llvm-de7a7aa1106d23df71bb535649085db552d38de5.tar.gz llvm-de7a7aa1106d23df71bb535649085db552d38de5.tar.bz2 |
[NFC][ValueTracking]: Remove redundant computeKnownBits call for LoadInst in isKnownNonZero
For load instructions, computeKnownBits only checks the range metadata.
This check is already present in isKnownNonZero, so there is no need to
fall through to computeKnownBits.
This change gives a speed improvement of 0.12-0.18%:
https://llvm-compile-time-tracker.com/compare.php?from=3c6ed559e5274307995586c1499a2c8e4e0276a0&to=78b462d8c4ae079638b728c6446da5999c4ee9f8&stat=instructions:u
Differential Revision: https://reviews.llvm.org/D155958
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r-- | llvm/lib/Analysis/ValueTracking.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index e6ba910..5d52685 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp @@ -2679,6 +2679,14 @@ static bool isKnownNonZeroFromOperator(const Operator *I, return isKnownNonZero(I->getOperand(0), Depth, Q) && isGuaranteedNotToBePoison(I->getOperand(0), Q.AC, Q.CxtI, Q.DT, Depth); + case Instruction::Load: + // A Load tagged with nonnull metadata is never null. + if (Q.IIQ.getMetadata(cast<LoadInst>(I), LLVMContext::MD_nonnull)) + return true; + + // No need to fall through to computeKnownBits as range metadata is already + // handled in isKnownNonZero. + return false; case Instruction::Call: if (auto *II = dyn_cast<IntrinsicInst>(I)) { switch (II->getIntrinsicID()) { @@ -2843,11 +2851,6 @@ bool isKnownNonZero(const Value *V, const APInt &DemandedElts, unsigned Depth, return true; } - // A Load tagged with nonnull metadata is never null. - if (const LoadInst *LI = dyn_cast<LoadInst>(V)) - if (Q.IIQ.getMetadata(LI, LLVMContext::MD_nonnull)) - return true; - if (const auto *Call = dyn_cast<CallBase>(V)) { if (Call->isReturnNonNull()) return true; |