|
9 | 9 | #ifndef LLVM_ANALYSIS_TARGETLIBRARYINFO_H |
10 | 10 | #define LLVM_ANALYSIS_TARGETLIBRARYINFO_H |
11 | 11 |
|
12 | | -#include "llvm/ADT/BitVector.h" |
13 | 12 | #include "llvm/ADT/DenseMap.h" |
14 | 13 | #include "llvm/IR/InstrTypes.h" |
15 | 14 | #include "llvm/IR/PassManager.h" |
16 | 15 | #include "llvm/Pass.h" |
17 | 16 | #include "llvm/TargetParser/Triple.h" |
| 17 | +#include <bitset> |
18 | 18 | #include <optional> |
19 | 19 |
|
20 | 20 | namespace llvm { |
@@ -287,12 +287,12 @@ class TargetLibraryInfo { |
287 | 287 |
|
288 | 288 | /// Support for -fno-builtin* options as function attributes, overrides |
289 | 289 | /// information in global TargetLibraryInfoImpl. |
290 | | - BitVector OverrideAsUnavailable; |
| 290 | + std::bitset<NumLibFuncs> OverrideAsUnavailable; |
291 | 291 |
|
292 | 292 | public: |
293 | 293 | explicit TargetLibraryInfo(const TargetLibraryInfoImpl &Impl, |
294 | 294 | std::optional<const Function *> F = std::nullopt) |
295 | | - : Impl(&Impl), OverrideAsUnavailable(NumLibFuncs) { |
| 295 | + : Impl(&Impl) { |
296 | 296 | if (!F) |
297 | 297 | return; |
298 | 298 | if ((*F)->hasFnAttribute("no-builtins")) |
@@ -329,7 +329,7 @@ class TargetLibraryInfo { |
329 | 329 | return OverrideAsUnavailable == CalleeTLI.OverrideAsUnavailable; |
330 | 330 | // We can inline if the callee's nobuiltin attributes are no stricter than |
331 | 331 | // the caller's. |
332 | | - return !CalleeTLI.OverrideAsUnavailable.test(OverrideAsUnavailable); |
| 332 | + return (CalleeTLI.OverrideAsUnavailable & ~OverrideAsUnavailable).none(); |
333 | 333 | } |
334 | 334 |
|
335 | 335 | /// Return true if the function type FTy is valid for the library function |
@@ -373,10 +373,12 @@ class TargetLibraryInfo { |
373 | 373 |
|
374 | 374 | /// Forces a function to be marked as unavailable. |
375 | 375 | void setUnavailable(LibFunc F) LLVM_ATTRIBUTE_UNUSED { |
| 376 | + assert(F < OverrideAsUnavailable.size() && "out-of-bounds LibFunc"); |
376 | 377 | OverrideAsUnavailable.set(F); |
377 | 378 | } |
378 | 379 |
|
379 | 380 | TargetLibraryInfoImpl::AvailabilityState getState(LibFunc F) const { |
| 381 | + assert(F < OverrideAsUnavailable.size() && "out-of-bounds LibFunc"); |
380 | 382 | if (OverrideAsUnavailable[F]) |
381 | 383 | return TargetLibraryInfoImpl::Unavailable; |
382 | 384 | return Impl->getState(F); |
|
0 commit comments