return LiveOnEntryDef.get();
}
- using AccessListType = iplist<MemoryAccess>;
+ using AccessList = iplist<MemoryAccess>;
/// \brief Return the list of MemoryAccess's for a given basic block.
///
/// This list is not modifiable by the user.
- const AccessListType *getBlockAccesses(const BasicBlock *BB) const {
+ const AccessList *getBlockAccesses(const BasicBlock *BB) const {
auto It = PerBlockAccesses.find(BB);
return It == PerBlockAccesses.end() ? nullptr : It->second.get();
}
private:
void verifyUseInDefs(MemoryAccess *, MemoryAccess *) const;
- using AccessMap =
- DenseMap<const BasicBlock *, std::unique_ptr<AccessListType>>;
+ using AccessMap = DenseMap<const BasicBlock *, std::unique_ptr<AccessList>>;
void
determineInsertionPoint(const SmallPtrSetImpl<BasicBlock *> &DefiningBlocks);
MemoryAccess *renameBlock(BasicBlock *, MemoryAccess *);
void renamePass(DomTreeNode *, MemoryAccess *IncomingVal,
SmallPtrSet<BasicBlock *, 16> &Visited);
- AccessListType *getOrCreateAccessList(BasicBlock *);
+ AccessList *getOrCreateAccessList(BasicBlock *);
AliasAnalysis *AA;
DominatorTree *DT;
Function &F;
auto It = PerBlockAccesses.find(BB);
// Skip most processing if the list is empty.
if (It != PerBlockAccesses.end()) {
- AccessListType *Accesses = It->second.get();
+ AccessList *Accesses = It->second.get();
for (MemoryAccess &L : *Accesses) {
switch (L.getValueID()) {
case Value::MemoryUseVal:
// Rename the phi nodes in our successor block
if (It == PerBlockAccesses.end() || !isa<MemoryPhi>(It->second->front()))
continue;
- AccessListType *Accesses = It->second.get();
+ AccessList *Accesses = It->second.get();
auto *Phi = cast<MemoryPhi>(&Accesses->front());
assert(std::find(succ_begin(BB), succ_end(BB), S) != succ_end(BB) &&
"Must be at least one edge from Succ to BB!");
MA.dropAllReferences();
}
-MemorySSA::AccessListType *MemorySSA::getOrCreateAccessList(BasicBlock *BB) {
+MemorySSA::AccessList *MemorySSA::getOrCreateAccessList(BasicBlock *BB) {
auto Res = PerBlockAccesses.insert(std::make_pair(BB, nullptr));
if (Res.second)
- Res.first->second = make_unique<AccessListType>();
+ Res.first->second = make_unique<AccessList>();
return Res.first->second.get();
}
// the accesses.
for (BasicBlock &B : F) {
bool InsertIntoDef = false;
- AccessListType *Accesses = nullptr;
+ AccessList *Accesses = nullptr;
for (Instruction &I : B) {
MemoryUseOrDef *MUD = createNewAccess(&I);
if (!MUD)
// Now place MemoryPhi nodes.
for (auto &BB : IDFBlocks) {
// Insert phi node
- AccessListType *Accesses = getOrCreateAccessList(BB);
+ AccessList *Accesses = getOrCreateAccessList(BB);
MemoryPhi *Phi = new MemoryPhi(F.getContext(), BB, NextID++);
ValueToMemoryAccess.insert(std::make_pair(BB, Phi));
// Phi's always are placed at the front of the block.
auto AI = PerBlockAccesses.find(BB);
if (AI == PerBlockAccesses.end())
continue;
- AccessListType *Accesses = AI->second.get();
+ AccessList *Accesses = AI->second.get();
for (auto &MA : *Accesses) {
if (auto *MU = dyn_cast<MemoryUse>(&MA)) {
Instruction *Inst = MU->getMemoryInst();
ValueToMemoryAccess.erase(MemoryInst);
auto AccessIt = PerBlockAccesses.find(MA->getBlock());
- std::unique_ptr<AccessListType> &Accesses = AccessIt->second;
+ std::unique_ptr<AccessList> &Accesses = AccessIt->second;
Accesses->erase(MA);
if (Accesses->empty())
PerBlockAccesses.erase(AccessIt);
continue;
for (User *U : MD->users()) {
- BasicBlock *UseBlock; (void)UseBlock;
+ BasicBlock *UseBlock;
+ (void)UseBlock;
// Things are allowed to flow to phi nodes over their predecessor edge.
if (auto *P = dyn_cast<MemoryPhi>(U)) {
for (const auto &Arg : P->operands()) {
return true;
// Get the access list for the block
- const AccessListType *AccessList = getBlockAccesses(Dominator->getBlock());
- AccessListType::const_reverse_iterator It(Dominator->getIterator());
+ const AccessList *AccessList = getBlockAccesses(Dominator->getBlock());
+ AccessList::const_reverse_iterator It(Dominator->getIterator());
// If we hit the beginning of the access list before we hit dominatee, we must
// dominate it