Value *MemPtr = 0;
uint64_t MemSize = 0;
- if (StoreInst *S = dyn_cast<StoreInst>(QueryInst)) {
+ if (StoreInst *SI = dyn_cast<StoreInst>(QueryInst)) {
// If this is a volatile store, don't mess around with it. Just return the
// previous instruction as a clobber.
- if (S->isVolatile())
+ if (SI->isVolatile())
return MemDepResult::getClobber(--ScanIt);
- MemPtr = S->getPointerOperand();
- MemSize = TD->getTypeStoreSize(S->getOperand(0)->getType());
+ MemPtr = SI->getPointerOperand();
+ MemSize = TD->getTypeStoreSize(SI->getOperand(0)->getType());
} else if (LoadInst *LI = dyn_cast<LoadInst>(QueryInst)) {
// If this is a volatile load, don't mess around with it. Just return the
// previous instruction as a clobber.
MemPtr = LI->getPointerOperand();
MemSize = TD->getTypeStoreSize(LI->getType());
- } else if (FreeInst* F = dyn_cast<FreeInst>(QueryInst)) {
- MemPtr = F->getPointerOperand();
+ } else if (FreeInst *FI = dyn_cast<FreeInst>(QueryInst)) {
+ MemPtr = FI->getPointerOperand();
// FreeInsts erase the entire structure, not just a field.
MemSize = ~0UL;
} else if (isa<CallInst>(QueryInst) || isa<InvokeInst>(QueryInst)) {
+ assert(0 && "Should use getCallSiteDependencyFrom!");
return getCallSiteDependencyFrom(CallSite::get(QueryInst), ScanIt, BB);
} else {
// Otherwise, this is a vaarg or non-memory instruction, just return a
}
// Do the scan.
- LocalCache = getDependencyFrom(QueryInst, ScanPos, QueryInst->getParent());
+ if (!isa<CallInst>(QueryInst) && !isa<InvokeInst>(QueryInst))
+ LocalCache = getDependencyFrom(QueryInst, ScanPos, QueryInst->getParent());
+ else
+ LocalCache = getCallSiteDependencyFrom(CallSite::get(QueryInst), ScanPos,
+ QueryInst->getParent());
// Remember the result!
if (Instruction *I = LocalCache.getInst())
}
// Find out if this block has a local dependency for QueryInst.
- MemDepResult Dep = getDependencyFrom(QueryInst, ScanPos, DirtyBB);
+ MemDepResult Dep;
+ if (!isa<CallInst>(QueryInst) && !isa<InvokeInst>(QueryInst))
+ Dep = getDependencyFrom(QueryInst, ScanPos, DirtyBB);
+ else
+ Dep = getCallSiteDependencyFrom(CallSite::get(QueryInst), ScanPos,
+ DirtyBB);
// If we had a dirty entry for the block, update it. Otherwise, just add
// a new entry.
return Cache;
}
+
/// removeInstruction - Remove an instruction from the dependence analysis,
/// updating the dependence of instructions that previously depended on it.
/// This method attempts to keep the cache coherent using the reverse map.