@@ -763,6 +763,10 @@ Error LTO::add(std::unique_ptr<InputFile> Input,
763763 return Error::success ();
764764}
765765
766+ void LTO::setBitcodeLibFuncs (const SmallVector<const char *> &BitcodeLibFuncs) {
767+ this ->BitcodeLibFuncs = &BitcodeLibFuncs;
768+ }
769+
766770Expected<ArrayRef<SymbolResolution>>
767771LTO::addModule (InputFile &Input, ArrayRef<SymbolResolution> InputRes,
768772 unsigned ModI, ArrayRef<SymbolResolution> Res) {
@@ -1387,7 +1391,8 @@ Error LTO::runRegularLTO(AddStreamFn AddStream) {
13871391 if (!RegularLTO.EmptyCombinedModule || Conf.AlwaysEmitRegularLTOObj ) {
13881392 if (Error Err =
13891393 backend (Conf, AddStream, RegularLTO.ParallelCodeGenParallelismLevel ,
1390- *RegularLTO.CombinedModule , ThinLTO.CombinedIndex ))
1394+ *RegularLTO.CombinedModule , ThinLTO.CombinedIndex ,
1395+ *BitcodeLibFuncs))
13911396 return Err;
13921397 }
13931398
@@ -1499,18 +1504,20 @@ class CGThinBackend : public ThinBackendProc {
14991504class InProcessThinBackend : public CGThinBackend {
15001505protected:
15011506 FileCache Cache;
1507+ const SmallVector<const char *> &BitcodeLibFuncs;
15021508
15031509public:
15041510 InProcessThinBackend (
15051511 const Config &Conf, ModuleSummaryIndex &CombinedIndex,
15061512 ThreadPoolStrategy ThinLTOParallelism,
15071513 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
15081514 AddStreamFn AddStream, FileCache Cache, lto::IndexWriteCallback OnWrite,
1509- bool ShouldEmitIndexFiles, bool ShouldEmitImportsFiles)
1515+ bool ShouldEmitIndexFiles, bool ShouldEmitImportsFiles,
1516+ const SmallVector<const char *> &BitcodeLibFuncs)
15101517 : CGThinBackend(Conf, CombinedIndex, ModuleToDefinedGVSummaries,
15111518 AddStream, OnWrite, ShouldEmitIndexFiles,
15121519 ShouldEmitImportsFiles, ThinLTOParallelism),
1513- Cache (std::move(Cache)) {}
1520+ Cache (std::move(Cache)), BitcodeLibFuncs(BitcodeLibFuncs) {}
15141521
15151522 virtual Error runThinLTOBackendThread (
15161523 AddStreamFn AddStream, FileCache Cache, unsigned Task, BitcodeModule BM,
@@ -1531,7 +1538,7 @@ class InProcessThinBackend : public CGThinBackend {
15311538
15321539 return thinBackend (Conf, Task, AddStream, **MOrErr, CombinedIndex,
15331540 ImportList, DefinedGlobals, &ModuleMap,
1534- Conf.CodeGenOnly );
1541+ Conf.CodeGenOnly , BitcodeLibFuncs );
15351542 };
15361543 if (ShouldEmitIndexFiles) {
15371544 if (auto E = emitFiles (ImportList, ModuleID, ModuleID.str ()))
@@ -1616,13 +1623,14 @@ class FirstRoundThinBackend : public InProcessThinBackend {
16161623 const Config &Conf, ModuleSummaryIndex &CombinedIndex,
16171624 ThreadPoolStrategy ThinLTOParallelism,
16181625 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
1619- AddStreamFn CGAddStream, FileCache CGCache, AddStreamFn IRAddStream,
1626+ AddStreamFn CGAddStream, FileCache CGCache,
1627+ const SmallVector<const char *> &BitcodeLibFuncs, AddStreamFn IRAddStream,
16201628 FileCache IRCache)
16211629 : InProcessThinBackend(Conf, CombinedIndex, ThinLTOParallelism,
16221630 ModuleToDefinedGVSummaries, std::move(CGAddStream),
16231631 std::move (CGCache), /* OnWrite=*/ nullptr,
16241632 /* ShouldEmitIndexFiles=*/ false,
1625- /* ShouldEmitImportsFiles=*/ false),
1633+ /* ShouldEmitImportsFiles=*/ false, BitcodeLibFuncs ),
16261634 IRAddStream(std::move(IRAddStream)), IRCache(std::move(IRCache)) {}
16271635
16281636 Error runThinLTOBackendThread (
@@ -1645,7 +1653,7 @@ class FirstRoundThinBackend : public InProcessThinBackend {
16451653
16461654 return thinBackend (Conf, Task, CGAddStream, **MOrErr, CombinedIndex,
16471655 ImportList, DefinedGlobals, &ModuleMap,
1648- Conf.CodeGenOnly , IRAddStream);
1656+ Conf.CodeGenOnly , BitcodeLibFuncs, IRAddStream);
16491657 };
16501658 // Like InProcessThinBackend, we produce index files as needed for
16511659 // FirstRoundThinBackend. However, these files are not generated for
@@ -1712,14 +1720,15 @@ class SecondRoundThinBackend : public InProcessThinBackend {
17121720 ThreadPoolStrategy ThinLTOParallelism,
17131721 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
17141722 AddStreamFn AddStream, FileCache Cache,
1723+ const SmallVector<const char *> &BitcodeLibFuncs,
17151724 std::unique_ptr<SmallVector<StringRef>> IRFiles,
17161725 stable_hash CombinedCGDataHash)
17171726 : InProcessThinBackend(Conf, CombinedIndex, ThinLTOParallelism,
17181727 ModuleToDefinedGVSummaries, std::move(AddStream),
17191728 std::move (Cache),
17201729 /* OnWrite=*/ nullptr,
17211730 /* ShouldEmitIndexFiles=*/ false,
1722- /* ShouldEmitImportsFiles=*/ false),
1731+ /* ShouldEmitImportsFiles=*/ false, BitcodeLibFuncs ),
17231732 IRFiles(std::move(IRFiles)), CombinedCGDataHash(CombinedCGDataHash) {}
17241733
17251734 Error runThinLTOBackendThread (
@@ -1740,7 +1749,7 @@ class SecondRoundThinBackend : public InProcessThinBackend {
17401749
17411750 return thinBackend (Conf, Task, AddStream, *LoadedModule, CombinedIndex,
17421751 ImportList, DefinedGlobals, &ModuleMap,
1743- /* CodeGenOnly=*/ true );
1752+ /* CodeGenOnly=*/ true , BitcodeLibFuncs );
17441753 };
17451754 if (!Cache.isValid () || !CombinedIndex.modulePaths ().count (ModuleID) ||
17461755 all_of (CombinedIndex.getModuleHash (ModuleID),
@@ -1779,11 +1788,12 @@ ThinBackend lto::createInProcessThinBackend(ThreadPoolStrategy Parallelism,
17791788 auto Func =
17801789 [=](const Config &Conf, ModuleSummaryIndex &CombinedIndex,
17811790 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
1782- AddStreamFn AddStream, FileCache Cache) {
1791+ AddStreamFn AddStream, FileCache Cache,
1792+ const SmallVector<const char *> &BitcodeLibFuncs) {
17831793 return std::make_unique<InProcessThinBackend>(
17841794 Conf, CombinedIndex, Parallelism, ModuleToDefinedGVSummaries,
17851795 AddStream, Cache, OnWrite, ShouldEmitIndexFiles,
1786- ShouldEmitImportsFiles);
1796+ ShouldEmitImportsFiles, BitcodeLibFuncs );
17871797 };
17881798 return ThinBackend (Func, Parallelism);
17891799}
@@ -1900,7 +1910,8 @@ ThinBackend lto::createWriteIndexesThinBackend(
19001910 auto Func =
19011911 [=](const Config &Conf, ModuleSummaryIndex &CombinedIndex,
19021912 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
1903- AddStreamFn AddStream, FileCache Cache) {
1913+ AddStreamFn AddStream, FileCache Cache,
1914+ const SmallVector<const char *> &BitcodeLibFuncs) {
19041915 return std::make_unique<WriteIndexesThinBackend>(
19051916 Conf, CombinedIndex, Parallelism, ModuleToDefinedGVSummaries,
19061917 OldPrefix, NewPrefix, NativeObjectPrefix, ShouldEmitImportsFiles,
@@ -2118,7 +2129,7 @@ Error LTO::runThinLTO(AddStreamFn AddStream, FileCache Cache,
21182129 if (!CodeGenDataThinLTOTwoRounds) {
21192130 std::unique_ptr<ThinBackendProc> BackendProc =
21202131 ThinLTO.Backend (Conf, ThinLTO.CombinedIndex , ModuleToDefinedGVSummaries,
2121- AddStream, Cache);
2132+ AddStream, Cache, *BitcodeLibFuncs );
21222133 return RunBackends (BackendProc.get ());
21232134 }
21242135
@@ -2141,7 +2152,7 @@ Error LTO::runThinLTO(AddStreamFn AddStream, FileCache Cache,
21412152 LLVM_DEBUG (dbgs () << " [TwoRounds] Running the first round of codegen\n " );
21422153 auto FirstRoundLTO = std::make_unique<FirstRoundThinBackend>(
21432154 Conf, ThinLTO.CombinedIndex , Parallelism, ModuleToDefinedGVSummaries,
2144- CG.AddStream , CG.Cache , IR.AddStream , IR.Cache );
2155+ CG.AddStream , CG.Cache , *BitcodeLibFuncs, IR.AddStream , IR.Cache );
21452156 if (Error E = RunBackends (FirstRoundLTO.get ()))
21462157 return E;
21472158
@@ -2157,7 +2168,7 @@ Error LTO::runThinLTO(AddStreamFn AddStream, FileCache Cache,
21572168 LLVM_DEBUG (dbgs () << " [TwoRounds] Running the second round of codegen\n " );
21582169 auto SecondRoundLTO = std::make_unique<SecondRoundThinBackend>(
21592170 Conf, ThinLTO.CombinedIndex , Parallelism, ModuleToDefinedGVSummaries,
2160- AddStream, Cache, IR.getResult (), CombinedHash);
2171+ AddStream, Cache, *BitcodeLibFuncs, IR.getResult (), CombinedHash);
21612172 return RunBackends (SecondRoundLTO.get ());
21622173}
21632174
@@ -2635,7 +2646,8 @@ ThinBackend lto::createOutOfProcessThinBackend(
26352646 auto Func =
26362647 [=](const Config &Conf, ModuleSummaryIndex &CombinedIndex,
26372648 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
2638- AddStreamFn AddStream, FileCache Cache) {
2649+ AddStreamFn AddStream, FileCache Cache,
2650+ const SmallVector<const char *> &BitcodeLibFuncs) {
26392651 return std::make_unique<OutOfProcessThinBackend>(
26402652 Conf, CombinedIndex, Parallelism, ModuleToDefinedGVSummaries,
26412653 AddStream, Cache, OnWrite, ShouldEmitIndexFiles,
0 commit comments