diff options
author | Augie Fackler <augie@google.com> | 2022-02-03 08:30:37 -0800 |
---|---|---|
committer | Philip Reames <listmail@philipreames.com> | 2022-02-03 08:36:36 -0800 |
commit | b2d091aa5d31ffaa6715868a1401472ed5f55808 (patch) | |
tree | e1c70b2146f4cb88a239b4f905b2aa4a0d647044 | |
parent | 997a86b99cd67de99385dc72c384cdae326d26f6 (diff) |
[NFC] MemoryBuiltins: tease out a getFreeFunctionDataForFunction helper
-rw-r--r-- | llvm/lib/Analysis/MemoryBuiltins.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/llvm/lib/Analysis/MemoryBuiltins.cpp b/llvm/lib/Analysis/MemoryBuiltins.cpp index 49f0d5da9a31..a2d102142957 100644 --- a/llvm/lib/Analysis/MemoryBuiltins.cpp +++ b/llvm/lib/Analysis/MemoryBuiltins.cpp @@ -43,6 +43,7 @@ #include <cassert> #include <cstdint> #include <iterator> +#include <type_traits> #include <utility> using namespace llvm; @@ -434,16 +435,22 @@ static const std::pair<LibFunc, FreeFnsTy> FreeFnData[] = { }; // clang-format on -/// isLibFreeFunction - Returns true if the function is a builtin free() -bool llvm::isLibFreeFunction(const Function *F, const LibFunc TLIFn) { +Optional<FreeFnsTy> getFreeFunctionDataForFunction(const Function *Callee, + const LibFunc TLIFn) { const auto *Iter = find_if(FreeFnData, [TLIFn](const std::pair<LibFunc, FreeFnsTy> &P) { return P.first == TLIFn; }); - if (Iter == std::end(FreeFnData)) { + if (Iter == std::end(FreeFnData)) + return None; + return Iter->second; +} + +/// isLibFreeFunction - Returns true if the function is a builtin free() +bool llvm::isLibFreeFunction(const Function *F, const LibFunc TLIFn) { + Optional<FreeFnsTy> FnData = getFreeFunctionDataForFunction(F, TLIFn); + if (!FnData.hasValue()) return false; - } - const FreeFnsTy *FnData = &Iter->second; // Check free prototype. // FIXME: workaround for PR5130, this will be obsolete when a nobuiltin |