summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAugie Fackler <augie@google.com>2022-02-03 08:30:37 -0800
committerPhilip Reames <listmail@philipreames.com>2022-02-03 08:36:36 -0800
commitb2d091aa5d31ffaa6715868a1401472ed5f55808 (patch)
treee1c70b2146f4cb88a239b4f905b2aa4a0d647044
parent997a86b99cd67de99385dc72c384cdae326d26f6 (diff)
[NFC] MemoryBuiltins: tease out a getFreeFunctionDataForFunction helper
-rw-r--r--llvm/lib/Analysis/MemoryBuiltins.cpp17
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