RegisterOneValue(global_var);
}
- for (llvm::GlobalAlias &global_alias : m_module->getAliases()) {
+ for (llvm::GlobalAlias &global_alias : m_module->getAliasList()) {
RegisterOneValue(global_alias);
}
return &Module::FunctionList;
}
- /// Detach \p Alias from the list but don't delete it.
- void removeAlias(GlobalAlias *Alias) { AliasList.remove(Alias); }
- /// Remove \p Alias from the list and delete it.
- void eraseAlias(GlobalAlias *Alias) { AliasList.erase(Alias); }
- /// Insert \p Alias at the end of the alias list and take ownership.
- void insertAlias(GlobalAlias *Alias) { AliasList.insert(AliasList.end(), Alias); }
- // Use alias_size() to get the size of AliasList.
- // Use aliases() to get a range of all Alias objects in AliasList.
-
-private: // Please use functions like insertAlias(), removeAlias() etc.
/// Get the Module's list of aliases (constant).
const AliasListType &getAliasList() const { return AliasList; }
/// Get the Module's list of aliases.
static AliasListType Module::*getSublistAccess(GlobalAlias*) {
return &Module::AliasList;
}
- friend class llvm::SymbolTableListTraits<llvm::GlobalAlias>;
-public:
/// Get the Module's list of ifuncs (constant).
const IFuncListType &getIFuncList() const { return IFuncList; }
/// Get the Module's list of ifuncs.
// Insert into the module, we know its name won't collide now.
if (IsAlias)
- M->insertAlias(GA.release());
+ M->getAliasList().push_back(GA.release());
else
M->getIFuncList().push_back(GI.release());
assert(GV->getName() == Name && "Should not be a name conflict!");
AddressSpace) {
setAliasee(Aliasee);
if (ParentModule)
- ParentModule->insertAlias(this);
+ ParentModule->getAliasList().push_back(this);
}
GlobalAlias *GlobalAlias::create(Type *Ty, unsigned AddressSpace,
}
void GlobalAlias::removeFromParent() {
- getParent()->removeAlias(this);
+ getParent()->getAliasList().remove(getIterator());
}
void GlobalAlias::eraseFromParent() {
- getParent()->eraseAlias(this);
+ getParent()->getAliasList().erase(getIterator());
}
void GlobalAlias::setAliasee(Constant *Aliasee) {
continue;
// Delete the alias.
- M.eraseAlias(&J);
+ M.getAliasList().erase(&J);
++NumAliasesRemoved;
Changed = true;
}
EXPECT_EQ(Ratio, ProfileSummary->getPartialProfileRatio());
}
-TEST(ModuleTest, AliasList) {
- // This tests all Module's functions that interact with Module::AliasList.
- LLVMContext C;
- SMDiagnostic Err;
- LLVMContext Context;
- std::unique_ptr<Module> M = parseAssemblyString(R"(
-declare void @Foo()
-@GA = alias void (), ptr @Foo
-)",
- Err, Context);
- Function *Foo = M->getFunction("Foo");
- auto *GA = M->getNamedAlias("GA");
- EXPECT_EQ(M->alias_size(), 1u);
- auto *NewGA =
- GlobalAlias::create(Foo->getType(), 0, GlobalValue::ExternalLinkage,
- "NewGA", Foo, /*Parent=*/nullptr);
- EXPECT_EQ(M->alias_size(), 1u);
-
- M->insertAlias(NewGA);
- EXPECT_EQ(&*std::prev(M->aliases().end()), NewGA);
-
- M->removeAlias(NewGA);
- EXPECT_EQ(M->alias_size(), 1u);
- M->insertAlias(NewGA);
- EXPECT_EQ(M->alias_size(), 2u);
- EXPECT_EQ(&*std::prev(M->aliases().end()), NewGA);
-
- auto Range = M->aliases();
- EXPECT_EQ(&*Range.begin(), GA);
- EXPECT_EQ(&*std::next(Range.begin()), NewGA);
- EXPECT_EQ(std::next(Range.begin(), 2), Range.end());
-
- M->removeAlias(NewGA);
- EXPECT_EQ(M->alias_size(), 1u);
-
- M->insertAlias(NewGA);
- M->eraseAlias(NewGA);
- EXPECT_EQ(M->alias_size(), 1u);
-}
-
} // end namespace