aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexis Engelke <engelke@in.tum.de>2024-08-14 09:41:04 +0200
committerGitHub <noreply@github.com>2024-08-14 09:41:04 +0200
commitce8cb7c389460ef7fa56b521742a58ead647fda6 (patch)
tree8c5765f06b5966700c49046f8647dc692fd5890c
parent6da3361f504495cef71caa4de4297234b6ea7fc7 (diff)
downloadllvm-ce8cb7c389460ef7fa56b521742a58ead647fda6.zip
llvm-ce8cb7c389460ef7fa56b521742a58ead647fda6.tar.gz
llvm-ce8cb7c389460ef7fa56b521742a58ead647fda6.tar.bz2
[Analysis][NFC] Don't use BitVector for nobuiltin overrides
Avoid one heap allocation per function per constructed TLI. The BitVector is never resized, so a bitset is sufficient. Pull Request: https://github.com/llvm/llvm-project/pull/103411
-rw-r--r--llvm/include/llvm/Analysis/TargetLibraryInfo.h10
1 files changed, 6 insertions, 4 deletions
diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfo.h b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
index db5e80c..d0506a8 100644
--- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h
+++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h
@@ -9,12 +9,12 @@
#ifndef LLVM_ANALYSIS_TARGETLIBRARYINFO_H
#define LLVM_ANALYSIS_TARGETLIBRARYINFO_H
-#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/PassManager.h"
#include "llvm/Pass.h"
#include "llvm/TargetParser/Triple.h"
+#include <bitset>
#include <optional>
namespace llvm {
@@ -287,12 +287,12 @@ class TargetLibraryInfo {
/// Support for -fno-builtin* options as function attributes, overrides
/// information in global TargetLibraryInfoImpl.
- BitVector OverrideAsUnavailable;
+ std::bitset<NumLibFuncs> OverrideAsUnavailable;
public:
explicit TargetLibraryInfo(const TargetLibraryInfoImpl &Impl,
std::optional<const Function *> F = std::nullopt)
- : Impl(&Impl), OverrideAsUnavailable(NumLibFuncs) {
+ : Impl(&Impl) {
if (!F)
return;
if ((*F)->hasFnAttribute("no-builtins"))
@@ -329,7 +329,7 @@ public:
return OverrideAsUnavailable == CalleeTLI.OverrideAsUnavailable;
// We can inline if the callee's nobuiltin attributes are no stricter than
// the caller's.
- return !CalleeTLI.OverrideAsUnavailable.test(OverrideAsUnavailable);
+ return (CalleeTLI.OverrideAsUnavailable & ~OverrideAsUnavailable).none();
}
/// Return true if the function type FTy is valid for the library function
@@ -373,10 +373,12 @@ public:
/// Forces a function to be marked as unavailable.
void setUnavailable(LibFunc F) LLVM_ATTRIBUTE_UNUSED {
+ assert(F < OverrideAsUnavailable.size() && "out-of-bounds LibFunc");
OverrideAsUnavailable.set(F);
}
TargetLibraryInfoImpl::AvailabilityState getState(LibFunc F) const {
+ assert(F < OverrideAsUnavailable.size() && "out-of-bounds LibFunc");
if (OverrideAsUnavailable[F])
return TargetLibraryInfoImpl::Unavailable;
return Impl->getState(F);