Browse Source

CUDA: Avoid unnecessary allocation and GetLinkLanguage()

There's no reason to allocate the cmNinjaLinkLineDeviceComputer on the heap.
We can also assume the link language as CUDA in cmLocalGenerator::GetDeviceLinkFlags().
Raul Tambre 4 years ago
parent
commit
cf7e68087d
3 changed files with 12 additions and 16 deletions
  1. 3 5
      Source/cmLocalGenerator.cxx
  2. 1 1
      Source/cmLocalGenerator.h
  3. 8 10
      Source/cmNinjaNormalTargetGenerator.cxx

+ 3 - 5
Source/cmLocalGenerator.cxx

@@ -1410,25 +1410,23 @@ std::vector<BT<std::string>> cmLocalGenerator::GetStaticLibraryFlags(
 }
 
 void cmLocalGenerator::GetDeviceLinkFlags(
-  cmLinkLineComputer* linkLineComputer, const std::string& config,
+  cmLinkLineComputer& linkLineComputer, const std::string& config,
   std::string& linkLibs, std::string& linkFlags, std::string& frameworkPath,
   std::string& linkPath, cmGeneratorTarget* target)
 {
   cmGeneratorTarget::DeviceLinkSetter setter(*target);
 
   cmComputeLinkInformation* pcli = target->GetLinkInformation(config);
-  const std::string linkLanguage =
-    linkLineComputer->GetLinkerLanguage(target, config);
 
   if (pcli) {
     // Compute the required device link libraries when
     // resolving gpu lang device symbols
-    this->OutputLinkLibraries(pcli, linkLineComputer, linkLibs, frameworkPath,
+    this->OutputLinkLibraries(pcli, &linkLineComputer, linkLibs, frameworkPath,
                               linkPath);
   }
 
   std::vector<std::string> linkOpts;
-  target->GetLinkOptions(linkOpts, config, linkLanguage);
+  target->GetLinkOptions(linkOpts, config, "CUDA");
   // LINK_OPTIONS are escaped.
   this->AppendCompileOptions(linkFlags, linkOpts);
 }

+ 1 - 1
Source/cmLocalGenerator.h

@@ -496,7 +496,7 @@ public:
 
   /** Fill out these strings for the given target.  Libraries to link,
    *  flags, and linkflags. */
-  void GetDeviceLinkFlags(cmLinkLineComputer* linkLineComputer,
+  void GetDeviceLinkFlags(cmLinkLineComputer& linkLineComputer,
                           const std::string& config, std::string& linkLibs,
                           std::string& linkFlags, std::string& frameworkPath,
                           std::string& linkPath, cmGeneratorTarget* target);

+ 8 - 10
Source/cmNinjaNormalTargetGenerator.cxx

@@ -855,16 +855,14 @@ void cmNinjaNormalTargetGenerator::WriteNvidiaDeviceLinkStatement(
   vars["TARGET_FILE"] =
     localGen.ConvertToOutputFormat(output, cmOutputConverter::SHELL);
 
-  std::unique_ptr<cmLinkLineComputer> linkLineComputer(
-    new cmNinjaLinkLineDeviceComputer(
-      this->GetLocalGenerator(),
-      this->GetLocalGenerator()->GetStateSnapshot().GetDirectory(),
-      globalGen));
-  linkLineComputer->SetUseNinjaMulti(globalGen->IsMultiConfig());
-
-  localGen.GetDeviceLinkFlags(linkLineComputer.get(), config,
-                              vars["LINK_LIBRARIES"], vars["LINK_FLAGS"],
-                              frameworkPath, linkPath, genTarget);
+  cmNinjaLinkLineDeviceComputer linkLineComputer(
+    this->GetLocalGenerator(),
+    this->GetLocalGenerator()->GetStateSnapshot().GetDirectory(), globalGen);
+  linkLineComputer.SetUseNinjaMulti(globalGen->IsMultiConfig());
+
+  localGen.GetDeviceLinkFlags(linkLineComputer, config, vars["LINK_LIBRARIES"],
+                              vars["LINK_FLAGS"], frameworkPath, linkPath,
+                              genTarget);
 
   this->addPoolNinjaVariable("JOB_POOL_LINK", genTarget, vars);