================
@@ -519,6 +520,31 @@ void Flang::AddAMDGPUTargetArgs(const ArgList &Args,
TC.addClangTargetOptions(Args, CmdArgs, Action::OffloadKind::OFK_OpenMP);
}
+void Flang::AddNVPTXTargetArgs(const ArgList &Args,
+ ArgStringList &CmdArgs) const {
+
+ // we cannot use addClangTargetOptions, as it appends unsupported args for
+ // flang: -fcuda-is-device, -fno-threadsafe-statics,
+ // -fcuda-allow-variadic-functions and -target-sdk-version Instead we
manually
+ // detect the CUDA installation and link libdevice
+ const ToolChain &TC = getToolChain();
+ const Driver &D = TC.getDriver();
+ const llvm::Triple &Triple = TC.getEffectiveTriple();
+
+ // Detect CUDA installation and link libdevice
+ CudaInstallationDetector CudaInstallation(D, Triple, Args);
+ if (CudaInstallation.isValid()) {
+ StringRef GpuArch = Args.getLastArgValue(options::OPT_march_EQ);
+ if (!GpuArch.empty()) {
+ std::string LibDeviceFile = CudaInstallation.getLibDeviceFile(GpuArch);
+ if (!LibDeviceFile.empty()) {
+ CmdArgs.push_back("-mlink-builtin-bitcode");
+ CmdArgs.push_back(Args.MakeArgString(LibDeviceFile));
+ }
+ }
+ }
+}
+
----------------
Jason-Van-Beusekom wrote:
No, if I replace this with:
```c++
void Flang::AddNVPTXTargetArgs(const ArgList &Args,
ArgStringList &CmdArgs) const {
const ToolChain &TC = getToolChain();
TC.addClangTargetOptions(Args, CmdArgs, Action::OffloadKind::OFK_OpenMP);
}
```
You get:
```bash
flang -fopenmp -fopenmp-targets=nvptx64 test.f90
error: unknown argument: '-fcuda-is-device'
error: unknown argument: '-fno-threadsafe-statics'
error: unknown argument: '-target-sdk-version=12.9'
```
And in Cuda.cpp:
```c++
void CudaToolChain::addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args,
Action::OffloadKind DeviceOffloadingKind) const {
HostTC.addClangTargetOptions(DriverArgs, CC1Args, DeviceOffloadingKind);
StringRef GpuArch = DriverArgs.getLastArgValue(options::OPT_march_EQ);
assert((DeviceOffloadingKind == Action::OFK_OpenMP ||
DeviceOffloadingKind == Action::OFK_Cuda) &&
"Only OpenMP or CUDA offloading kinds are supported for NVIDIA GPUs.");
CC1Args.append({"-fcuda-is-device", "-mllvm",
"-enable-memcpyopt-without-libcalls",
"-fno-threadsafe-statics"});
...
```
https://github.com/llvm/llvm-project/pull/180060
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits