@@ -762,6 +762,10 @@ Error LTO::add(std::unique_ptr<InputFile> Input,
762762 return Error::success ();
763763}
764764
765+ void LTO::setBitcodeLibFuncs (const SmallVector<const char *> &BitcodeLibFuncs) {
766+ this ->BitcodeLibFuncs = &BitcodeLibFuncs;
767+ }
768+
765769Expected<ArrayRef<SymbolResolution>>
766770LTO::addModule (InputFile &Input, ArrayRef<SymbolResolution> InputRes,
767771 unsigned ModI, ArrayRef<SymbolResolution> Res) {
@@ -1386,7 +1390,8 @@ Error LTO::runRegularLTO(AddStreamFn AddStream) {
13861390 if (!RegularLTO.EmptyCombinedModule || Conf.AlwaysEmitRegularLTOObj ) {
13871391 if (Error Err =
13881392 backend (Conf, AddStream, RegularLTO.ParallelCodeGenParallelismLevel ,
1389- *RegularLTO.CombinedModule , ThinLTO.CombinedIndex ))
1393+ *RegularLTO.CombinedModule , ThinLTO.CombinedIndex ,
1394+ *BitcodeLibFuncs))
13901395 return Err;
13911396 }
13921397
@@ -1498,18 +1503,20 @@ class CGThinBackend : public ThinBackendProc {
14981503class InProcessThinBackend : public CGThinBackend {
14991504protected:
15001505 FileCache Cache;
1506+ const SmallVector<const char *> &BitcodeLibFuncs;
15011507
15021508public:
15031509 InProcessThinBackend (
15041510 const Config &Conf, ModuleSummaryIndex &CombinedIndex,
15051511 ThreadPoolStrategy ThinLTOParallelism,
15061512 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
15071513 AddStreamFn AddStream, FileCache Cache, lto::IndexWriteCallback OnWrite,
1508- bool ShouldEmitIndexFiles, bool ShouldEmitImportsFiles)
1514+ bool ShouldEmitIndexFiles, bool ShouldEmitImportsFiles,
1515+ const SmallVector<const char *> &BitcodeLibFuncs)
15091516 : CGThinBackend(Conf, CombinedIndex, ModuleToDefinedGVSummaries,
15101517 AddStream, OnWrite, ShouldEmitIndexFiles,
15111518 ShouldEmitImportsFiles, ThinLTOParallelism),
1512- Cache (std::move(Cache)) {}
1519+ Cache (std::move(Cache)), BitcodeLibFuncs(BitcodeLibFuncs) {}
15131520
15141521 virtual Error runThinLTOBackendThread (
15151522 AddStreamFn AddStream, FileCache Cache, unsigned Task, BitcodeModule BM,
@@ -1530,7 +1537,7 @@ class InProcessThinBackend : public CGThinBackend {
15301537
15311538 return thinBackend (Conf, Task, AddStream, **MOrErr, CombinedIndex,
15321539 ImportList, DefinedGlobals, &ModuleMap,
1533- Conf.CodeGenOnly );
1540+ Conf.CodeGenOnly , BitcodeLibFuncs );
15341541 };
15351542 if (ShouldEmitIndexFiles) {
15361543 if (auto E = emitFiles (ImportList, ModuleID, ModuleID.str ()))
@@ -1615,13 +1622,14 @@ class FirstRoundThinBackend : public InProcessThinBackend {
16151622 const Config &Conf, ModuleSummaryIndex &CombinedIndex,
16161623 ThreadPoolStrategy ThinLTOParallelism,
16171624 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
1618- AddStreamFn CGAddStream, FileCache CGCache, AddStreamFn IRAddStream,
1625+ AddStreamFn CGAddStream, FileCache CGCache,
1626+ const SmallVector<const char *> &BitcodeLibFuncs, AddStreamFn IRAddStream,
16191627 FileCache IRCache)
16201628 : InProcessThinBackend(Conf, CombinedIndex, ThinLTOParallelism,
16211629 ModuleToDefinedGVSummaries, std::move(CGAddStream),
16221630 std::move (CGCache), /* OnWrite=*/ nullptr,
16231631 /* ShouldEmitIndexFiles=*/ false,
1624- /* ShouldEmitImportsFiles=*/ false),
1632+ /* ShouldEmitImportsFiles=*/ false, BitcodeLibFuncs ),
16251633 IRAddStream(std::move(IRAddStream)), IRCache(std::move(IRCache)) {}
16261634
16271635 Error runThinLTOBackendThread (
@@ -1644,7 +1652,7 @@ class FirstRoundThinBackend : public InProcessThinBackend {
16441652
16451653 return thinBackend (Conf, Task, CGAddStream, **MOrErr, CombinedIndex,
16461654 ImportList, DefinedGlobals, &ModuleMap,
1647- Conf.CodeGenOnly , IRAddStream);
1655+ Conf.CodeGenOnly , BitcodeLibFuncs, IRAddStream);
16481656 };
16491657 // Like InProcessThinBackend, we produce index files as needed for
16501658 // FirstRoundThinBackend. However, these files are not generated for
@@ -1711,14 +1719,15 @@ class SecondRoundThinBackend : public InProcessThinBackend {
17111719 ThreadPoolStrategy ThinLTOParallelism,
17121720 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
17131721 AddStreamFn AddStream, FileCache Cache,
1722+ const SmallVector<const char *> &BitcodeLibFuncs,
17141723 std::unique_ptr<SmallVector<StringRef>> IRFiles,
17151724 stable_hash CombinedCGDataHash)
17161725 : InProcessThinBackend(Conf, CombinedIndex, ThinLTOParallelism,
17171726 ModuleToDefinedGVSummaries, std::move(AddStream),
17181727 std::move (Cache),
17191728 /* OnWrite=*/ nullptr,
17201729 /* ShouldEmitIndexFiles=*/ false,
1721- /* ShouldEmitImportsFiles=*/ false),
1730+ /* ShouldEmitImportsFiles=*/ false, BitcodeLibFuncs ),
17221731 IRFiles(std::move(IRFiles)), CombinedCGDataHash(CombinedCGDataHash) {}
17231732
17241733 Error runThinLTOBackendThread (
@@ -1739,7 +1748,7 @@ class SecondRoundThinBackend : public InProcessThinBackend {
17391748
17401749 return thinBackend (Conf, Task, AddStream, *LoadedModule, CombinedIndex,
17411750 ImportList, DefinedGlobals, &ModuleMap,
1742- /* CodeGenOnly=*/ true );
1751+ /* CodeGenOnly=*/ true , BitcodeLibFuncs );
17431752 };
17441753 if (!Cache.isValid () || !CombinedIndex.modulePaths ().count (ModuleID) ||
17451754 all_of (CombinedIndex.getModuleHash (ModuleID),
@@ -1778,11 +1787,12 @@ ThinBackend lto::createInProcessThinBackend(ThreadPoolStrategy Parallelism,
17781787 auto Func =
17791788 [=](const Config &Conf, ModuleSummaryIndex &CombinedIndex,
17801789 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
1781- AddStreamFn AddStream, FileCache Cache) {
1790+ AddStreamFn AddStream, FileCache Cache,
1791+ const SmallVector<const char *> &BitcodeLibFuncs) {
17821792 return std::make_unique<InProcessThinBackend>(
17831793 Conf, CombinedIndex, Parallelism, ModuleToDefinedGVSummaries,
17841794 AddStream, Cache, OnWrite, ShouldEmitIndexFiles,
1785- ShouldEmitImportsFiles);
1795+ ShouldEmitImportsFiles, BitcodeLibFuncs );
17861796 };
17871797 return ThinBackend (Func, Parallelism);
17881798}
@@ -1899,7 +1909,8 @@ ThinBackend lto::createWriteIndexesThinBackend(
18991909 auto Func =
19001910 [=](const Config &Conf, ModuleSummaryIndex &CombinedIndex,
19011911 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
1902- AddStreamFn AddStream, FileCache Cache) {
1912+ AddStreamFn AddStream, FileCache Cache,
1913+ const SmallVector<const char *> &BitcodeLibFuncs) {
19031914 return std::make_unique<WriteIndexesThinBackend>(
19041915 Conf, CombinedIndex, Parallelism, ModuleToDefinedGVSummaries,
19051916 OldPrefix, NewPrefix, NativeObjectPrefix, ShouldEmitImportsFiles,
@@ -2117,7 +2128,7 @@ Error LTO::runThinLTO(AddStreamFn AddStream, FileCache Cache,
21172128 if (!CodeGenDataThinLTOTwoRounds) {
21182129 std::unique_ptr<ThinBackendProc> BackendProc =
21192130 ThinLTO.Backend (Conf, ThinLTO.CombinedIndex , ModuleToDefinedGVSummaries,
2120- AddStream, Cache);
2131+ AddStream, Cache, *BitcodeLibFuncs );
21212132 return RunBackends (BackendProc.get ());
21222133 }
21232134
@@ -2140,7 +2151,7 @@ Error LTO::runThinLTO(AddStreamFn AddStream, FileCache Cache,
21402151 LLVM_DEBUG (dbgs () << " [TwoRounds] Running the first round of codegen\n " );
21412152 auto FirstRoundLTO = std::make_unique<FirstRoundThinBackend>(
21422153 Conf, ThinLTO.CombinedIndex , Parallelism, ModuleToDefinedGVSummaries,
2143- CG.AddStream , CG.Cache , IR.AddStream , IR.Cache );
2154+ CG.AddStream , CG.Cache , *BitcodeLibFuncs, IR.AddStream , IR.Cache );
21442155 if (Error E = RunBackends (FirstRoundLTO.get ()))
21452156 return E;
21462157
@@ -2156,7 +2167,7 @@ Error LTO::runThinLTO(AddStreamFn AddStream, FileCache Cache,
21562167 LLVM_DEBUG (dbgs () << " [TwoRounds] Running the second round of codegen\n " );
21572168 auto SecondRoundLTO = std::make_unique<SecondRoundThinBackend>(
21582169 Conf, ThinLTO.CombinedIndex , Parallelism, ModuleToDefinedGVSummaries,
2159- AddStream, Cache, IR.getResult (), CombinedHash);
2170+ AddStream, Cache, *BitcodeLibFuncs, IR.getResult (), CombinedHash);
21602171 return RunBackends (SecondRoundLTO.get ());
21612172}
21622173
@@ -2540,7 +2551,8 @@ ThinBackend lto::createOutOfProcessThinBackend(
25402551 auto Func =
25412552 [=](const Config &Conf, ModuleSummaryIndex &CombinedIndex,
25422553 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
2543- AddStreamFn AddStream, FileCache /* Cache*/ ) {
2554+ AddStreamFn AddStream, FileCache /* Cache*/ ,
2555+ const SmallVector<const char *> &BitcodeLibFuncs) {
25442556 return std::make_unique<OutOfProcessThinBackend>(
25452557 Conf, CombinedIndex, Parallelism, ModuleToDefinedGVSummaries,
25462558 AddStream, OnWrite, ShouldEmitIndexFiles, ShouldEmitImportsFiles,
0 commit comments