Revert "[IRMover] Implement name based structure type mapping"

This reverts commit r325686.

There was a misunderstanding and this has not been approved yet.

llvm-svn: 325715
diff --git a/llvm/include/llvm/Linker/IRMover.h b/llvm/include/llvm/Linker/IRMover.h
index 7b483cb..235ada4 100644
--- a/llvm/include/llvm/Linker/IRMover.h
+++ b/llvm/include/llvm/Linker/IRMover.h
@@ -49,23 +49,17 @@
     // The set of opaque types is the composite module.
     DenseSet<StructType *> OpaqueStructTypes;
 
-    // The set of identified but non opaque structures in the composite module.

-    DenseSet<StructType *, StructTypeKeyInfo> NonOpaqueStructTypes;

-

-    // Map between structure type name and instance. Used in findNonOpaque

-    // to correctly map imported global variable type during ThinLTO import

-    // phase.

-    DenseMap<StringRef, StructType *> NonOpaqueStructNameMap;

-

-  public:

-    void addNonOpaque(StructType *Ty);

-    void switchToNonOpaque(StructType *Ty);

-    void addOpaque(StructType *Ty);

-    StructType *findNonOpaque(ArrayRef<Type *> ETypes, bool IsPacked,

-                              StringRef Name);

-    bool hasType(StructType *Ty);

-  };

-

+    // The set of identified but non opaque structures in the composite module.
+    DenseSet<StructType *, StructTypeKeyInfo> NonOpaqueStructTypes;
+
+  public:
+    void addNonOpaque(StructType *Ty);
+    void switchToNonOpaque(StructType *Ty);
+    void addOpaque(StructType *Ty);
+    StructType *findNonOpaque(ArrayRef<Type *> ETypes, bool IsPacked);
+    bool hasType(StructType *Ty);
+  };
+
   IRMover(Module &M);
 
   typedef std::function<void(GlobalValue &)> ValueAdder;
diff --git a/llvm/lib/Linker/IRMover.cpp b/llvm/lib/Linker/IRMover.cpp
index 03539f3..42081442 100644
--- a/llvm/lib/Linker/IRMover.cpp
+++ b/llvm/lib/Linker/IRMover.cpp
@@ -318,8 +318,8 @@
       return *Entry = Ty;
     }
 
-    if (StructType *OldT = DstStructTypesSet.findNonOpaque(
-            ElementTypes, IsPacked, STy->getName())) {
+    if (StructType *OldT =
+            DstStructTypesSet.findNonOpaque(ElementTypes, IsPacked)) {
       STy->setName("");
       return *Entry = OldT;
     }
@@ -906,6 +906,7 @@
 Expected<Constant *> IRLinker::linkGlobalValueProto(GlobalValue *SGV,
                                                     bool ForAlias) {
   GlobalValue *DGV = getLinkedToGlobal(SGV);
+
   bool ShouldLink = shouldLink(DGV, *SGV);
 
   // just missing from map
@@ -1409,14 +1410,12 @@
 
 void IRMover::IdentifiedStructTypeSet::addNonOpaque(StructType *Ty) {
   assert(!Ty->isOpaque());
-  if (Ty->hasName())
-    NonOpaqueStructNameMap.insert({getTypeNamePrefix(Ty->getName()), Ty});
-
   NonOpaqueStructTypes.insert(Ty);
 }
 
 void IRMover::IdentifiedStructTypeSet::switchToNonOpaque(StructType *Ty) {
-  addNonOpaque(Ty);
+  assert(!Ty->isOpaque());
+  NonOpaqueStructTypes.insert(Ty);
   bool Removed = OpaqueStructTypes.erase(Ty);
   (void)Removed;
   assert(Removed);
@@ -1429,16 +1428,10 @@
 
 StructType *
 IRMover::IdentifiedStructTypeSet::findNonOpaque(ArrayRef<Type *> ETypes,
-                                                bool IsPacked, StringRef Name) {
+                                                bool IsPacked) {
   IRMover::StructTypeKeyInfo::KeyTy Key(ETypes, IsPacked);
   auto I = NonOpaqueStructTypes.find_as(Key);
-  if (I == NonOpaqueStructTypes.end())
-    return nullptr;
-  auto NI = NonOpaqueStructNameMap.find(getTypeNamePrefix(Name));
-  if (NI != NonOpaqueStructNameMap.end() &&
-      IRMover::StructTypeKeyInfo::KeyTy((*NI).second) == Key)
-    return (*NI).second;
-  return *I;
+  return I == NonOpaqueStructTypes.end() ? nullptr : *I;
 }
 
 bool IRMover::IdentifiedStructTypeSet::hasType(StructType *Ty) {
diff --git a/llvm/test/Linker/Inputs/struct-mapping.ll b/llvm/test/Linker/Inputs/struct-mapping.ll
deleted file mode 100644
index d4fa073..0000000
--- a/llvm/test/Linker/Inputs/struct-mapping.ll
+++ /dev/null
@@ -1,4 +0,0 @@
-%struct.Baz = type { i64, i64, %struct.Foo }

-%struct.Foo = type { i64, i64 }

-

-@baz = global %struct.Baz zeroinitializer

diff --git a/llvm/test/Linker/struct-mapping.ll b/llvm/test/Linker/struct-mapping.ll
deleted file mode 100644
index 732ef8c..0000000
--- a/llvm/test/Linker/struct-mapping.ll
+++ /dev/null
@@ -1,12 +0,0 @@
-; RUN: llvm-link --initial-module=%s %p/Inputs/struct-mapping.ll -S -o - | FileCheck %s

-

-; Here we check that new type mapping algorithm correctly mapped type of internal

-; member of struct.Baz to struct.Foo. Without it we'd map that type to struct.Bar, because

-; it is recursively isomorphic to struct.Foo and is defined first in source file.

-; CHECK: %struct.Baz = type { i64, i64, %struct.Foo }

-

-%struct.Bar = type { i64, i64 }

-%struct.Foo = type { i64, i64 }

-

-@bar = global %struct.Bar zeroinitializer

-@foo = global %struct.Foo zeroinitializer

diff --git a/llvm/tools/llvm-link/llvm-link.cpp b/llvm/tools/llvm-link/llvm-link.cpp
index 8d29caf..1ada60e 100644
--- a/llvm/tools/llvm-link/llvm-link.cpp
+++ b/llvm/tools/llvm-link/llvm-link.cpp
@@ -70,11 +70,6 @@
 OutputFilename("o", cl::desc("Override output filename"), cl::init("-"),
                cl::value_desc("filename"));
 
-static cl::opt<std::string>
-    InitialModule("initial-module",
-                  cl::desc("Link to existing destination module"), cl::init(""),
-                  cl::value_desc("filename"));
-
 static cl::opt<bool>
 Internalize("internalize", cl::desc("Internalize linked symbols"));
 
@@ -365,9 +360,7 @@
   if (!DisableDITypeMap)
     Context.enableDebugTypeODRUniquing();
 
-  auto Composite = InitialModule.empty()
-                       ? make_unique<Module>("llvm-link", Context)
-                       : loadFile(argv[0], InitialModule, Context);
+  auto Composite = make_unique<Module>("llvm-link", Context);
   Linker L(*Composite);
 
   unsigned Flags = Linker::Flags::None;