aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ValueTracking.cpp
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2018-03-06 16:57:55 +0000
committerSanjay Patel <spatel@rotateright.com>2018-03-06 16:57:55 +0000
commit7ed0bc26acebe2d88d3d86d0273bca960f8c5d0f (patch)
treefc93c09581a71f15bc30b7940e7f5165bdc20641 /llvm/lib/Analysis/ValueTracking.cpp
parent41073e8046d3fd52c42b2de718bad6b761cbd1ac (diff)
downloadllvm-7ed0bc26acebe2d88d3d86d0273bca960f8c5d0f.zip
llvm-7ed0bc26acebe2d88d3d86d0273bca960f8c5d0f.tar.gz
llvm-7ed0bc26acebe2d88d3d86d0273bca960f8c5d0f.tar.bz2
[ValueTracking] move helpers for SelectPatterns from InstCombine to ValueTracking
Most of the folds based on SelectPatternResult belong in InstSimplify rather than InstCombine, so the helper code should be available to other passes/analysis. llvm-svn: 326812
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 411ede4..c132586 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -4661,6 +4661,30 @@ SelectPatternResult llvm::matchSelectPattern(Value *V, Value *&LHS, Value *&RHS,
LHS, RHS, Depth);
}
+CmpInst::Predicate llvm::getMinMaxPred(SelectPatternFlavor SPF, bool Ordered) {
+ if (SPF == SPF_SMIN) return ICmpInst::ICMP_SLT;
+ if (SPF == SPF_UMIN) return ICmpInst::ICMP_ULT;
+ if (SPF == SPF_SMAX) return ICmpInst::ICMP_SGT;
+ if (SPF == SPF_UMAX) return ICmpInst::ICMP_UGT;
+ if (SPF == SPF_FMINNUM)
+ return Ordered ? FCmpInst::FCMP_OLT : FCmpInst::FCMP_ULT;
+ if (SPF == SPF_FMAXNUM)
+ return Ordered ? FCmpInst::FCMP_OGT : FCmpInst::FCMP_UGT;
+ llvm_unreachable("unhandled!");
+}
+
+SelectPatternFlavor llvm::getInverseMinMaxFlavor(SelectPatternFlavor SPF) {
+ if (SPF == SPF_SMIN) return SPF_SMAX;
+ if (SPF == SPF_UMIN) return SPF_UMAX;
+ if (SPF == SPF_SMAX) return SPF_SMIN;
+ if (SPF == SPF_UMAX) return SPF_UMIN;
+ llvm_unreachable("unhandled!");
+}
+
+CmpInst::Predicate llvm::getInverseMinMaxPred(SelectPatternFlavor SPF) {
+ return getMinMaxPred(getInverseMinMaxFlavor(SPF));
+}
+
/// Return true if "icmp Pred LHS RHS" is always true.
static bool isTruePredicate(CmpInst::Predicate Pred, const Value *LHS,
const Value *RHS, const DataLayout &DL,