diff options
author | Ramkumar Ramachandra <ramkumar.ramachandra@codasip.com> | 2024-10-14 11:37:30 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-14 11:37:30 +0100 |
commit | c5f82f789365bcdd95efd14580419be4b2d92e21 (patch) | |
tree | a097cd0ede22d481f9b2775f86fd964fcf4966cf /llvm/lib/Analysis/ValueTracking.cpp | |
parent | fdf2b0a252c8aac9805b110a249817502d10e39f (diff) | |
download | llvm-c5f82f789365bcdd95efd14580419be4b2d92e21.zip llvm-c5f82f789365bcdd95efd14580419be4b2d92e21.tar.gz llvm-c5f82f789365bcdd95efd14580419be4b2d92e21.tar.bz2 |
ValueTracking: introduce llvm::isNotCrossLaneOperation (#112011)
Factor out and unify common code from InstSimplify and InstCombine that
partially guard against cross-lane vector operations into
llvm::isNotCrossLaneOperation in ValueTracking.
Alive2 proofs for changed tests: https://alive2.llvm.org/ce/z/68H4ka
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r-- | llvm/lib/Analysis/ValueTracking.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index 446ff42..4e76f35 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp @@ -6947,6 +6947,29 @@ bool llvm::onlyUsedByLifetimeMarkersOrDroppableInsts(const Value *V) { V, /* AllowLifetime */ true, /* AllowDroppable */ true); } +bool llvm::isNotCrossLaneOperation(const Instruction *I) { + if (auto *II = dyn_cast<IntrinsicInst>(I)) { + switch (II->getIntrinsicID()) { + // TODO: expand this list. + case Intrinsic::ctlz: + case Intrinsic::cttz: + case Intrinsic::ctpop: + case Intrinsic::umin: + case Intrinsic::umax: + case Intrinsic::smin: + case Intrinsic::smax: + case Intrinsic::usub_sat: + case Intrinsic::uadd_sat: + case Intrinsic::ssub_sat: + case Intrinsic::sadd_sat: + return true; + default: + return false; + } + } + return !isa<CallBase, BitCastInst, ShuffleVectorInst, ExtractElementInst>(I); +} + bool llvm::isSafeToSpeculativelyExecute(const Instruction *Inst, const Instruction *CtxI, AssumptionCache *AC, |