jhuber6 created this revision. jhuber6 added reviewers: JonChesterfield, jdoerfert, yaxunl, tra. Herald added a project: All. jhuber6 requested review of this revision. Herald added subscribers: cfe-commits, sstefan1, MaskRay. Herald added a project: clang.
In preparation for allowing other offloading kinds to use the new driver a new opt-in flag `-foffload-new-driver` is added. This is distinct from the existing `-fopenmp-new-driver` because OpenMP will soon use the new driver by default while the others should not. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D123325 Files: clang/include/clang/Driver/Compilation.h clang/include/clang/Driver/Options.td clang/lib/Driver/Driver.cpp clang/lib/Driver/ToolChains/Clang.cpp
Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -4395,7 +4395,8 @@ JA.isDeviceOffloading(Action::OFK_Host)); bool IsHostOffloadingAction = JA.isHostOffloading(C.getActiveOffloadKinds()) && - Args.hasArg(options::OPT_fopenmp_new_driver); + (Args.hasArg(options::OPT_fopenmp_new_driver) || + Args.hasArg(options::OPT_foffload_new_driver)); bool IsUsingLTO = D.isUsingLTO(IsDeviceOffloadAction); auto LTOMode = D.getLTOMode(IsDeviceOffloadAction); @@ -4683,7 +4684,8 @@ if (JA.getType() == types::TY_LLVM_BC) CmdArgs.push_back("-emit-llvm-uselists"); - if (IsUsingLTO && !Args.hasArg(options::OPT_fopenmp_new_driver)) { + if (IsUsingLTO && !(Args.hasArg(options::OPT_fopenmp_new_driver) || + !Args.hasArg(options::OPT_foffload_new_driver))) { // Only AMDGPU supports device-side LTO. if (IsDeviceOffloadAction && !Triple.isAMDGPU()) { D.Diag(diag::err_drv_unsupported_opt_for_target) Index: clang/lib/Driver/Driver.cpp =================================================================== --- clang/lib/Driver/Driver.cpp +++ clang/lib/Driver/Driver.cpp @@ -3881,6 +3881,11 @@ // Builder to be used to build offloading actions. OffloadingActionBuilder OffloadBuilder(C, Args, Inputs); + bool UseNewOffloadingDriver = + C.isOffloadingHostKind(C.getActiveOffloadKinds()) && + (Args.hasArg(options::OPT_foffload_new_driver) || + Args.hasArg(options::OPT_fopenmp_new_driver)); + // Construct the actions to perform. HeaderModulePrecompileJobAction *HeaderModuleAction = nullptr; ExtractAPIJobAction *ExtractAPIAction = nullptr; @@ -3902,14 +3907,14 @@ // Use the current host action in any of the offloading actions, if // required. - if (!Args.hasArg(options::OPT_fopenmp_new_driver)) + if (!UseNewOffloadingDriver) if (OffloadBuilder.addHostDependenceToDeviceActions(Current, InputArg)) break; for (phases::ID Phase : PL) { // Add any offload action the host action depends on. - if (!Args.hasArg(options::OPT_fopenmp_new_driver)) + if (!UseNewOffloadingDriver) Current = OffloadBuilder.addDeviceDependencesToHostAction( Current, InputArg, Phase, PL.back(), FullPL); if (!Current) @@ -3952,7 +3957,7 @@ // Try to build the offloading actions and add the result as a dependency // to the host. - if (Args.hasArg(options::OPT_fopenmp_new_driver)) + if (UseNewOffloadingDriver) Current = BuildOffloadingActions(C, Args, I, Current); // FIXME: Should we include any prior module file outputs as inputs of @@ -3974,7 +3979,7 @@ // Use the current host action in any of the offloading actions, if // required. - if (!Args.hasArg(options::OPT_fopenmp_new_driver)) + if (!UseNewOffloadingDriver) if (OffloadBuilder.addHostDependenceToDeviceActions(Current, InputArg)) break; @@ -3987,7 +3992,7 @@ Actions.push_back(Current); // Add any top level actions generated for offloading. - if (!Args.hasArg(options::OPT_fopenmp_new_driver)) + if (!UseNewOffloadingDriver) OffloadBuilder.appendTopLevelActions(Actions, Current, InputArg); else if (Current) Current->propagateHostOffloadInfo(C.getActiveOffloadKinds(), @@ -4003,14 +4008,14 @@ } if (!LinkerInputs.empty()) { - if (!Args.hasArg(options::OPT_fopenmp_new_driver)) + if (!UseNewOffloadingDriver) if (Action *Wrapper = OffloadBuilder.makeHostLinkAction()) LinkerInputs.push_back(Wrapper); Action *LA; // Check if this Linker Job should emit a static library. if (ShouldEmitStaticLibrary(Args)) { LA = C.MakeAction<StaticLibJobAction>(LinkerInputs, types::TY_Image); - } else if (Args.hasArg(options::OPT_fopenmp_new_driver) && + } else if (UseNewOffloadingDriver && C.getActiveOffloadKinds() != Action::OFK_None) { LA = C.MakeAction<LinkerWrapperJobAction>(LinkerInputs, types::TY_Image); LA->propagateHostOffloadInfo(C.getActiveOffloadKinds(), @@ -4018,7 +4023,7 @@ } else { LA = C.MakeAction<LinkJobAction>(LinkerInputs, types::TY_Image); } - if (!Args.hasArg(options::OPT_fopenmp_new_driver)) + if (!UseNewOffloadingDriver) LA = OffloadBuilder.processHostLinkAction(LA); Actions.push_back(LA); } Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -2515,6 +2515,8 @@ HelpText<"Use the static host OpenMP runtime while linking.">; def fopenmp_new_driver : Flag<["-"], "fopenmp-new-driver">, Flags<[CC1Option]>, Group<Action_Group>, HelpText<"Use the new driver for OpenMP offloading.">; +def foffload_new_driver : Flag<["-"], "foffload-new-driver">, Flags<[CC1Option]>, Group<Action_Group>, + HelpText<"Use the new driver for offloading.">; def fno_optimize_sibling_calls : Flag<["-"], "fno-optimize-sibling-calls">, Group<f_Group>; def foptimize_sibling_calls : Flag<["-"], "foptimize-sibling-calls">, Group<f_Group>; defm escaping_block_tail_calls : BoolFOption<"escaping-block-tail-calls", Index: clang/include/clang/Driver/Compilation.h =================================================================== --- clang/include/clang/Driver/Compilation.h +++ clang/include/clang/Driver/Compilation.h @@ -139,7 +139,7 @@ const ToolChain &getDefaultToolChain() const { return DefaultToolChain; } - unsigned isOffloadingHostKind(Action::OffloadKind Kind) const { + unsigned isOffloadingHostKind(unsigned int Kind) const { return ActiveOffloadMask & Kind; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits