@@ -63,20 +63,22 @@ buildESIMDLoweringPipeline(const sycl::ESIMDProcessingOptions &Options) {
6363 return MPM;
6464}
6565
66- Expected<ModuleDesc> linkModules (ModuleDesc MD1, ModuleDesc MD2) {
66+ Expected<std::unique_ptr<ModuleDesc>>
67+ linkModules (std::unique_ptr<ModuleDesc> MD1, std::unique_ptr<ModuleDesc> MD2) {
6768 std::vector<std::string> Names;
68- MD1. saveEntryPointNames (Names);
69- MD2. saveEntryPointNames (Names);
69+ MD1-> saveEntryPointNames (Names);
70+ MD2-> saveEntryPointNames (Names);
7071 bool LinkError =
71- llvm::Linker::linkModules (MD1. getModule (), MD2. releaseModulePtr ());
72+ llvm::Linker::linkModules (MD1-> getModule (), MD2-> releaseModulePtr ());
7273
7374 if (LinkError)
7475 return createStringError (
75- formatv (" link failed. Module names: {0}, {1}" , MD1. Name , MD2. Name ));
76+ formatv (" link failed. Module names: {0}, {1}" , MD1-> Name , MD2-> Name ));
7677
77- ModuleDesc Res (MD1.releaseModulePtr (), std::move (Names));
78- Res.assignMergedProperties (MD1, MD2);
79- Res.Name = (Twine (" linked[" ) + MD1.Name + " ," + MD2.Name + " ]" ).str ();
78+ auto Res =
79+ std::make_unique<ModuleDesc>(MD1->releaseModulePtr (), std::move (Names));
80+ Res->assignMergedProperties (*MD1, *MD2);
81+ Res->Name = (Twine (" linked[" ) + MD1->Name + " ," + MD2->Name + " ]" ).str ();
8082 return std::move (Res);
8183}
8284
@@ -110,11 +112,11 @@ bool sycl::lowerESIMDConstructs(ModuleDesc &MD,
110112 return !Res.areAllPreserved ();
111113}
112114
113- Expected<SmallVector<ModuleDesc, 2 >>
114- llvm::sycl::handleESIMD (ModuleDesc MDesc,
115+ Expected<SmallVector<std::unique_ptr< ModuleDesc> , 2 >>
116+ llvm::sycl::handleESIMD (std::unique_ptr< ModuleDesc> MDesc,
115117 const sycl::ESIMDProcessingOptions &Options,
116118 bool &Modified, bool &SplitOccurred) {
117- SmallVector<ModuleDesc, 2 > Result =
119+ SmallVector<std::unique_ptr< ModuleDesc> , 2 > Result =
118120 splitByESIMD (std::move (MDesc), Options.EmitOnlyKernelsAsEntryPoints ,
119121 Options.AllowDeviceImageDependencies );
120122
@@ -123,32 +125,32 @@ llvm::sycl::handleESIMD(ModuleDesc MDesc,
123125
124126 SplitOccurred |= Result.size () > 1 ;
125127
126- for (ModuleDesc &MD : Result)
127- if (Options.LowerESIMD && MD. isESIMD ())
128- Modified |= lowerESIMDConstructs (MD, Options);
128+ for (std::unique_ptr< ModuleDesc> &MD : Result)
129+ if (Options.LowerESIMD && MD-> isESIMD ())
130+ Modified |= lowerESIMDConstructs (* MD, Options);
129131
130132 if (Options.SplitESIMD || Result.size () == 1 )
131133 return std::move (Result);
132134
133135 // SYCL/ESIMD splitting is not requested, link back into single module.
134- int ESIMDInd = Result[0 ]. isESIMD () ? 0 : 1 ;
136+ int ESIMDInd = Result[0 ]-> isESIMD () ? 0 : 1 ;
135137 int SYCLInd = 1 - ESIMDInd;
136- assert (Result[SYCLInd]. isSYCL () &&
137- " Result[SYCLInd]. isSYCL() expected to be true." );
138+ assert (Result[SYCLInd]-> isSYCL () &&
139+ " Result[SYCLInd]-> isSYCL() expected to be true." );
138140
139141 // Make sure that no link conflicts occur.
140- Result[ESIMDInd]. renameDuplicatesOf (Result[SYCLInd]. getModule (), " .esimd" );
142+ Result[ESIMDInd]-> renameDuplicatesOf (Result[SYCLInd]-> getModule (), " .esimd" );
141143 auto LinkedOrErr = linkModules (std::move (Result[0 ]), std::move (Result[1 ]));
142144 if (!LinkedOrErr)
143145 return LinkedOrErr.takeError ();
144146
145- ModuleDesc &Linked = *LinkedOrErr;
146- Linked. restoreLinkageOfDirectInvokeSimdTargets ();
147+ std::unique_ptr< ModuleDesc> &Linked = *LinkedOrErr;
148+ Linked-> restoreLinkageOfDirectInvokeSimdTargets ();
147149 std::vector<std::string> Names;
148- Linked. saveEntryPointNames (Names);
150+ Linked-> saveEntryPointNames (Names);
149151 // Cleanup may remove some entry points, need to save/rebuild.
150- Linked. cleanup (Options.AllowDeviceImageDependencies );
151- Linked. rebuildEntryPoints (Names);
152+ Linked-> cleanup (Options.AllowDeviceImageDependencies );
153+ Linked-> rebuildEntryPoints (Names);
152154 Result.clear ();
153155 Result.emplace_back (std::move (Linked));
154156 Modified = true ;
0 commit comments