@@ -5166,19 +5166,6 @@ class OffloadingActionBuilder final {
5166
5166
: DeviceActionBuilder(C, Args, Inputs, Action::OFK_SYCL, OAB),
5167
5167
SYCLInstallation (C.getDriver()) {}
5168
5168
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
-
5182
5169
void pushForeignAction (Action *A) override {
5183
5170
// Accept a foreign action from the CudaActionBuilder for compiling CUDA
5184
5171
// sources
@@ -5461,10 +5448,13 @@ class OffloadingActionBuilder final {
5461
5448
return ;
5462
5449
5463
5450
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
+
5468
5458
AL.push_back (C.MakeAction <OffloadAction>(Dep, SYCLLinkBinary->getType ()));
5469
5459
SYCLLinkBinary = nullptr ;
5470
5460
}
@@ -5908,9 +5898,7 @@ class OffloadingActionBuilder final {
5908
5898
}
5909
5899
if (SkipWrapper) {
5910
5900
// Wrapper step not requested.
5911
- withBoundArchForToolChain (TC, [&](const char *BoundArch) {
5912
- addDeps (WrapperInputs.front (), TC, BoundArch);
5913
- });
5901
+ addDeps (WrapperInputs.front (), TC, BoundArch);
5914
5902
continue ;
5915
5903
}
5916
5904
@@ -5924,9 +5912,7 @@ class OffloadingActionBuilder final {
5924
5912
BoundArch != nullptr );
5925
5913
addDeps (DeviceWrappingAction, TC, AddBA ? BoundArch : nullptr );
5926
5914
} else {
5927
- withBoundArchForToolChain (TC, [&](const char *BoundArch) {
5928
- addDeps (DeviceWrappingAction, TC, BoundArch);
5929
- });
5915
+ addDeps (DeviceWrappingAction, TC, BoundArch);
5930
5916
}
5931
5917
}
5932
5918
}
@@ -6447,14 +6433,20 @@ class OffloadingActionBuilder final {
6447
6433
SYCLTargetInfoList.emplace_back (*TCIt, nullptr );
6448
6434
} else {
6449
6435
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);
6454
6448
}
6455
6449
}
6456
- assert (OffloadArch && " Failed to find matching arch." );
6457
- SYCLTargetInfoList.emplace_back (*TCIt, OffloadArch);
6458
6450
}
6459
6451
}
6460
6452
}
0 commit comments