/// such mapping exists, return the empty string.
StringRef getVectorizedFunction(StringRef F, unsigned VF) const;
- /// Return true if the function F has a scalar equivalent, and set VF to be
- /// the vectorization factor.
- bool isFunctionScalarizable(StringRef F, unsigned &VF) const {
- return !getScalarizedFunction(F, VF).empty();
- }
-
- /// Return the name of the equivalent of F, scalarized. If no such mapping
- /// exists, return the empty string.
- ///
- /// Set VF to the vectorization factor.
- StringRef getScalarizedFunction(StringRef F, unsigned &VF) const;
-
/// Set to true iff i32 parameters to library functions should have signext
/// or zeroext attributes if they correspond to C-level int or unsigned int,
/// respectively.
return LHS.ScalarFnName < S;
}
-static bool compareWithVectorFnName(const VecDesc &LHS, StringRef S) {
- return LHS.VectorFnName < S;
-}
-
void TargetLibraryInfoImpl::addVectorizableFunctions(ArrayRef<VecDesc> Fns) {
llvm::append_range(VectorDescs, Fns);
llvm::sort(VectorDescs, compareByScalarFnName);
return StringRef();
}
-StringRef TargetLibraryInfoImpl::getScalarizedFunction(StringRef F,
- unsigned &VF) const {
- F = sanitizeFunctionName(F);
- if (F.empty())
- return F;
-
- std::vector<VecDesc>::const_iterator I =
- llvm::lower_bound(ScalarDescs, F, compareWithVectorFnName);
- if (I == VectorDescs.end() || StringRef(I->VectorFnName) != F)
- return StringRef();
- VF = I->VectorizationFactor;
- return I->ScalarFnName;
-}
-
TargetLibraryInfo TargetLibraryAnalysis::run(const Function &F,
FunctionAnalysisManager &) {
if (!BaselineInfoImpl)