@@ -5166,19 +5166,6 @@ class OffloadingActionBuilder final {
51665166 : DeviceActionBuilder(C, Args, Inputs, Action::OFK_SYCL, OAB),
51675167 SYCLInstallation (C.getDriver()) {}
51685168
5169- void withBoundArchForToolChain (const ToolChain *TC,
5170- llvm::function_ref<void (const char *)> Op) {
5171- for (auto &A : GpuArchList) {
5172- if (TC->getTriple () == A.first ) {
5173- Op (A.second ? Args.MakeArgString (A.second ) : nullptr );
5174- return ;
5175- }
5176- }
5177-
5178- // no bound arch for this toolchain
5179- Op (nullptr );
5180- }
5181-
51825169 void pushForeignAction (Action *A) override {
51835170 // Accept a foreign action from the CudaActionBuilder for compiling CUDA
51845171 // sources
@@ -5461,10 +5448,13 @@ class OffloadingActionBuilder final {
54615448 return ;
54625449
54635450 OffloadAction::DeviceDependences Dep;
5464- withBoundArchForToolChain (ToolChains.front (), [&](const char *BoundArch) {
5465- Dep.add (*SYCLLinkBinary, *ToolChains.front (), BoundArch,
5466- Action::OFK_SYCL);
5467- });
5451+ for (auto &TripleAndArchPair : GpuArchList) {
5452+ if (ToolChains.front ()->getTriple () == TripleAndArchPair.first ) {
5453+ Dep.add (*SYCLLinkBinary, *ToolChains.front (),
5454+ TripleAndArchPair.second , Action::OFK_SYCL);
5455+ }
5456+ }
5457+
54685458 AL.push_back (C.MakeAction <OffloadAction>(Dep, SYCLLinkBinary->getType ()));
54695459 SYCLLinkBinary = nullptr ;
54705460 }
@@ -5908,9 +5898,7 @@ class OffloadingActionBuilder final {
59085898 }
59095899 if (SkipWrapper) {
59105900 // Wrapper step not requested.
5911- withBoundArchForToolChain (TC, [&](const char *BoundArch) {
5912- addDeps (WrapperInputs.front (), TC, BoundArch);
5913- });
5901+ addDeps (WrapperInputs.front (), TC, BoundArch);
59145902 continue ;
59155903 }
59165904
@@ -5924,9 +5912,7 @@ class OffloadingActionBuilder final {
59245912 BoundArch != nullptr );
59255913 addDeps (DeviceWrappingAction, TC, AddBA ? BoundArch : nullptr );
59265914 } else {
5927- withBoundArchForToolChain (TC, [&](const char *BoundArch) {
5928- addDeps (DeviceWrappingAction, TC, BoundArch);
5929- });
5915+ addDeps (DeviceWrappingAction, TC, BoundArch);
59305916 }
59315917 }
59325918 }
@@ -6447,14 +6433,20 @@ class OffloadingActionBuilder final {
64476433 SYCLTargetInfoList.emplace_back (*TCIt, nullptr );
64486434 } else {
64496435 const char *OffloadArch = nullptr ;
6450- for (auto &A : GpuArchList) {
6451- if (TT == A.first ) {
6452- OffloadArch = A.second ;
6453- break ;
6436+ for (auto &TargetTripleArchPair : GpuArchList) {
6437+ if (TT == TargetTripleArchPair.first ) {
6438+ OffloadArch = TargetTripleArchPair.second ;
6439+ // Add an arch to the SYCLTargetInfoList
6440+ // only if it is not already present in the list.
6441+ auto Arch = llvm::find_if (
6442+ SYCLTargetInfoList, [&](auto &DeviceTargetInfo) {
6443+ return OffloadArch == DeviceTargetInfo.BoundArch ;
6444+ });
6445+
6446+ if (Arch == SYCLTargetInfoList.end ())
6447+ SYCLTargetInfoList.emplace_back (*TCIt, OffloadArch);
64546448 }
64556449 }
6456- assert (OffloadArch && " Failed to find matching arch." );
6457- SYCLTargetInfoList.emplace_back (*TCIt, OffloadArch);
64586450 }
64596451 }
64606452 }
0 commit comments