本文整理汇总了C++中AliasAnalysis::getLocation方法的典型用法代码示例。如果您正苦于以下问题:C++ AliasAnalysis::getLocation方法的具体用法?C++ AliasAnalysis::getLocation怎么用?C++ AliasAnalysis::getLocation使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AliasAnalysis
的用法示例。
在下文中一共展示了AliasAnalysis::getLocation方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Location
/// getLocForWrite - Return a Location stored to by the specified instruction.
/// If isRemovable returns true, this function and getLocForRead completely
/// describe the memory operations for this instruction.
static AliasAnalysis::Location
getLocForWrite(Instruction *Inst, AliasAnalysis &AA) {
const DataLayout *DL = AA.getDataLayout();
if (StoreInst *SI = dyn_cast<StoreInst>(Inst))
return AA.getLocation(SI);
if (MemIntrinsic *MI = dyn_cast<MemIntrinsic>(Inst)) {
// memcpy/memmove/memset.
AliasAnalysis::Location Loc = AA.getLocationForDest(MI);
// If we don't have target data around, an unknown size in Location means
// that we should use the size of the pointee type. This isn't valid for
// memset/memcpy, which writes more than an i8.
if (Loc.Size == AliasAnalysis::UnknownSize && DL == nullptr)
return AliasAnalysis::Location();
return Loc;
}
IntrinsicInst *II = dyn_cast<IntrinsicInst>(Inst);
if (!II) return AliasAnalysis::Location();
switch (II->getIntrinsicID()) {
default: return AliasAnalysis::Location(); // Unhandled intrinsic.
case Intrinsic::init_trampoline:
// If we don't have target data around, an unknown size in Location means
// that we should use the size of the pointee type. This isn't valid for
// init.trampoline, which writes more than an i8.
if (!DL) return AliasAnalysis::Location();
// FIXME: We don't know the size of the trampoline, so we can't really
// handle it here.
return AliasAnalysis::Location(II->getArgOperand(0));
case Intrinsic::lifetime_end: {
uint64_t Len = cast<ConstantInt>(II->getArgOperand(0))->getZExtValue();
return AliasAnalysis::Location(II->getArgOperand(1), Len);
}
}
}
示例2: processDepResult
void DataDependence::processDepResult(Instruction *inst,
MemoryDependenceAnalysis &MDA, AliasAnalysis &AA) {
// TODO: This is probably a good place to check of the dependency
// information is calculated on-demand
MemDepResult Res = MDA.getDependency(inst);
if (!Res.isNonLocal()) {
// local results (not-non-local) can be simply handled. They are just
// a pair of insturctions and a dependency type
// Get dependency information
DepInfo newInfo;
newInfo = getDepInfo(Res);
#ifdef MK_DEBUG
//errs() << "[DEBUG] newInfo depInst == " << Res.getInst() << '\n';
if (Res.getInst() == NULL) {
errs() << "[DEBUG] NULL dependency found, dep type: "
<< depTypeToString(newInfo.Type_) << '\n';
}
#endif
// Save into map
assert(newInfo.valid());
LocalDeps_[inst] = newInfo;
}
else {
// Handle NonLocal dependencies. The function call
// getNonLocalPointerDependency() assumes that a result of NonLocal
// has already been encountered
// Get dependency information
DepInfo newInfo;
newInfo = getDepInfo(Res);
assert(newInfo.Type_ == NonLocal);
assert(Res.isNonLocal());
SmallVector<NonLocalDepResult, 4> NLDep;
if (LoadInst *LI = dyn_cast<LoadInst>(inst)) {
if (!LI->isUnordered()) {
// FIXME: Handle atomic/volatile loads.
errs() << "[WARNING] atomic/volatile loads are not handled\n";
assert(false && "atomic/volatile loads not handled");
//Deps[Inst].insert(std::make_pair(getInstTypePair(0, Unknown),
//static_cast<BasicBlock *>(0)));
return;
}
AliasAnalysis::Location Loc = AA.getLocation(LI);
MDA.getNonLocalPointerDependency(Loc, true, LI->getParent(), NLDep);
}
else if (StoreInst *SI = dyn_cast<StoreInst>(inst)) {
if (!SI->isUnordered()) {
// FIXME: Handle atomic/volatile stores.
errs() << "[WARNING] atomic/volatile stores are not handled\n";
assert(false && "atomic/volatile stores not handled");
//Deps[Inst].insert(std::make_pair(getInstTypePair(0, Unknown),
//static_cast<BasicBlock *>(0)));
return;
}
AliasAnalysis::Location Loc = AA.getLocation(SI);
MDA.getNonLocalPointerDependency(Loc, false, SI->getParent(),
NLDep);
}
else if (VAArgInst *VI = dyn_cast<VAArgInst>(inst)) {
AliasAnalysis::Location Loc = AA.getLocation(VI);
MDA.getNonLocalPointerDependency(Loc, false, VI->getParent(),
NLDep);
}
else {
llvm_unreachable("Unknown memory instruction!");
}
#ifdef MK_DEBUG
errs() << "[DEBUG] NLDep.size() == " << NLDep.size() << '\n';
#endif
for (auto I = NLDep.begin(), E = NLDep.end(); I != E; ++I) {
NonLocalDeps_[inst].push_back(*I);
}
} // end else
}