[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
https://github.com/DominikAdamski closed https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -345,7 +345,13 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , // Check ROCm path if specified const ToolChain = getToolChain(); - TC.getDeviceLibs(Args); + std::string HIPVersion; + llvm::raw_string_ostream HIPInfo(HIPVersion); + TC.printVerboseInfo(HIPInfo); + llvm::StringRef HIPInfoStrRef(HIPInfo.str()); + if (!HIPInfoStrRef.contains("Found HIP installation") && DominikAdamski wrote: No, we do not use them in Flang https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -201,3 +201,16 @@ ! RUN: -nogpulibc %s 2>&1 \ ! RUN: | FileCheck --check-prefix=NO-LIBC-GPU-AMDGPU %s ! NO-LIBC-GPU-AMDGPU-NOT: "-lcgpu-amdgpu" + +! RUN: rm -rf %t/Inputs +! RUN: mkdir -p %t/Inputs +! RUN: cp -r %S/../../../clang/test/Driver/Inputs/rocm %t/Inputs DominikAdamski wrote: Done https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
https://github.com/jhuber6 approved this pull request. https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
https://github.com/DominikAdamski updated https://github.com/llvm/llvm-project/pull/88190 >From 44def17f36e8e27eb4232681e5ae7eff5de6d90f Mon Sep 17 00:00:00 2001 From: Dominik Adamski Date: Tue, 9 Apr 2024 14:35:26 -0500 Subject: [PATCH 1/5] [Flang][AMDGPU] Add rocm-path flag ROCm installation path is used for finding and automatically linking required bitcode libraries. --- clang/include/clang/Driver/Options.td| 3 ++- clang/lib/Driver/ToolChains/Flang.cpp| 4 flang/test/Driver/driver-help-hidden.f90 | 1 + flang/test/Driver/driver-help.f90| 1 + flang/test/Driver/omp-driver-offload.f90 | 21 + 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index f745e573eb2686..651aa10150c06e 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1341,7 +1341,8 @@ def hip_link : Flag<["--"], "hip-link">, Group, HelpText<"Link clang-offload-bundler bundles for HIP">; def no_hip_rt: Flag<["-"], "no-hip-rt">, Group, HelpText<"Do not link against HIP runtime libraries">; -def rocm_path_EQ : Joined<["--"], "rocm-path=">, Group, +def rocm_path_EQ : Joined<["--"], "rocm-path=">, + Visibility<[FlangOption]>, Group, HelpText<"ROCm installation path, used for finding and automatically linking required bitcode libraries.">; def hip_path_EQ : Joined<["--"], "hip-path=">, Group, HelpText<"HIP runtime installation path, used for finding HIP version and adding HIP include path.">; diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 2c83f70eb7887e..75e4ead81e43ed 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -342,6 +342,10 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , StringRef Val = A->getValue(); CmdArgs.push_back(Args.MakeArgString("-mcode-object-version=" + Val)); } + + // Check ROCm path if specified + const ToolChain = getToolChain(); + TC.getDeviceLibs(Args); } void Flang::addTargetOptions(const ArgList , diff --git a/flang/test/Driver/driver-help-hidden.f90 b/flang/test/Driver/driver-help-hidden.f90 index 48f48f5384fdc5..10b15fb454b9aa 100644 --- a/flang/test/Driver/driver-help-hidden.f90 +++ b/flang/test/Driver/driver-help-hidden.f90 @@ -144,6 +144,7 @@ ! CHECK-NEXT: -print-target-triplePrint the normalized target triple ! CHECK-NEXT: -pthreadSupport POSIX threads in generated code ! CHECK-NEXT: -P Disable linemarker output in -E mode +! CHECK-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! CHECK-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/driver-help.f90 b/flang/test/Driver/driver-help.f90 index 38f74395a678ab..ed5af2a68eb044 100644 --- a/flang/test/Driver/driver-help.f90 +++ b/flang/test/Driver/driver-help.f90 @@ -132,6 +132,7 @@ ! HELP-NEXT: -print-target-triplePrint the normalized target triple ! HELP-NEXT: -pthreadSupport POSIX threads in generated code ! HELP-NEXT: -P Disable linemarker output in -E mode +! HELP-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! HELP-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/omp-driver-offload.f90 b/flang/test/Driver/omp-driver-offload.f90 index 7e9a73627cd757..836dcfc85eb9de 100644 --- a/flang/test/Driver/omp-driver-offload.f90 +++ b/flang/test/Driver/omp-driver-offload.f90 @@ -201,3 +201,24 @@ ! RUN: -nogpulibc %s 2>&1 \ ! RUN: | FileCheck --check-prefix=NO-LIBC-GPU-AMDGPU %s ! NO-LIBC-GPU-AMDGPU-NOT: "-lcgpu-amdgpu" + +! RUN: rm -rf %t/Inputs + +! RUN: not %flang -### -v --target=x86_64-unknown-linux-gnu -fopenmp \ +! RUN: --offload-arch=gfx900 \ +! RUN: --rocm-path=%t/Inputs/rocm %s 2>&1 \ +! RUN: | FileCheck --check-prefix=ROCM-PATH-NOT-FOUND %s +! ROCM-PATH-NOT-FOUND: error: cannot find ROCm device library; + +! RUN: rm -rf %t/Inputs +! RUN: mkdir -p %t/Inputs +! RUN: cp -r
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -201,3 +201,16 @@ ! RUN: -nogpulibc %s 2>&1 \ ! RUN: | FileCheck --check-prefix=NO-LIBC-GPU-AMDGPU %s ! NO-LIBC-GPU-AMDGPU-NOT: "-lcgpu-amdgpu" + +! RUN: rm -rf %t/Inputs +! RUN: mkdir -p %t/Inputs +! RUN: cp -r %S/../../../clang/test/Driver/Inputs/rocm %t/Inputs jhuber6 wrote: Can we just copy our own version here? Not a huge fan of pulling it out of Clang. https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
https://github.com/DominikAdamski updated https://github.com/llvm/llvm-project/pull/88190 >From 44def17f36e8e27eb4232681e5ae7eff5de6d90f Mon Sep 17 00:00:00 2001 From: Dominik Adamski Date: Tue, 9 Apr 2024 14:35:26 -0500 Subject: [PATCH 1/4] [Flang][AMDGPU] Add rocm-path flag ROCm installation path is used for finding and automatically linking required bitcode libraries. --- clang/include/clang/Driver/Options.td| 3 ++- clang/lib/Driver/ToolChains/Flang.cpp| 4 flang/test/Driver/driver-help-hidden.f90 | 1 + flang/test/Driver/driver-help.f90| 1 + flang/test/Driver/omp-driver-offload.f90 | 21 + 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index f745e573eb2686..651aa10150c06e 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1341,7 +1341,8 @@ def hip_link : Flag<["--"], "hip-link">, Group, HelpText<"Link clang-offload-bundler bundles for HIP">; def no_hip_rt: Flag<["-"], "no-hip-rt">, Group, HelpText<"Do not link against HIP runtime libraries">; -def rocm_path_EQ : Joined<["--"], "rocm-path=">, Group, +def rocm_path_EQ : Joined<["--"], "rocm-path=">, + Visibility<[FlangOption]>, Group, HelpText<"ROCm installation path, used for finding and automatically linking required bitcode libraries.">; def hip_path_EQ : Joined<["--"], "hip-path=">, Group, HelpText<"HIP runtime installation path, used for finding HIP version and adding HIP include path.">; diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 2c83f70eb7887e..75e4ead81e43ed 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -342,6 +342,10 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , StringRef Val = A->getValue(); CmdArgs.push_back(Args.MakeArgString("-mcode-object-version=" + Val)); } + + // Check ROCm path if specified + const ToolChain = getToolChain(); + TC.getDeviceLibs(Args); } void Flang::addTargetOptions(const ArgList , diff --git a/flang/test/Driver/driver-help-hidden.f90 b/flang/test/Driver/driver-help-hidden.f90 index 48f48f5384fdc5..10b15fb454b9aa 100644 --- a/flang/test/Driver/driver-help-hidden.f90 +++ b/flang/test/Driver/driver-help-hidden.f90 @@ -144,6 +144,7 @@ ! CHECK-NEXT: -print-target-triplePrint the normalized target triple ! CHECK-NEXT: -pthreadSupport POSIX threads in generated code ! CHECK-NEXT: -P Disable linemarker output in -E mode +! CHECK-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! CHECK-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/driver-help.f90 b/flang/test/Driver/driver-help.f90 index 38f74395a678ab..ed5af2a68eb044 100644 --- a/flang/test/Driver/driver-help.f90 +++ b/flang/test/Driver/driver-help.f90 @@ -132,6 +132,7 @@ ! HELP-NEXT: -print-target-triplePrint the normalized target triple ! HELP-NEXT: -pthreadSupport POSIX threads in generated code ! HELP-NEXT: -P Disable linemarker output in -E mode +! HELP-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! HELP-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/omp-driver-offload.f90 b/flang/test/Driver/omp-driver-offload.f90 index 7e9a73627cd757..836dcfc85eb9de 100644 --- a/flang/test/Driver/omp-driver-offload.f90 +++ b/flang/test/Driver/omp-driver-offload.f90 @@ -201,3 +201,24 @@ ! RUN: -nogpulibc %s 2>&1 \ ! RUN: | FileCheck --check-prefix=NO-LIBC-GPU-AMDGPU %s ! NO-LIBC-GPU-AMDGPU-NOT: "-lcgpu-amdgpu" + +! RUN: rm -rf %t/Inputs + +! RUN: not %flang -### -v --target=x86_64-unknown-linux-gnu -fopenmp \ +! RUN: --offload-arch=gfx900 \ +! RUN: --rocm-path=%t/Inputs/rocm %s 2>&1 \ +! RUN: | FileCheck --check-prefix=ROCM-PATH-NOT-FOUND %s +! ROCM-PATH-NOT-FOUND: error: cannot find ROCm device library; + +! RUN: rm -rf %t/Inputs +! RUN: mkdir -p %t/Inputs +! RUN: cp -r
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
https://github.com/DominikAdamski updated https://github.com/llvm/llvm-project/pull/88190 >From 44def17f36e8e27eb4232681e5ae7eff5de6d90f Mon Sep 17 00:00:00 2001 From: Dominik Adamski Date: Tue, 9 Apr 2024 14:35:26 -0500 Subject: [PATCH 1/4] [Flang][AMDGPU] Add rocm-path flag ROCm installation path is used for finding and automatically linking required bitcode libraries. --- clang/include/clang/Driver/Options.td| 3 ++- clang/lib/Driver/ToolChains/Flang.cpp| 4 flang/test/Driver/driver-help-hidden.f90 | 1 + flang/test/Driver/driver-help.f90| 1 + flang/test/Driver/omp-driver-offload.f90 | 21 + 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index f745e573eb2686..651aa10150c06e 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1341,7 +1341,8 @@ def hip_link : Flag<["--"], "hip-link">, Group, HelpText<"Link clang-offload-bundler bundles for HIP">; def no_hip_rt: Flag<["-"], "no-hip-rt">, Group, HelpText<"Do not link against HIP runtime libraries">; -def rocm_path_EQ : Joined<["--"], "rocm-path=">, Group, +def rocm_path_EQ : Joined<["--"], "rocm-path=">, + Visibility<[FlangOption]>, Group, HelpText<"ROCm installation path, used for finding and automatically linking required bitcode libraries.">; def hip_path_EQ : Joined<["--"], "hip-path=">, Group, HelpText<"HIP runtime installation path, used for finding HIP version and adding HIP include path.">; diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 2c83f70eb7887e..75e4ead81e43ed 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -342,6 +342,10 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , StringRef Val = A->getValue(); CmdArgs.push_back(Args.MakeArgString("-mcode-object-version=" + Val)); } + + // Check ROCm path if specified + const ToolChain = getToolChain(); + TC.getDeviceLibs(Args); } void Flang::addTargetOptions(const ArgList , diff --git a/flang/test/Driver/driver-help-hidden.f90 b/flang/test/Driver/driver-help-hidden.f90 index 48f48f5384fdc5..10b15fb454b9aa 100644 --- a/flang/test/Driver/driver-help-hidden.f90 +++ b/flang/test/Driver/driver-help-hidden.f90 @@ -144,6 +144,7 @@ ! CHECK-NEXT: -print-target-triplePrint the normalized target triple ! CHECK-NEXT: -pthreadSupport POSIX threads in generated code ! CHECK-NEXT: -P Disable linemarker output in -E mode +! CHECK-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! CHECK-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/driver-help.f90 b/flang/test/Driver/driver-help.f90 index 38f74395a678ab..ed5af2a68eb044 100644 --- a/flang/test/Driver/driver-help.f90 +++ b/flang/test/Driver/driver-help.f90 @@ -132,6 +132,7 @@ ! HELP-NEXT: -print-target-triplePrint the normalized target triple ! HELP-NEXT: -pthreadSupport POSIX threads in generated code ! HELP-NEXT: -P Disable linemarker output in -E mode +! HELP-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! HELP-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/omp-driver-offload.f90 b/flang/test/Driver/omp-driver-offload.f90 index 7e9a73627cd757..836dcfc85eb9de 100644 --- a/flang/test/Driver/omp-driver-offload.f90 +++ b/flang/test/Driver/omp-driver-offload.f90 @@ -201,3 +201,24 @@ ! RUN: -nogpulibc %s 2>&1 \ ! RUN: | FileCheck --check-prefix=NO-LIBC-GPU-AMDGPU %s ! NO-LIBC-GPU-AMDGPU-NOT: "-lcgpu-amdgpu" + +! RUN: rm -rf %t/Inputs + +! RUN: not %flang -### -v --target=x86_64-unknown-linux-gnu -fopenmp \ +! RUN: --offload-arch=gfx900 \ +! RUN: --rocm-path=%t/Inputs/rocm %s 2>&1 \ +! RUN: | FileCheck --check-prefix=ROCM-PATH-NOT-FOUND %s +! ROCM-PATH-NOT-FOUND: error: cannot find ROCm device library; + +! RUN: rm -rf %t/Inputs +! RUN: mkdir -p %t/Inputs +! RUN: cp -r
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -345,7 +345,13 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , // Check ROCm path if specified const ToolChain = getToolChain(); - TC.getDeviceLibs(Args); + std::string HIPVersion; + llvm::raw_string_ostream HIPInfo(HIPVersion); + TC.printVerboseInfo(HIPInfo); + llvm::StringRef HIPInfoStrRef(HIPInfo.str()); + if (!HIPInfoStrRef.contains("Found HIP installation") && jhuber6 wrote: Do we use these libraries at all yet? https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -345,7 +345,13 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , // Check ROCm path if specified const ToolChain = getToolChain(); - TC.getDeviceLibs(Args); + std::string HIPVersion; + llvm::raw_string_ostream HIPInfo(HIPVersion); + TC.printVerboseInfo(HIPInfo); + llvm::StringRef HIPInfoStrRef(HIPInfo.str()); + if (!HIPInfoStrRef.contains("Found HIP installation") && DominikAdamski wrote: test command: `clang -fopenmp --offload-arch=gfx90a test.c` Function call: ``` clang/lib/Driver/ToolChains/Clang.cpp : void Clang::ConstructJob TC.addClangTargetOptions(Args, CmdArgs, JA.getOffloadingDeviceKind()); | V clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp: void AMDGPUOpenMPToolChain::addClangTargetOptions for (auto BCFile : getDeviceLibs(DriverArgs)) { | V clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp: AMDGPUOpenMPToolChain::getDeviceLibs ( | V if (!RocmInstallation->hasDeviceLibrary()) { getDriver().Diag(diag::err_drv_no_rocm_device_lib) << 0; return {}; } ``` https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -345,7 +345,13 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , // Check ROCm path if specified const ToolChain = getToolChain(); - TC.getDeviceLibs(Args); + std::string HIPVersion; + llvm::raw_string_ostream HIPInfo(HIPVersion); + TC.printVerboseInfo(HIPInfo); + llvm::StringRef HIPInfoStrRef(HIPInfo.str()); + if (!HIPInfoStrRef.contains("Found HIP installation") && jhuber6 wrote: Do you know where clang emits that diagnostic? I'd assume it would be done during ROCm detection. https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -345,7 +345,13 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , // Check ROCm path if specified const ToolChain = getToolChain(); - TC.getDeviceLibs(Args); + std::string HIPVersion; + llvm::raw_string_ostream HIPInfo(HIPVersion); + TC.printVerboseInfo(HIPInfo); + llvm::StringRef HIPInfoStrRef(HIPInfo.str()); + if (!HIPInfoStrRef.contains("Found HIP installation") && DominikAdamski wrote: Clang reports an error if `--rocm-path` points to an invalid directory. I need to do a similar check for Flang. The ROCm toolchain checks rocm-path within function `RocmInstallationDetector::checkCommonBitcodeLibs`. This function is called inside `ROCMToolChain::addClangTargetOptions` or `ROCMToolChain::getCommonDeviceLibNames`. `ROCMToolChain::getCommonDeviceLibNames` is called by `AMDGPUOpenMPToolChain::getDeviceLibs`. I decided not to call `ROCMToolChain::addClangTargetOptions` because Flang does not support all Clang options. That's why I initially decided to call `AMDGPUOpenMPToolChain::getDeviceLibs` to check the ROCm path. The second (current) approach is a workaround to emit an error if rocm-path is specified incorrectly. https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -345,7 +345,13 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , // Check ROCm path if specified const ToolChain = getToolChain(); - TC.getDeviceLibs(Args); + std::string HIPVersion; + llvm::raw_string_ostream HIPInfo(HIPVersion); + TC.printVerboseInfo(HIPInfo); + llvm::StringRef HIPInfoStrRef(HIPInfo.str()); + if (!HIPInfoStrRef.contains("Found HIP installation") && jhuber6 wrote: What's the utility of this bit? Don't we already do this checking inside of the ROCm toolchain? Does Flang not use that? https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
https://github.com/DominikAdamski updated https://github.com/llvm/llvm-project/pull/88190 >From 44def17f36e8e27eb4232681e5ae7eff5de6d90f Mon Sep 17 00:00:00 2001 From: Dominik Adamski Date: Tue, 9 Apr 2024 14:35:26 -0500 Subject: [PATCH 1/3] [Flang][AMDGPU] Add rocm-path flag ROCm installation path is used for finding and automatically linking required bitcode libraries. --- clang/include/clang/Driver/Options.td| 3 ++- clang/lib/Driver/ToolChains/Flang.cpp| 4 flang/test/Driver/driver-help-hidden.f90 | 1 + flang/test/Driver/driver-help.f90| 1 + flang/test/Driver/omp-driver-offload.f90 | 21 + 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index f745e573eb2686..651aa10150c06e 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1341,7 +1341,8 @@ def hip_link : Flag<["--"], "hip-link">, Group, HelpText<"Link clang-offload-bundler bundles for HIP">; def no_hip_rt: Flag<["-"], "no-hip-rt">, Group, HelpText<"Do not link against HIP runtime libraries">; -def rocm_path_EQ : Joined<["--"], "rocm-path=">, Group, +def rocm_path_EQ : Joined<["--"], "rocm-path=">, + Visibility<[FlangOption]>, Group, HelpText<"ROCm installation path, used for finding and automatically linking required bitcode libraries.">; def hip_path_EQ : Joined<["--"], "hip-path=">, Group, HelpText<"HIP runtime installation path, used for finding HIP version and adding HIP include path.">; diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 2c83f70eb7887e..75e4ead81e43ed 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -342,6 +342,10 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , StringRef Val = A->getValue(); CmdArgs.push_back(Args.MakeArgString("-mcode-object-version=" + Val)); } + + // Check ROCm path if specified + const ToolChain = getToolChain(); + TC.getDeviceLibs(Args); } void Flang::addTargetOptions(const ArgList , diff --git a/flang/test/Driver/driver-help-hidden.f90 b/flang/test/Driver/driver-help-hidden.f90 index 48f48f5384fdc5..10b15fb454b9aa 100644 --- a/flang/test/Driver/driver-help-hidden.f90 +++ b/flang/test/Driver/driver-help-hidden.f90 @@ -144,6 +144,7 @@ ! CHECK-NEXT: -print-target-triplePrint the normalized target triple ! CHECK-NEXT: -pthreadSupport POSIX threads in generated code ! CHECK-NEXT: -P Disable linemarker output in -E mode +! CHECK-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! CHECK-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/driver-help.f90 b/flang/test/Driver/driver-help.f90 index 38f74395a678ab..ed5af2a68eb044 100644 --- a/flang/test/Driver/driver-help.f90 +++ b/flang/test/Driver/driver-help.f90 @@ -132,6 +132,7 @@ ! HELP-NEXT: -print-target-triplePrint the normalized target triple ! HELP-NEXT: -pthreadSupport POSIX threads in generated code ! HELP-NEXT: -P Disable linemarker output in -E mode +! HELP-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! HELP-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/omp-driver-offload.f90 b/flang/test/Driver/omp-driver-offload.f90 index 7e9a73627cd757..836dcfc85eb9de 100644 --- a/flang/test/Driver/omp-driver-offload.f90 +++ b/flang/test/Driver/omp-driver-offload.f90 @@ -201,3 +201,24 @@ ! RUN: -nogpulibc %s 2>&1 \ ! RUN: | FileCheck --check-prefix=NO-LIBC-GPU-AMDGPU %s ! NO-LIBC-GPU-AMDGPU-NOT: "-lcgpu-amdgpu" + +! RUN: rm -rf %t/Inputs + +! RUN: not %flang -### -v --target=x86_64-unknown-linux-gnu -fopenmp \ +! RUN: --offload-arch=gfx900 \ +! RUN: --rocm-path=%t/Inputs/rocm %s 2>&1 \ +! RUN: | FileCheck --check-prefix=ROCM-PATH-NOT-FOUND %s +! ROCM-PATH-NOT-FOUND: error: cannot find ROCm device library; + +! RUN: rm -rf %t/Inputs +! RUN: mkdir -p %t/Inputs +! RUN: cp -r
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -345,7 +345,13 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , // Check ROCm path if specified const ToolChain = getToolChain(); - TC.getDeviceLibs(Args); + std::string HIPVersion; + llvm::raw_string_ostream HIPInfo(HIPVersion); + TC.printVerboseInfo(HIPInfo); + llvm::StringRef HIPInfoStrRef(HIPInfo.str()); + if (!HIPInfoStrRef.contains("Found HIP installation") && DominikAdamski wrote: Note: I can extract the `Found HIP installation` string into a separate constant so that it can be used by both clang and flang. https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -342,6 +342,10 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , StringRef Val = A->getValue(); CmdArgs.push_back(Args.MakeArgString("-mcode-object-version=" + Val)); } + + // Check ROCm path if specified + const ToolChain = getToolChain(); + TC.getDeviceLibs(Args); DominikAdamski wrote: Please look at the recent change: https://github.com/llvm/llvm-project/pull/88190/commits/5b106231ab0f5432ba788035635a0d9d91b22ce0 Is this solution better? https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
https://github.com/DominikAdamski updated https://github.com/llvm/llvm-project/pull/88190 >From 44def17f36e8e27eb4232681e5ae7eff5de6d90f Mon Sep 17 00:00:00 2001 From: Dominik Adamski Date: Tue, 9 Apr 2024 14:35:26 -0500 Subject: [PATCH 1/3] [Flang][AMDGPU] Add rocm-path flag ROCm installation path is used for finding and automatically linking required bitcode libraries. --- clang/include/clang/Driver/Options.td| 3 ++- clang/lib/Driver/ToolChains/Flang.cpp| 4 flang/test/Driver/driver-help-hidden.f90 | 1 + flang/test/Driver/driver-help.f90| 1 + flang/test/Driver/omp-driver-offload.f90 | 21 + 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index f745e573eb2686..651aa10150c06e 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1341,7 +1341,8 @@ def hip_link : Flag<["--"], "hip-link">, Group, HelpText<"Link clang-offload-bundler bundles for HIP">; def no_hip_rt: Flag<["-"], "no-hip-rt">, Group, HelpText<"Do not link against HIP runtime libraries">; -def rocm_path_EQ : Joined<["--"], "rocm-path=">, Group, +def rocm_path_EQ : Joined<["--"], "rocm-path=">, + Visibility<[FlangOption]>, Group, HelpText<"ROCm installation path, used for finding and automatically linking required bitcode libraries.">; def hip_path_EQ : Joined<["--"], "hip-path=">, Group, HelpText<"HIP runtime installation path, used for finding HIP version and adding HIP include path.">; diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 2c83f70eb7887e..75e4ead81e43ed 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -342,6 +342,10 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , StringRef Val = A->getValue(); CmdArgs.push_back(Args.MakeArgString("-mcode-object-version=" + Val)); } + + // Check ROCm path if specified + const ToolChain = getToolChain(); + TC.getDeviceLibs(Args); } void Flang::addTargetOptions(const ArgList , diff --git a/flang/test/Driver/driver-help-hidden.f90 b/flang/test/Driver/driver-help-hidden.f90 index 48f48f5384fdc5..10b15fb454b9aa 100644 --- a/flang/test/Driver/driver-help-hidden.f90 +++ b/flang/test/Driver/driver-help-hidden.f90 @@ -144,6 +144,7 @@ ! CHECK-NEXT: -print-target-triplePrint the normalized target triple ! CHECK-NEXT: -pthreadSupport POSIX threads in generated code ! CHECK-NEXT: -P Disable linemarker output in -E mode +! CHECK-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! CHECK-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/driver-help.f90 b/flang/test/Driver/driver-help.f90 index 38f74395a678ab..ed5af2a68eb044 100644 --- a/flang/test/Driver/driver-help.f90 +++ b/flang/test/Driver/driver-help.f90 @@ -132,6 +132,7 @@ ! HELP-NEXT: -print-target-triplePrint the normalized target triple ! HELP-NEXT: -pthreadSupport POSIX threads in generated code ! HELP-NEXT: -P Disable linemarker output in -E mode +! HELP-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! HELP-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/omp-driver-offload.f90 b/flang/test/Driver/omp-driver-offload.f90 index 7e9a73627cd757..836dcfc85eb9de 100644 --- a/flang/test/Driver/omp-driver-offload.f90 +++ b/flang/test/Driver/omp-driver-offload.f90 @@ -201,3 +201,24 @@ ! RUN: -nogpulibc %s 2>&1 \ ! RUN: | FileCheck --check-prefix=NO-LIBC-GPU-AMDGPU %s ! NO-LIBC-GPU-AMDGPU-NOT: "-lcgpu-amdgpu" + +! RUN: rm -rf %t/Inputs + +! RUN: not %flang -### -v --target=x86_64-unknown-linux-gnu -fopenmp \ +! RUN: --offload-arch=gfx900 \ +! RUN: --rocm-path=%t/Inputs/rocm %s 2>&1 \ +! RUN: | FileCheck --check-prefix=ROCM-PATH-NOT-FOUND %s +! ROCM-PATH-NOT-FOUND: error: cannot find ROCm device library; + +! RUN: rm -rf %t/Inputs +! RUN: mkdir -p %t/Inputs +! RUN: cp -r
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
https://github.com/DominikAdamski updated https://github.com/llvm/llvm-project/pull/88190 >From 44def17f36e8e27eb4232681e5ae7eff5de6d90f Mon Sep 17 00:00:00 2001 From: Dominik Adamski Date: Tue, 9 Apr 2024 14:35:26 -0500 Subject: [PATCH 1/2] [Flang][AMDGPU] Add rocm-path flag ROCm installation path is used for finding and automatically linking required bitcode libraries. --- clang/include/clang/Driver/Options.td| 3 ++- clang/lib/Driver/ToolChains/Flang.cpp| 4 flang/test/Driver/driver-help-hidden.f90 | 1 + flang/test/Driver/driver-help.f90| 1 + flang/test/Driver/omp-driver-offload.f90 | 21 + 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index f745e573eb2686..651aa10150c06e 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1341,7 +1341,8 @@ def hip_link : Flag<["--"], "hip-link">, Group, HelpText<"Link clang-offload-bundler bundles for HIP">; def no_hip_rt: Flag<["-"], "no-hip-rt">, Group, HelpText<"Do not link against HIP runtime libraries">; -def rocm_path_EQ : Joined<["--"], "rocm-path=">, Group, +def rocm_path_EQ : Joined<["--"], "rocm-path=">, + Visibility<[FlangOption]>, Group, HelpText<"ROCm installation path, used for finding and automatically linking required bitcode libraries.">; def hip_path_EQ : Joined<["--"], "hip-path=">, Group, HelpText<"HIP runtime installation path, used for finding HIP version and adding HIP include path.">; diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 2c83f70eb7887e..75e4ead81e43ed 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -342,6 +342,10 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , StringRef Val = A->getValue(); CmdArgs.push_back(Args.MakeArgString("-mcode-object-version=" + Val)); } + + // Check ROCm path if specified + const ToolChain = getToolChain(); + TC.getDeviceLibs(Args); } void Flang::addTargetOptions(const ArgList , diff --git a/flang/test/Driver/driver-help-hidden.f90 b/flang/test/Driver/driver-help-hidden.f90 index 48f48f5384fdc5..10b15fb454b9aa 100644 --- a/flang/test/Driver/driver-help-hidden.f90 +++ b/flang/test/Driver/driver-help-hidden.f90 @@ -144,6 +144,7 @@ ! CHECK-NEXT: -print-target-triplePrint the normalized target triple ! CHECK-NEXT: -pthreadSupport POSIX threads in generated code ! CHECK-NEXT: -P Disable linemarker output in -E mode +! CHECK-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! CHECK-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/driver-help.f90 b/flang/test/Driver/driver-help.f90 index 38f74395a678ab..ed5af2a68eb044 100644 --- a/flang/test/Driver/driver-help.f90 +++ b/flang/test/Driver/driver-help.f90 @@ -132,6 +132,7 @@ ! HELP-NEXT: -print-target-triplePrint the normalized target triple ! HELP-NEXT: -pthreadSupport POSIX threads in generated code ! HELP-NEXT: -P Disable linemarker output in -E mode +! HELP-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! HELP-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/omp-driver-offload.f90 b/flang/test/Driver/omp-driver-offload.f90 index 7e9a73627cd757..836dcfc85eb9de 100644 --- a/flang/test/Driver/omp-driver-offload.f90 +++ b/flang/test/Driver/omp-driver-offload.f90 @@ -201,3 +201,24 @@ ! RUN: -nogpulibc %s 2>&1 \ ! RUN: | FileCheck --check-prefix=NO-LIBC-GPU-AMDGPU %s ! NO-LIBC-GPU-AMDGPU-NOT: "-lcgpu-amdgpu" + +! RUN: rm -rf %t/Inputs + +! RUN: not %flang -### -v --target=x86_64-unknown-linux-gnu -fopenmp \ +! RUN: --offload-arch=gfx900 \ +! RUN: --rocm-path=%t/Inputs/rocm %s 2>&1 \ +! RUN: | FileCheck --check-prefix=ROCM-PATH-NOT-FOUND %s +! ROCM-PATH-NOT-FOUND: error: cannot find ROCm device library; + +! RUN: rm -rf %t/Inputs +! RUN: mkdir -p %t/Inputs +! RUN: cp -r
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -201,3 +201,24 @@ ! RUN: -nogpulibc %s 2>&1 \ ! RUN: | FileCheck --check-prefix=NO-LIBC-GPU-AMDGPU %s ! NO-LIBC-GPU-AMDGPU-NOT: "-lcgpu-amdgpu" + +! RUN: rm -rf %t/Inputs + +! RUN: not %flang -### -v --target=x86_64-unknown-linux-gnu -fopenmp \ +! RUN: --offload-arch=gfx900 \ +! RUN: --rocm-path=%t/Inputs/rocm %s 2>&1 \ jhuber6 wrote: Even in that case I don't think `%t` is right, should probably just point it to some non-existant path off the current directory `%S`. https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -201,3 +201,24 @@ ! RUN: -nogpulibc %s 2>&1 \ ! RUN: | FileCheck --check-prefix=NO-LIBC-GPU-AMDGPU %s ! NO-LIBC-GPU-AMDGPU-NOT: "-lcgpu-amdgpu" + +! RUN: rm -rf %t/Inputs + +! RUN: not %flang -### -v --target=x86_64-unknown-linux-gnu -fopenmp \ +! RUN: --offload-arch=gfx900 \ +! RUN: --rocm-path=%t/Inputs/rocm %s 2>&1 \ DominikAdamski wrote: This test checks if flang reports an error if ROCm path doesn't exist. The next test checks positive scenario. https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -342,6 +342,10 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , StringRef Val = A->getValue(); CmdArgs.push_back(Args.MakeArgString("-mcode-object-version=" + Val)); } + + // Check ROCm path if specified + const ToolChain = getToolChain(); + TC.getDeviceLibs(Args); jhuber6 wrote: Doing `clang -v` will show you something like ``` Found HIP installation: /opt/rocm, version 6.0.32831 ``` Can we not check that way? https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -1340,7 +1340,8 @@ def hip_link : Flag<["--"], "hip-link">, Group, HelpText<"Link clang-offload-bundler bundles for HIP">; def no_hip_rt: Flag<["-"], "no-hip-rt">, Group, HelpText<"Do not link against HIP runtime libraries">; -def rocm_path_EQ : Joined<["--"], "rocm-path=">, Group, +def rocm_path_EQ : Joined<["--"], "rocm-path=">, + Visibility<[FlangOption]>, Group, jhuber6 wrote: Yeah, should be fine. https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -1340,7 +1340,8 @@ def hip_link : Flag<["--"], "hip-link">, Group, HelpText<"Link clang-offload-bundler bundles for HIP">; def no_hip_rt: Flag<["-"], "no-hip-rt">, Group, HelpText<"Do not link against HIP runtime libraries">; -def rocm_path_EQ : Joined<["--"], "rocm-path=">, Group, +def rocm_path_EQ : Joined<["--"], "rocm-path=">, + Visibility<[FlangOption]>, Group, DominikAdamski wrote: ninja check-clang does not report any error. Is it enough? https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -342,6 +342,10 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , StringRef Val = A->getValue(); CmdArgs.push_back(Args.MakeArgString("-mcode-object-version=" + Val)); } + + // Check ROCm path if specified + const ToolChain = getToolChain(); + TC.getDeviceLibs(Args); DominikAdamski wrote: I need it to invoke `AMDGPUOpenMPToolChain::getDeviceLibs` to check if specified ROCm path is correct. https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -201,3 +201,24 @@ ! RUN: -nogpulibc %s 2>&1 \ ! RUN: | FileCheck --check-prefix=NO-LIBC-GPU-AMDGPU %s ! NO-LIBC-GPU-AMDGPU-NOT: "-lcgpu-amdgpu" + +! RUN: rm -rf %t/Inputs + +! RUN: not %flang -### -v --target=x86_64-unknown-linux-gnu -fopenmp \ +! RUN: --offload-arch=gfx900 \ +! RUN: --rocm-path=%t/Inputs/rocm %s 2>&1 \ jhuber6 wrote: I'm assuming you mean `%S` as well. https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
https://github.com/DominikAdamski updated https://github.com/llvm/llvm-project/pull/88190 >From 8782af25c5946dc33342798c36c7d64569d16ab5 Mon Sep 17 00:00:00 2001 From: Dominik Adamski Date: Tue, 9 Apr 2024 14:35:26 -0500 Subject: [PATCH 1/2] [Flang][AMDGPU] Add rocm-path flag ROCm installation path is used for finding and automatically linking required bitcode libraries. --- clang/include/clang/Driver/Options.td| 3 ++- clang/lib/Driver/ToolChains/Flang.cpp| 4 flang/test/Driver/driver-help-hidden.f90 | 1 + flang/test/Driver/driver-help.f90| 1 + flang/test/Driver/omp-driver-offload.f90 | 21 + 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 827d9d7c0c18e4..64ffb15939bb15 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1340,7 +1340,8 @@ def hip_link : Flag<["--"], "hip-link">, Group, HelpText<"Link clang-offload-bundler bundles for HIP">; def no_hip_rt: Flag<["-"], "no-hip-rt">, Group, HelpText<"Do not link against HIP runtime libraries">; -def rocm_path_EQ : Joined<["--"], "rocm-path=">, Group, +def rocm_path_EQ : Joined<["--"], "rocm-path=">, + Visibility<[FlangOption]>, Group, HelpText<"ROCm installation path, used for finding and automatically linking required bitcode libraries.">; def hip_path_EQ : Joined<["--"], "hip-path=">, Group, HelpText<"HIP runtime installation path, used for finding HIP version and adding HIP include path.">; diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 2c83f70eb7887e..75e4ead81e43ed 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -342,6 +342,10 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , StringRef Val = A->getValue(); CmdArgs.push_back(Args.MakeArgString("-mcode-object-version=" + Val)); } + + // Check ROCm path if specified + const ToolChain = getToolChain(); + TC.getDeviceLibs(Args); } void Flang::addTargetOptions(const ArgList , diff --git a/flang/test/Driver/driver-help-hidden.f90 b/flang/test/Driver/driver-help-hidden.f90 index 48f48f5384fdc5..10b15fb454b9aa 100644 --- a/flang/test/Driver/driver-help-hidden.f90 +++ b/flang/test/Driver/driver-help-hidden.f90 @@ -144,6 +144,7 @@ ! CHECK-NEXT: -print-target-triplePrint the normalized target triple ! CHECK-NEXT: -pthreadSupport POSIX threads in generated code ! CHECK-NEXT: -P Disable linemarker output in -E mode +! CHECK-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! CHECK-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/driver-help.f90 b/flang/test/Driver/driver-help.f90 index 38f74395a678ab..ed5af2a68eb044 100644 --- a/flang/test/Driver/driver-help.f90 +++ b/flang/test/Driver/driver-help.f90 @@ -132,6 +132,7 @@ ! HELP-NEXT: -print-target-triplePrint the normalized target triple ! HELP-NEXT: -pthreadSupport POSIX threads in generated code ! HELP-NEXT: -P Disable linemarker output in -E mode +! HELP-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! HELP-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/omp-driver-offload.f90 b/flang/test/Driver/omp-driver-offload.f90 index 7e9a73627cd757..836dcfc85eb9de 100644 --- a/flang/test/Driver/omp-driver-offload.f90 +++ b/flang/test/Driver/omp-driver-offload.f90 @@ -201,3 +201,24 @@ ! RUN: -nogpulibc %s 2>&1 \ ! RUN: | FileCheck --check-prefix=NO-LIBC-GPU-AMDGPU %s ! NO-LIBC-GPU-AMDGPU-NOT: "-lcgpu-amdgpu" + +! RUN: rm -rf %t/Inputs + +! RUN: not %flang -### -v --target=x86_64-unknown-linux-gnu -fopenmp \ +! RUN: --offload-arch=gfx900 \ +! RUN: --rocm-path=%t/Inputs/rocm %s 2>&1 \ +! RUN: | FileCheck --check-prefix=ROCM-PATH-NOT-FOUND %s +! ROCM-PATH-NOT-FOUND: error: cannot find ROCm device library; + +! RUN: rm -rf %t/Inputs +! RUN: mkdir -p %t/Inputs +! RUN: cp -r
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -342,6 +342,10 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , StringRef Val = A->getValue(); CmdArgs.push_back(Args.MakeArgString("-mcode-object-version=" + Val)); } + + // Check ROCm path if specified + const ToolChain = getToolChain(); + TC.getDeviceLibs(Args); jhuber6 wrote: What does this have to do with adding `--rocm-path`? Does `flang` correctly inherit the `RocmInstallationDetector` logic once specified? https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -1340,7 +1340,8 @@ def hip_link : Flag<["--"], "hip-link">, Group, HelpText<"Link clang-offload-bundler bundles for HIP">; def no_hip_rt: Flag<["-"], "no-hip-rt">, Group, HelpText<"Do not link against HIP runtime libraries">; -def rocm_path_EQ : Joined<["--"], "rocm-path=">, Group, +def rocm_path_EQ : Joined<["--"], "rocm-path=">, + Visibility<[FlangOption]>, Group, jhuber6 wrote: Just making sure, but adding the explicit visibility here doesn't override the standard clang ones? https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
@@ -201,3 +201,24 @@ ! RUN: -nogpulibc %s 2>&1 \ ! RUN: | FileCheck --check-prefix=NO-LIBC-GPU-AMDGPU %s ! NO-LIBC-GPU-AMDGPU-NOT: "-lcgpu-amdgpu" + +! RUN: rm -rf %t/Inputs + +! RUN: not %flang -### -v --target=x86_64-unknown-linux-gnu -fopenmp \ +! RUN: --offload-arch=gfx900 \ +! RUN: --rocm-path=%t/Inputs/rocm %s 2>&1 \ jhuber6 wrote: Where does this live? There's one in `clang` but not `flang`. https://github.com/llvm/llvm-project/pull/88190 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
llvmbot wrote: @llvm/pr-subscribers-clang Author: Dominik Adamski (DominikAdamski) Changes ROCm installation path is used for finding and automatically linking required bitcode libraries for OpenMP AMDGPU offload. --- Full diff: https://github.com/llvm/llvm-project/pull/88190.diff 5 Files Affected: - (modified) clang/include/clang/Driver/Options.td (+2-1) - (modified) clang/lib/Driver/ToolChains/Flang.cpp (+4) - (modified) flang/test/Driver/driver-help-hidden.f90 (+1) - (modified) flang/test/Driver/driver-help.f90 (+1) - (modified) flang/test/Driver/omp-driver-offload.f90 (+21) ``diff diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 827d9d7c0c18e4..64ffb15939bb15 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1340,7 +1340,8 @@ def hip_link : Flag<["--"], "hip-link">, Group, HelpText<"Link clang-offload-bundler bundles for HIP">; def no_hip_rt: Flag<["-"], "no-hip-rt">, Group, HelpText<"Do not link against HIP runtime libraries">; -def rocm_path_EQ : Joined<["--"], "rocm-path=">, Group, +def rocm_path_EQ : Joined<["--"], "rocm-path=">, + Visibility<[FlangOption]>, Group, HelpText<"ROCm installation path, used for finding and automatically linking required bitcode libraries.">; def hip_path_EQ : Joined<["--"], "hip-path=">, Group, HelpText<"HIP runtime installation path, used for finding HIP version and adding HIP include path.">; diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 2c83f70eb7887e..75e4ead81e43ed 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -342,6 +342,10 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , StringRef Val = A->getValue(); CmdArgs.push_back(Args.MakeArgString("-mcode-object-version=" + Val)); } + + // Check ROCm path if specified + const ToolChain = getToolChain(); + TC.getDeviceLibs(Args); } void Flang::addTargetOptions(const ArgList , diff --git a/flang/test/Driver/driver-help-hidden.f90 b/flang/test/Driver/driver-help-hidden.f90 index 48f48f5384fdc5..10b15fb454b9aa 100644 --- a/flang/test/Driver/driver-help-hidden.f90 +++ b/flang/test/Driver/driver-help-hidden.f90 @@ -144,6 +144,7 @@ ! CHECK-NEXT: -print-target-triplePrint the normalized target triple ! CHECK-NEXT: -pthreadSupport POSIX threads in generated code ! CHECK-NEXT: -P Disable linemarker output in -E mode +! CHECK-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! CHECK-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/driver-help.f90 b/flang/test/Driver/driver-help.f90 index 38f74395a678ab..ed5af2a68eb044 100644 --- a/flang/test/Driver/driver-help.f90 +++ b/flang/test/Driver/driver-help.f90 @@ -132,6 +132,7 @@ ! HELP-NEXT: -print-target-triplePrint the normalized target triple ! HELP-NEXT: -pthreadSupport POSIX threads in generated code ! HELP-NEXT: -P Disable linemarker output in -E mode +! HELP-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! HELP-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/omp-driver-offload.f90 b/flang/test/Driver/omp-driver-offload.f90 index 7e9a73627cd757..836dcfc85eb9de 100644 --- a/flang/test/Driver/omp-driver-offload.f90 +++ b/flang/test/Driver/omp-driver-offload.f90 @@ -201,3 +201,24 @@ ! RUN: -nogpulibc %s 2>&1 \ ! RUN: | FileCheck --check-prefix=NO-LIBC-GPU-AMDGPU %s ! NO-LIBC-GPU-AMDGPU-NOT: "-lcgpu-amdgpu" + +! RUN: rm -rf %t/Inputs + +! RUN: not %flang -### -v --target=x86_64-unknown-linux-gnu -fopenmp \ +! RUN: --offload-arch=gfx900 \ +! RUN: --rocm-path=%t/Inputs/rocm %s 2>&1 \ +! RUN: | FileCheck --check-prefix=ROCM-PATH-NOT-FOUND %s +! ROCM-PATH-NOT-FOUND: error: cannot find ROCm device library; + +! RUN: rm -rf %t/Inputs +! RUN: mkdir -p %t/Inputs +! RUN: cp -r %S/../../../clang/test/Driver/Inputs/rocm %t/Inputs +! RUN: mkdir -p %t/Inputs/rocm/share/hip +! RUN: mkdir -p
[clang] [flang] [Flang][AMDGPU] Add rocm-path flag (PR #88190)
https://github.com/DominikAdamski created https://github.com/llvm/llvm-project/pull/88190 ROCm installation path is used for finding and automatically linking required bitcode libraries for OpenMP AMDGPU offload. >From 8782af25c5946dc33342798c36c7d64569d16ab5 Mon Sep 17 00:00:00 2001 From: Dominik Adamski Date: Tue, 9 Apr 2024 14:35:26 -0500 Subject: [PATCH] [Flang][AMDGPU] Add rocm-path flag ROCm installation path is used for finding and automatically linking required bitcode libraries. --- clang/include/clang/Driver/Options.td| 3 ++- clang/lib/Driver/ToolChains/Flang.cpp| 4 flang/test/Driver/driver-help-hidden.f90 | 1 + flang/test/Driver/driver-help.f90| 1 + flang/test/Driver/omp-driver-offload.f90 | 21 + 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 827d9d7c0c18e4..64ffb15939bb15 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1340,7 +1340,8 @@ def hip_link : Flag<["--"], "hip-link">, Group, HelpText<"Link clang-offload-bundler bundles for HIP">; def no_hip_rt: Flag<["-"], "no-hip-rt">, Group, HelpText<"Do not link against HIP runtime libraries">; -def rocm_path_EQ : Joined<["--"], "rocm-path=">, Group, +def rocm_path_EQ : Joined<["--"], "rocm-path=">, + Visibility<[FlangOption]>, Group, HelpText<"ROCm installation path, used for finding and automatically linking required bitcode libraries.">; def hip_path_EQ : Joined<["--"], "hip-path=">, Group, HelpText<"HIP runtime installation path, used for finding HIP version and adding HIP include path.">; diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 2c83f70eb7887e..75e4ead81e43ed 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -342,6 +342,10 @@ void Flang::AddAMDGPUTargetArgs(const ArgList , StringRef Val = A->getValue(); CmdArgs.push_back(Args.MakeArgString("-mcode-object-version=" + Val)); } + + // Check ROCm path if specified + const ToolChain = getToolChain(); + TC.getDeviceLibs(Args); } void Flang::addTargetOptions(const ArgList , diff --git a/flang/test/Driver/driver-help-hidden.f90 b/flang/test/Driver/driver-help-hidden.f90 index 48f48f5384fdc5..10b15fb454b9aa 100644 --- a/flang/test/Driver/driver-help-hidden.f90 +++ b/flang/test/Driver/driver-help-hidden.f90 @@ -144,6 +144,7 @@ ! CHECK-NEXT: -print-target-triplePrint the normalized target triple ! CHECK-NEXT: -pthreadSupport POSIX threads in generated code ! CHECK-NEXT: -P Disable linemarker output in -E mode +! CHECK-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! CHECK-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! CHECK-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/driver-help.f90 b/flang/test/Driver/driver-help.f90 index 38f74395a678ab..ed5af2a68eb044 100644 --- a/flang/test/Driver/driver-help.f90 +++ b/flang/test/Driver/driver-help.f90 @@ -132,6 +132,7 @@ ! HELP-NEXT: -print-target-triplePrint the normalized target triple ! HELP-NEXT: -pthreadSupport POSIX threads in generated code ! HELP-NEXT: -P Disable linemarker output in -E mode +! HELP-NEXT: --rocm-path= ROCm installation path, used for finding and automatically linking required bitcode libraries. ! HELP-NEXT: -Rpass-analysis= Report transformation analysis from optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass-missed= Report missed transformations by optimization passes whose name matches the given POSIX regular expression ! HELP-NEXT: -Rpass= Report transformations performed by optimization passes whose name matches the given POSIX regular expression diff --git a/flang/test/Driver/omp-driver-offload.f90 b/flang/test/Driver/omp-driver-offload.f90 index 7e9a73627cd757..836dcfc85eb9de 100644 --- a/flang/test/Driver/omp-driver-offload.f90 +++ b/flang/test/Driver/omp-driver-offload.f90 @@ -201,3 +201,24 @@ ! RUN: -nogpulibc %s 2>&1 \ ! RUN: | FileCheck --check-prefix=NO-LIBC-GPU-AMDGPU %s ! NO-LIBC-GPU-AMDGPU-NOT: "-lcgpu-amdgpu" + +! RUN: rm -rf %t/Inputs + +! RUN: not %flang -### -v --target=x86_64-unknown-linux-gnu -fopenmp \ +! RUN: --offload-arch=gfx900 \ +! RUN: --rocm-path=%t/Inputs/rocm %s 2>&1 \ +! RUN: | FileCheck --check-prefix=ROCM-PATH-NOT-FOUND %s +! ROCM-PATH-NOT-FOUND: error: cannot find ROCm