summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/include/clang/Driver/ToolChain.h7
-rw-r--r--clang/lib/Driver/Compilation.cpp10
-rw-r--r--clang/lib/Driver/ToolChain.cpp8
-rw-r--r--clang/test/Driver/openmp-offload-gpu.c3
4 files changed, 17 insertions, 11 deletions
diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h
index ff089118132..b3a3988e65e 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -249,9 +249,10 @@ public:
///
/// \param DeviceOffloadKind - The device offload kind used for the
/// translation.
- virtual llvm::opt::DerivedArgList *
- TranslateOpenMPTargetArgs(const llvm::opt::DerivedArgList &Args,
- Action::OffloadKind DeviceOffloadKind) const;
+ virtual llvm::opt::DerivedArgList *TranslateOpenMPTargetArgs(
+ const llvm::opt::DerivedArgList &Args,
+ Action::OffloadKind DeviceOffloadKind,
+ SmallVector<llvm::opt::Arg *, 4> &AllocatedArgs) const;
/// Choose a tool to use to handle the action \p JA.
///
diff --git a/clang/lib/Driver/Compilation.cpp b/clang/lib/Driver/Compilation.cpp
index bffcf70df3e..fe2a18131c9 100644
--- a/clang/lib/Driver/Compilation.cpp
+++ b/clang/lib/Driver/Compilation.cpp
@@ -51,9 +51,10 @@ Compilation::getArgsForToolChain(const ToolChain *TC, StringRef BoundArch,
DerivedArgList *&Entry = TCArgs[{TC, BoundArch, DeviceOffloadKind}];
if (!Entry) {
+ SmallVector<Arg *, 4> AllocatedArgs;
// Translate OpenMP toolchain arguments provided via the -Xopenmp-target flags.
- DerivedArgList *OpenMPArgs = TC->TranslateOpenMPTargetArgs(*TranslatedArgs,
- DeviceOffloadKind);
+ DerivedArgList *OpenMPArgs = TC->TranslateOpenMPTargetArgs(
+ *TranslatedArgs, DeviceOffloadKind, AllocatedArgs);
if (!OpenMPArgs) {
Entry = TC->TranslateArgs(*TranslatedArgs, BoundArch, DeviceOffloadKind);
} else {
@@ -63,6 +64,11 @@ Compilation::getArgsForToolChain(const ToolChain *TC, StringRef BoundArch,
if (!Entry)
Entry = TranslatedArgs;
+
+ // Add allocated arguments to the final DAL.
+ for (auto ArgPtr : AllocatedArgs) {
+ Entry->AddSynthesizedArg(ArgPtr);
+ }
}
return *Entry;
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 566d430b1a6..e131ffea5cb 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -800,9 +800,10 @@ ToolChain::computeMSVCVersion(const Driver *D,
return VersionTuple();
}
-llvm::opt::DerivedArgList *
-ToolChain::TranslateOpenMPTargetArgs(const llvm::opt::DerivedArgList &Args,
- Action::OffloadKind DeviceOffloadKind) const {
+llvm::opt::DerivedArgList *ToolChain::TranslateOpenMPTargetArgs(
+ const llvm::opt::DerivedArgList &Args,
+ Action::OffloadKind DeviceOffloadKind,
+ SmallVector<llvm::opt::Arg *, 4> &AllocatedArgs) const {
if (DeviceOffloadKind == Action::OFK_OpenMP) {
DerivedArgList *DAL = new DerivedArgList(Args.getBaseArgs());
const OptTable &Opts = getDriver().getOpts();
@@ -854,6 +855,7 @@ ToolChain::TranslateOpenMPTargetArgs(const llvm::opt::DerivedArgList &Args,
}
XOpenMPTargetArg->setBaseArg(A);
A = XOpenMPTargetArg.release();
+ AllocatedArgs.push_back(A);
DAL->append(A);
NewArgAdded = true;
}
diff --git a/clang/test/Driver/openmp-offload-gpu.c b/clang/test/Driver/openmp-offload-gpu.c
index 8558a36c672..de183b2a392 100644
--- a/clang/test/Driver/openmp-offload-gpu.c
+++ b/clang/test/Driver/openmp-offload-gpu.c
@@ -2,9 +2,6 @@
/// Perform several driver tests for OpenMP offloading
///
-// Until this test is stabilized on all local configurations.
-// UNSUPPORTED: linux
-
// REQUIRES: clang-driver
// REQUIRES: x86-registered-target
// REQUIRES: powerpc-registered-target
OpenPOWER on IntegriCloud