diff options
Diffstat (limited to 'clang/lib/Driver/Action.cpp')
-rw-r--r-- | clang/lib/Driver/Action.cpp | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/clang/lib/Driver/Action.cpp b/clang/lib/Driver/Action.cpp index ead3a23da418..44b4715503f0 100644 --- a/clang/lib/Driver/Action.cpp +++ b/clang/lib/Driver/Action.cpp @@ -25,7 +25,6 @@ const char *Action::getClassName(ActionClass AC) { return "offload"; case PreprocessJobClass: return "preprocessor"; case PrecompileJobClass: return "precompiler"; - case HeaderModulePrecompileJobClass: return "header-module-precompiler"; case ExtractAPIJobClass: return "api-extractor"; case AnalyzeJobClass: return "analyzer"; @@ -43,8 +42,6 @@ const char *Action::getClassName(ActionClass AC) { return "clang-offload-bundler"; case OffloadUnbundlingJobClass: return "clang-offload-unbundler"; - case OffloadWrapperJobClass: - return "clang-offload-wrapper"; case OffloadPackagerJobClass: return "clang-offload-packager"; case LinkerWrapperJobClass: @@ -200,7 +197,7 @@ OffloadAction::OffloadAction(const DeviceDependences &DDeps, types::ID Ty) auto &OTCs = DDeps.getToolChains(); // If all inputs agree on the same kind, use it also for this action. - if (llvm::all_of(OKinds, [&](OffloadKind K) { return K == OKinds.front(); })) + if (llvm::all_equal(OKinds)) OffloadingDeviceKind = OKinds.front(); // If we have a single dependency, inherit the architecture from it. @@ -224,13 +221,17 @@ OffloadAction::OffloadAction(const HostDependence &HDep, // Add device inputs and propagate info to the device actions. Do work only if // we have dependencies. - for (unsigned i = 0, e = DDeps.getActions().size(); i != e; ++i) + for (unsigned i = 0, e = DDeps.getActions().size(); i != e; ++i) { if (auto *A = DDeps.getActions()[i]) { getInputs().push_back(A); A->propagateDeviceOffloadInfo(DDeps.getOffloadKinds()[i], DDeps.getBoundArchs()[i], DDeps.getToolChains()[i]); + // If this action is used to forward single dependency, set the toolchain. + if (DDeps.getActions().size() == 1) + OffloadingToolChain = DDeps.getToolChains()[i]; } + } } void OffloadAction::doOnHostDependence(const OffloadActionWorkTy &Work) const { @@ -309,6 +310,19 @@ void OffloadAction::DeviceDependences::add(Action &A, const ToolChain &TC, DeviceOffloadKinds.push_back(OKind); } +void OffloadAction::DeviceDependences::add(Action &A, const ToolChain &TC, + const char *BoundArch, + unsigned OffloadKindMask) { + DeviceActions.push_back(&A); + DeviceToolChains.push_back(&TC); + DeviceBoundArchs.push_back(BoundArch); + + // Add each active offloading kind from a mask. + for (OffloadKind OKind : {OFK_OpenMP, OFK_Cuda, OFK_HIP}) + if (OKind & OffloadKindMask) + DeviceOffloadKinds.push_back(OKind); +} + OffloadAction::HostDependence::HostDependence(Action &A, const ToolChain &TC, const char *BoundArch, const DeviceDependences &DDeps) @@ -341,13 +355,6 @@ PrecompileJobAction::PrecompileJobAction(ActionClass Kind, Action *Input, assert(isa<PrecompileJobAction>((Action*)this) && "invalid action kind"); } -void HeaderModulePrecompileJobAction::anchor() {} - -HeaderModulePrecompileJobAction::HeaderModulePrecompileJobAction( - Action *Input, types::ID OutputType, const char *ModuleName) - : PrecompileJobAction(HeaderModulePrecompileJobClass, Input, OutputType), - ModuleName(ModuleName) {} - void ExtractAPIJobAction::anchor() {} ExtractAPIJobAction::ExtractAPIJobAction(Action *Inputs, types::ID OutputType) @@ -428,12 +435,6 @@ void OffloadUnbundlingJobAction::anchor() {} OffloadUnbundlingJobAction::OffloadUnbundlingJobAction(Action *Input) : JobAction(OffloadUnbundlingJobClass, Input, Input->getType()) {} -void OffloadWrapperJobAction::anchor() {} - -OffloadWrapperJobAction::OffloadWrapperJobAction(ActionList &Inputs, - types::ID Type) - : JobAction(OffloadWrapperJobClass, Inputs, Type) {} - void OffloadPackagerJobAction::anchor() {} OffloadPackagerJobAction::OffloadPackagerJobAction(ActionList &Inputs, |