Skip to content

Commit afce633

Browse files
committed
[OpenMP] DO NOT MERGE. This fixes --opaque-offload-linker and temporarily sets default to --opaque-offload-linker for testing.
1 parent 28d6079 commit afce633

File tree

3 files changed

+316
-565
lines changed

3 files changed

+316
-565
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3822,10 +3822,17 @@ defm openmp_optimistic_collapse : BoolFOption<"openmp-optimistic-collapse",
38223822
NegFlag<SetFalse>, BothFlags<[NoArgumentUnused, HelpHidden], []>>;
38233823
def static_openmp: Flag<["-"], "static-openmp">,
38243824
HelpText<"Use the static host OpenMP runtime while linking.">;
3825-
def opaque_offload_linker : Flag<["--"], "opaque-offload-linker">, Visibility<[ClangOption, CC1Option]>, Group<f_Group>,
3826-
HelpText<"Build/link omp offload binary, construct opaque cmd list instead of single clang-linker-wrapper cmd.">;
3827-
def no_opaque_offload_linker : Flag<["--"], "no-opaque-offload-linker">, Visibility<[ClangOption, CC1Option]>, Group<f_Group>,
3828-
HelpText<"Build/link omp offload binary, using single clang-linker-wrapper cmd.">;
3825+
def opaque_offload_linker
3826+
: Flag<["--"], "opaque-offload-linker">,
3827+
Visibility<[ClangOption, FlangOption]>,
3828+
Group<f_Group>,
3829+
HelpText<"Build/link omp offload binary, construct opaque cmd list "
3830+
"instead of single clang-linker-wrapper cmd.">;
3831+
def no_opaque_offload_linker : Flag<["--"], "no-opaque-offload-linker">,
3832+
Visibility<[ClangOption, FlangOption]>,
3833+
Group<f_Group>,
3834+
HelpText<"Build/link omp offload binary, using "
3835+
"single clang-linker-wrapper cmd.">;
38293836
def fopenmp_new_driver : Flag<["-"], "fopenmp-new-driver">, Flags<[HelpHidden]>,
38303837
HelpText<"Use the new driver for OpenMP offloading.">;
38313838
def fno_openmp_new_driver : Flag<["-"], "fno-openmp-new-driver">,

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9384,6 +9384,24 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA,
93849384
const InputInfoList &Inputs,
93859385
const ArgList &Args,
93869386
const char *LinkingOutput) const {
9387+
bool isAMDGPU = false;
9388+
auto offloadTC = C.getOffloadToolChains(Action::OFK_OpenMP);
9389+
const auto OpenMPTCs = llvm::make_range(offloadTC.first, offloadTC.second);
9390+
const ToolChain *OTC;
9391+
for (auto &I : OpenMPTCs) {
9392+
OTC = I.second;
9393+
if (OTC->getTriple().isAMDGPU()) {
9394+
isAMDGPU = true;
9395+
break;
9396+
}
9397+
}
9398+
if (isAMDGPU && Args.hasFlag(options::OPT_opaque_offload_linker,
9399+
options::OPT_no_opaque_offload_linker, true)) {
9400+
ConstructOpaqueJob(C, JA, Output, Inputs, Args, OTC->getTriple(),
9401+
LinkingOutput);
9402+
return;
9403+
}
9404+
93879405
using namespace options;
93889406

93899407
// A list of permitted options that will be forwarded to the embedded device

0 commit comments

Comments
 (0)