Skip to content

Commit 4e2b5a6

Browse files
committed
[Clang] Make enabling the new driver more generic
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. Reviewed By: yaxunl, tra Differential Revision: https://reviews.llvm.org/D123325
1 parent ca6bbe0 commit 4e2b5a6

File tree

3 files changed

+21
-11
lines changed

3 files changed

+21
-11
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2534,10 +2534,14 @@ defm openmp_optimistic_collapse : BoolFOption<"openmp-optimistic-collapse",
25342534
PosFlag<SetTrue, [CC1Option]>, NegFlag<SetFalse>, BothFlags<[NoArgumentUnused, HelpHidden]>>;
25352535
def static_openmp: Flag<["-"], "static-openmp">,
25362536
HelpText<"Use the static host OpenMP runtime while linking.">;
2537+
def offload_new_driver : Flag<["--"], "offload-new-driver">, Flags<[CC1Option]>, Group<Action_Group>,
2538+
HelpText<"Use the new driver for offloading compilation.">;
2539+
def no_offload_new_driver : Flag<["--"], "no-offload-new-driver">, Flags<[CC1Option]>, Group<Action_Group>,
2540+
HelpText<"Don't Use the new driver for offloading compilation.">;
25372541
def fopenmp_new_driver : Flag<["-"], "fopenmp-new-driver">, Flags<[CC1Option]>, Group<Action_Group>,
25382542
HelpText<"Use the new driver for OpenMP offloading.">;
25392543
def fno_openmp_new_driver : Flag<["-"], "fno-openmp-new-driver">, Flags<[CC1Option]>, Group<Action_Group>,
2540-
HelpText<"Don't use the new driver for OpenMP offloading.">;
2544+
Alias<no_offload_new_driver>, HelpText<"Don't use the new driver for OpenMP offloading.">;
25412545
def fno_optimize_sibling_calls : Flag<["-"], "fno-optimize-sibling-calls">, Group<f_Group>, Flags<[CC1Option]>,
25422546
HelpText<"Disable tail call optimization, keeping the call stack accurate">,
25432547
MarshallingInfoFlag<CodeGenOpts<"DisableTailCalls">>;

clang/lib/Driver/Driver.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3976,17 +3976,19 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
39763976
// Builder to be used to build offloading actions.
39773977
OffloadingActionBuilder OffloadBuilder(C, Args, Inputs);
39783978

3979+
bool UseNewOffloadingDriver =
3980+
(C.isOffloadingHostKind(Action::OFK_OpenMP) &&
3981+
Args.hasFlag(options::OPT_fopenmp_new_driver,
3982+
options::OPT_no_offload_new_driver, true)) ||
3983+
Args.hasFlag(options::OPT_offload_new_driver,
3984+
options::OPT_no_offload_new_driver, false);
3985+
39793986
// Construct the actions to perform.
39803987
HeaderModulePrecompileJobAction *HeaderModuleAction = nullptr;
39813988
ExtractAPIJobAction *ExtractAPIAction = nullptr;
39823989
ActionList LinkerInputs;
39833990
ActionList MergerInputs;
39843991

3985-
bool UseNewOffloadingDriver =
3986-
C.isOffloadingHostKind(Action::OFK_OpenMP) &&
3987-
Args.hasFlag(options::OPT_fopenmp_new_driver,
3988-
options::OPT_fno_openmp_new_driver, true);
3989-
39903992
for (auto &I : Inputs) {
39913993
types::ID InputType = I.first;
39923994
const Arg *InputArg = I.second;
@@ -4114,8 +4116,7 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
41144116
// Check if this Linker Job should emit a static library.
41154117
if (ShouldEmitStaticLibrary(Args)) {
41164118
LA = C.MakeAction<StaticLibJobAction>(LinkerInputs, types::TY_Image);
4117-
} else if (UseNewOffloadingDriver &&
4118-
C.getActiveOffloadKinds() != Action::OFK_None) {
4119+
} else if (UseNewOffloadingDriver) {
41194120
LA = C.MakeAction<LinkerWrapperJobAction>(LinkerInputs, types::TY_Image);
41204121
LA->propagateHostOffloadInfo(C.getActiveOffloadKinds(),
41214122
/*BoundArch=*/nullptr);

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4389,8 +4389,11 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
43894389
bool IsDeviceOffloadAction = !(JA.isDeviceOffloading(Action::OFK_None) ||
43904390
JA.isDeviceOffloading(Action::OFK_Host));
43914391
bool IsHostOffloadingAction =
4392-
JA.isHostOffloading(Action::OFK_OpenMP) &&
4393-
!Args.hasArg(options::OPT_fno_openmp_new_driver);
4392+
(JA.isHostOffloading(Action::OFK_OpenMP) &&
4393+
Args.hasFlag(options::OPT_fopenmp_new_driver,
4394+
options::OPT_no_offload_new_driver, true)) ||
4395+
Args.hasFlag(options::OPT_offload_new_driver,
4396+
options::OPT_no_offload_new_driver, false);
43944397
bool IsUsingLTO = D.isUsingLTO(IsDeviceOffloadAction);
43954398
auto LTOMode = D.getLTOMode(IsDeviceOffloadAction);
43964399

@@ -4686,7 +4689,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
46864689
// Only AMDGPU supports device-side LTO.
46874690
if (IsDeviceOffloadAction &&
46884691
!Args.hasFlag(options::OPT_fopenmp_new_driver,
4689-
options::OPT_fno_openmp_new_driver, true) &&
4692+
options::OPT_no_offload_new_driver, true) &&
4693+
!Args.hasFlag(options::OPT_offload_new_driver,
4694+
options::OPT_no_offload_new_driver, false) &&
46904695
!Triple.isAMDGPU()) {
46914696
D.Diag(diag::err_drv_unsupported_opt_for_target)
46924697
<< Args.getLastArg(options::OPT_foffload_lto,

0 commit comments

Comments
 (0)