Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions llvm/include/llvm/Analysis/CaptureTracking.h
Original file line number Diff line number Diff line change
Expand Up @@ -195,12 +195,6 @@ namespace llvm {
/// implicit captures such as for external globals.
LLVM_ABI void PointerMayBeCaptured(const Value *V, CaptureTracker *Tracker,
unsigned MaxUsesToExplore = 0);

/// Returns true if the pointer is to a function-local object that never
/// escapes from the function.
LLVM_ABI bool isNonEscapingLocalObject(
const Value *V,
SmallDenseMap<const Value *, bool, 8> *IsCapturedCache = nullptr);
} // end namespace llvm

#endif
12 changes: 11 additions & 1 deletion llvm/lib/Analysis/BasicAliasAnalysis.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,17 @@ CaptureAnalysis::~CaptureAnalysis() = default;
bool SimpleCaptureAnalysis::isNotCapturedBefore(const Value *Object,
const Instruction *I,
bool OrAt) {
return isNonEscapingLocalObject(Object, &IsCapturedCache);
if (!isIdentifiedFunctionLocal(Object))
return false;

auto [CacheIt, Inserted] = IsCapturedCache.insert({Object, false});
if (!Inserted)
return CacheIt->second;

bool Ret = !capturesAnything(PointerMayBeCaptured(
Object, /*ReturnCaptures=*/false, CaptureComponents::Provenance));
CacheIt->second = Ret;
return Ret;
}

static bool isNotInCycle(const Instruction *I, const DominatorTree *DT,
Expand Down
24 changes: 0 additions & 24 deletions llvm/lib/Analysis/CaptureTracking.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -447,27 +447,3 @@ void llvm::PointerMayBeCaptured(const Value *V, CaptureTracker *Tracker,

// All uses examined.
}

bool llvm::isNonEscapingLocalObject(
const Value *V, SmallDenseMap<const Value *, bool, 8> *IsCapturedCache) {
SmallDenseMap<const Value *, bool, 8>::iterator CacheIt;
if (IsCapturedCache) {
bool Inserted;
std::tie(CacheIt, Inserted) = IsCapturedCache->insert({V, false});
if (!Inserted)
// Found cached result, return it!
return CacheIt->second;
}

// If this is an identified function-local object, check to see if it escapes.
// We only care about provenance here, not address capture.
if (isIdentifiedFunctionLocal(V)) {
bool Ret = !capturesAnything(PointerMayBeCaptured(
V, /*ReturnCaptures=*/false, CaptureComponents::Provenance));
if (IsCapturedCache)
CacheIt->second = Ret;
return Ret;
}

return false;
}
Loading