[llvm] afad153 - Recommit: [NFC][IR] Make Module::getAliasList() private
Vasileios Porpodas via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 13 20:08:38 PST 2023
Author: Vasileios Porpodas
Date: 2023-02-13T20:07:56-08:00
New Revision: afad153a0890aadd1d239a4f8b94d201863c18f6
URL: https://github.com/llvm/llvm-project/commit/afad153a0890aadd1d239a4f8b94d201863c18f6
DIFF: https://github.com/llvm/llvm-project/commit/afad153a0890aadd1d239a4f8b94d201863c18f6.diff
LOG: Recommit: [NFC][IR] Make Module::getAliasList() private
This reverts commit 6d4a674acbc56458bb084878d82d16e393d45a6b.
Added:
Modified:
lldb/source/Expression/IRExecutionUnit.cpp
llvm/include/llvm/IR/Module.h
llvm/lib/AsmParser/LLParser.cpp
llvm/lib/IR/Globals.cpp
llvm/lib/Transforms/IPO/GlobalOpt.cpp
llvm/unittests/IR/ModuleTest.cpp
Removed:
################################################################################
diff --git a/lldb/source/Expression/IRExecutionUnit.cpp b/lldb/source/Expression/IRExecutionUnit.cpp
index c8068eca5c1b5..73a49e552e3d2 100644
--- a/lldb/source/Expression/IRExecutionUnit.cpp
+++ b/lldb/source/Expression/IRExecutionUnit.cpp
@@ -410,7 +410,7 @@ void IRExecutionUnit::GetRunnableInfo(Status &error, lldb::addr_t &func_addr,
RegisterOneValue(global_var);
}
- for (llvm::GlobalAlias &global_alias : m_module->getAliasList()) {
+ for (llvm::GlobalAlias &global_alias : m_module->aliases()) {
RegisterOneValue(global_alias);
}
diff --git a/llvm/include/llvm/IR/Module.h b/llvm/include/llvm/IR/Module.h
index e86880406b7ea..920729f806660 100644
--- a/llvm/include/llvm/IR/Module.h
+++ b/llvm/include/llvm/IR/Module.h
@@ -563,6 +563,16 @@ class LLVM_EXTERNAL_VISIBILITY Module {
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.
@@ -571,7 +581,9 @@ class LLVM_EXTERNAL_VISIBILITY Module {
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.
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index 077b290fe0e00..2db5e7dc140aa 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -1141,7 +1141,7 @@ bool LLParser::parseAliasOrIFunc(const std::string &Name, LocTy NameLoc,
// Insert into the module, we know its name won't collide now.
if (IsAlias)
- M->getAliasList().push_back(GA.release());
+ M->insertAlias(GA.release());
else
M->getIFuncList().push_back(GI.release());
assert(GV->getName() == Name && "Should not be a name conflict!");
diff --git a/llvm/lib/IR/Globals.cpp b/llvm/lib/IR/Globals.cpp
index a7c45730ff46c..7cf812c36984d 100644
--- a/llvm/lib/IR/Globals.cpp
+++ b/llvm/lib/IR/Globals.cpp
@@ -514,7 +514,7 @@ GlobalAlias::GlobalAlias(Type *Ty, unsigned AddressSpace, LinkageTypes Link,
AddressSpace) {
setAliasee(Aliasee);
if (ParentModule)
- ParentModule->getAliasList().push_back(this);
+ ParentModule->insertAlias(this);
}
GlobalAlias *GlobalAlias::create(Type *Ty, unsigned AddressSpace,
@@ -546,11 +546,11 @@ GlobalAlias *GlobalAlias::create(const Twine &Name, GlobalValue *Aliasee) {
}
void GlobalAlias::removeFromParent() {
- getParent()->getAliasList().remove(getIterator());
+ getParent()->removeAlias(this);
}
void GlobalAlias::eraseFromParent() {
- getParent()->getAliasList().erase(getIterator());
+ getParent()->eraseAlias(this);
}
void GlobalAlias::setAliasee(Constant *Aliasee) {
diff --git a/llvm/lib/Transforms/IPO/GlobalOpt.cpp b/llvm/lib/Transforms/IPO/GlobalOpt.cpp
index 0317a8bcb6bc7..040701e243ce5 100644
--- a/llvm/lib/Transforms/IPO/GlobalOpt.cpp
+++ b/llvm/lib/Transforms/IPO/GlobalOpt.cpp
@@ -2360,7 +2360,7 @@ OptimizeGlobalAliases(Module &M,
continue;
// Delete the alias.
- M.getAliasList().erase(&J);
+ M.eraseAlias(&J);
++NumAliasesRemoved;
Changed = true;
}
diff --git a/llvm/unittests/IR/ModuleTest.cpp b/llvm/unittests/IR/ModuleTest.cpp
index 4e2e394a92504..f9d682d87e7d1 100644
--- a/llvm/unittests/IR/ModuleTest.cpp
+++ b/llvm/unittests/IR/ModuleTest.cpp
@@ -159,4 +159,44 @@ TEST(ModuleTest, setPartialSampleProfileRatio) {
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()
+ at 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
More information about the llvm-commits
mailing list