mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
[ValueTracking] Remove AllocaForValue parameter
findAllocaForValue uses AllocaForValue to cache resolved values. The function is used only to resolve arguments of lifetime intrinsic which usually are not fare for allocas. So result reuse is likely unnoticeable. In followup patches I'd like to replace the function with GetUnderlyingObjects. Depends on D84616. Differential Revision: https://reviews.llvm.org/D84617
This commit is contained in:
parent
fe28af466f
commit
0093612032
@ -415,8 +415,10 @@ class Value;
|
||||
const DataLayout &DL);
|
||||
|
||||
/// Finds alloca where the value comes from.
|
||||
AllocaInst *
|
||||
findAllocaForValue(Value *V, DenseMap<Value *, AllocaInst *> &AllocaForValue);
|
||||
AllocaInst *findAllocaForValue(Value *V);
|
||||
inline const AllocaInst *findAllocaForValue(const Value *V) {
|
||||
return findAllocaForValue(const_cast<Value *>(V));
|
||||
}
|
||||
|
||||
/// Return true if the only users of this pointer are lifetime markers.
|
||||
bool onlyUsedByLifetimeMarkers(const Value *V);
|
||||
|
@ -4313,9 +4313,8 @@ bool llvm::getUnderlyingObjectsForCodeGen(const Value *V,
|
||||
return true;
|
||||
}
|
||||
|
||||
AllocaInst *
|
||||
llvm::findAllocaForValue(Value *V,
|
||||
DenseMap<Value *, AllocaInst *> &AllocaForValue) {
|
||||
static AllocaInst *
|
||||
findAllocaForValue(Value *V, DenseMap<Value *, AllocaInst *> &AllocaForValue) {
|
||||
if (AllocaInst *AI = dyn_cast<AllocaInst>(V))
|
||||
return AI;
|
||||
// See if we've already calculated (or started to calculate) alloca for a
|
||||
@ -4348,6 +4347,11 @@ llvm::findAllocaForValue(Value *V,
|
||||
return Res;
|
||||
}
|
||||
|
||||
AllocaInst *llvm::findAllocaForValue(Value *V) {
|
||||
DenseMap<Value *, AllocaInst *> AllocaForValue;
|
||||
return ::findAllocaForValue(V, AllocaForValue);
|
||||
}
|
||||
|
||||
static bool onlyUsedByLifetimeMarkersOrDroppableInstsHelper(
|
||||
const Value *V, bool AllowLifetime, bool AllowDroppable) {
|
||||
for (const User *U : V->users()) {
|
||||
|
@ -544,7 +544,6 @@ bool AArch64StackTagging::runOnFunction(Function &Fn) {
|
||||
|
||||
MapVector<AllocaInst *, AllocaInfo> Allocas; // need stable iteration order
|
||||
SmallVector<Instruction *, 8> RetVec;
|
||||
DenseMap<Value *, AllocaInst *> AllocaForValue;
|
||||
SmallVector<Instruction *, 4> UnrecognizedLifetimes;
|
||||
|
||||
for (auto &BB : *F) {
|
||||
@ -566,8 +565,7 @@ bool AArch64StackTagging::runOnFunction(Function &Fn) {
|
||||
auto *II = dyn_cast<IntrinsicInst>(I);
|
||||
if (II && (II->getIntrinsicID() == Intrinsic::lifetime_start ||
|
||||
II->getIntrinsicID() == Intrinsic::lifetime_end)) {
|
||||
AllocaInst *AI =
|
||||
llvm::findAllocaForValue(II->getArgOperand(1), AllocaForValue);
|
||||
AllocaInst *AI = findAllocaForValue(II->getArgOperand(1));
|
||||
if (!AI) {
|
||||
UnrecognizedLifetimes.push_back(I);
|
||||
continue;
|
||||
|
@ -911,10 +911,6 @@ struct FunctionStackPoisoner : public InstVisitor<FunctionStackPoisoner> {
|
||||
AllocaInst *DynamicAllocaLayout = nullptr;
|
||||
IntrinsicInst *LocalEscapeCall = nullptr;
|
||||
|
||||
// Maps Value to an AllocaInst from which the Value is originated.
|
||||
using AllocaForValueMapTy = DenseMap<Value *, AllocaInst *>;
|
||||
AllocaForValueMapTy AllocaForValue;
|
||||
|
||||
bool HasInlineAsm = false;
|
||||
bool HasReturnsTwiceCall = false;
|
||||
|
||||
@ -1065,8 +1061,7 @@ struct FunctionStackPoisoner : public InstVisitor<FunctionStackPoisoner> {
|
||||
!ConstantInt::isValueValidForType(IntptrTy, SizeValue))
|
||||
return;
|
||||
// Find alloca instruction that corresponds to llvm.lifetime argument.
|
||||
AllocaInst *AI =
|
||||
llvm::findAllocaForValue(II.getArgOperand(1), AllocaForValue);
|
||||
AllocaInst *AI = findAllocaForValue(II.getArgOperand(1));
|
||||
if (!AI) {
|
||||
HasUntracedLifetimeIntrinsic = true;
|
||||
return;
|
||||
|
@ -2693,9 +2693,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
void handleLifetimeStart(IntrinsicInst &I) {
|
||||
if (!PoisonStack)
|
||||
return;
|
||||
DenseMap<Value *, AllocaInst *> AllocaForValue;
|
||||
AllocaInst *AI =
|
||||
llvm::findAllocaForValue(I.getArgOperand(1), AllocaForValue);
|
||||
AllocaInst *AI = llvm::findAllocaForValue(I.getArgOperand(1));
|
||||
if (!AI)
|
||||
InstrumentLifetimeStart = false;
|
||||
LifetimeStartList.push_back(std::make_pair(&I, AI));
|
||||
|
Loading…
Reference in New Issue
Block a user