This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGb64f7d028bdc: [NFC][IR] Make Module::getAliasList() private 
(authored by vporpo).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D143958/new/

https://reviews.llvm.org/D143958

Files:
  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

Index: llvm/unittests/IR/ModuleTest.cpp
===================================================================
--- llvm/unittests/IR/ModuleTest.cpp
+++ llvm/unittests/IR/ModuleTest.cpp
@@ -159,4 +159,44 @@
   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
Index: llvm/lib/Transforms/IPO/GlobalOpt.cpp
===================================================================
--- llvm/lib/Transforms/IPO/GlobalOpt.cpp
+++ llvm/lib/Transforms/IPO/GlobalOpt.cpp
@@ -2360,7 +2360,7 @@
       continue;
 
     // Delete the alias.
-    M.getAliasList().erase(&J);
+    M.eraseAlias(&J);
     ++NumAliasesRemoved;
     Changed = true;
   }
Index: llvm/lib/IR/Globals.cpp
===================================================================
--- llvm/lib/IR/Globals.cpp
+++ llvm/lib/IR/Globals.cpp
@@ -514,7 +514,7 @@
                   AddressSpace) {
   setAliasee(Aliasee);
   if (ParentModule)
-    ParentModule->getAliasList().push_back(this);
+    ParentModule->insertAlias(this);
 }
 
 GlobalAlias *GlobalAlias::create(Type *Ty, unsigned AddressSpace,
@@ -546,11 +546,11 @@
 }
 
 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) {
Index: llvm/lib/AsmParser/LLParser.cpp
===================================================================
--- llvm/lib/AsmParser/LLParser.cpp
+++ llvm/lib/AsmParser/LLParser.cpp
@@ -1141,7 +1141,7 @@
 
   // 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!");
Index: llvm/include/llvm/IR/Module.h
===================================================================
--- llvm/include/llvm/IR/Module.h
+++ llvm/include/llvm/IR/Module.h
@@ -563,6 +563,16 @@
     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 @@
   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.
Index: lldb/source/Expression/IRExecutionUnit.cpp
===================================================================
--- lldb/source/Expression/IRExecutionUnit.cpp
+++ lldb/source/Expression/IRExecutionUnit.cpp
@@ -410,7 +410,7 @@
     RegisterOneValue(global_var);
   }
 
-  for (llvm::GlobalAlias &global_alias : m_module->getAliasList()) {
+  for (llvm::GlobalAlias &global_alias : m_module->getAliases()) {
     RegisterOneValue(global_alias);
   }
 
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to