COFF: Simplify Writer::createImportTables.

A short import library has up to two symbols, so we don't have
to do a for-loop and type dispatch in createImportTables.

llvm-svn: 245200
diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp
index 538b6bb..871c40c 100644
--- a/lld/COFF/InputFiles.cpp
+++ b/lld/COFF/InputFiles.cpp
@@ -298,16 +298,16 @@
     ExtName = ExtName.substr(0, ExtName.find('@'));
     break;
   }
-  auto *ImpSym = new (Alloc) DefinedImportData(DLLName, ImpName, ExtName, Hdr);
+  ImpSym = new (Alloc) DefinedImportData(DLLName, ImpName, ExtName, Hdr);
   SymbolBodies.push_back(ImpSym);
 
   // If type is function, we need to create a thunk which jump to an
   // address pointed by the __imp_ symbol. (This allows you to call
   // DLL functions just like regular non-DLL functions.)
-  if (Hdr->getType() == llvm::COFF::IMPORT_CODE) {
-    auto *B = new (Alloc) DefinedImportThunk(Name, ImpSym, Hdr->Machine);
-    SymbolBodies.push_back(B);
-  }
+  if (Hdr->getType() != llvm::COFF::IMPORT_CODE)
+    return;
+  ThunkSym = new (Alloc) DefinedImportThunk(Name, ImpSym, Hdr->Machine);
+  SymbolBodies.push_back(ThunkSym);
 }
 
 void BitcodeFile::parse() {
diff --git a/lld/COFF/InputFiles.h b/lld/COFF/InputFiles.h
index d93b2b6..e2e80f1 100644
--- a/lld/COFF/InputFiles.h
+++ b/lld/COFF/InputFiles.h
@@ -33,6 +33,8 @@
 
 class Chunk;
 class Defined;
+class DefinedImportData;
+class DefinedImportThunk;
 class Lazy;
 class SymbolBody;
 class Undefined;
@@ -182,6 +184,9 @@
   static bool classof(const InputFile *F) { return F->kind() == ImportKind; }
   std::vector<SymbolBody *> &getSymbols() override { return SymbolBodies; }
 
+  DefinedImportData *ImpSym = nullptr;
+  DefinedImportThunk *ThunkSym = nullptr;
+
 private:
   void parse() override;
 
diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp
index 87a74f4..deceb60 100644
--- a/lld/COFF/Writer.cpp
+++ b/lld/COFF/Writer.cpp
@@ -367,19 +367,13 @@
     return;
   OutputSection *Text = createSection(".text");
   for (ImportFile *File : Symtab->ImportFiles) {
-    for (SymbolBody *B : File->getSymbols()) {
-      auto *Import = dyn_cast<DefinedImportData>(B);
-      if (!Import) {
-        // Linker-created function thunks for DLL symbols are added to
-        // .text section.
-        Text->addChunk(cast<DefinedImportThunk>(B)->getChunk());
-        continue;
-      }
-      if (Config->DelayLoads.count(Import->getDLLName().lower())) {
-        DelayIdata.add(Import);
-      } else {
-        Idata.add(Import);
-      }
+    if (DefinedImportThunk *Thunk = File->ThunkSym)
+      Text->addChunk(Thunk->getChunk());
+    DefinedImportData *Imp = File->ImpSym;
+    if (Config->DelayLoads.count(Imp->getDLLName().lower())) {
+      DelayIdata.add(Imp);
+    } else {
+      Idata.add(Imp);
     }
   }
   if (!Idata.empty()) {