[Lldb-commits] [lldb] b64f7d0 - [NFC][IR] Make Module::getAliasList() private

Vasileios Porpodas via lldb-commits lldb-commits at lists.llvm.org
Mon Feb 13 19:05:43 PST 2023


Author: Vasileios Porpodas
Date: 2023-02-13T18:45:12-08:00
New Revision: b64f7d028bdcaf679130afeed9518c09663f6dc8

URL: https://github.com/llvm/llvm-project/commit/b64f7d028bdcaf679130afeed9518c09663f6dc8
DIFF: https://github.com/llvm/llvm-project/commit/b64f7d028bdcaf679130afeed9518c09663f6dc8.diff

LOG: [NFC][IR] Make Module::getAliasList() private

This patch adds several missing AliasList modifier functions, like
removeAlias(), eraseAlias() and insertAlias().
There is no longer need to access the list directly so it also makes
getAliaList() private.

Differential Revision: https://reviews.llvm.org/D143958

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..1a7373d0cbb8a 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->getAliases()) {
     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 lldb-commits mailing list