Author: Shilei Tian Date: 2025-04-08T09:57:43-04:00 New Revision: f19c6f23abefac56fde9f2b393c9ffa7595c86c6
URL: https://github.com/llvm/llvm-project/commit/f19c6f23abefac56fde9f2b393c9ffa7595c86c6 DIFF: https://github.com/llvm/llvm-project/commit/f19c6f23abefac56fde9f2b393c9ffa7595c86c6.diff LOG: [Clang][AMDGPU] Improve error message when device libraries for COV6 are missing (#134745) #130963 switches the default to COV6, which requires ROCm 6.3. Currently, if the device libraries for COV6 are not found, the error message is not very helpful. This PR provides a more informative error message in such cases. Added: Modified: clang/include/clang/Basic/DiagnosticDriverKinds.td clang/lib/Driver/ToolChains/AMDGPU.cpp clang/lib/Driver/ToolChains/ROCm.h clang/test/Driver/hip-device-libs.hip Removed: ################################################################################ diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index df24cca49aaae..a96b4fb33390c 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -67,7 +67,8 @@ def err_drv_no_cuda_libdevice : Error< "libdevice">; def err_drv_no_rocm_device_lib : Error< - "cannot find ROCm device library%select{| for %1| for ABI version %1}0; provide its path via " + "cannot find ROCm device library%select{| for %1| for ABI version %1" + "%select{|, which requires ROCm %3 or higher}2}0; provide its path via " "'--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build " "without ROCm device library">; def err_drv_no_hip_runtime : Error< diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index dffc70d5e5b69..29c84037b523a 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -935,7 +935,13 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs( return false; } if (ABIVer.requiresLibrary() && getABIVersionPath(ABIVer).empty()) { - D.Diag(diag::err_drv_no_rocm_device_lib) << 2 << ABIVer.toString(); + // Starting from COV6, we will report minimum ROCm version requirement in + // the error message. + if (ABIVer.getAsCodeObjectVersion() < 6) + D.Diag(diag::err_drv_no_rocm_device_lib) << 2 << ABIVer.toString() << 0; + else + D.Diag(diag::err_drv_no_rocm_device_lib) + << 2 << ABIVer.toString() << 1 << "6.3"; return false; } return true; diff --git a/clang/lib/Driver/ToolChains/ROCm.h b/clang/lib/Driver/ToolChains/ROCm.h index a6cc41db383b6..1ba0f1b9f30d6 100644 --- a/clang/lib/Driver/ToolChains/ROCm.h +++ b/clang/lib/Driver/ToolChains/ROCm.h @@ -37,9 +37,11 @@ struct DeviceLibABIVersion { /// and below works with ROCm 5.0 and below which does not have /// abi_version_*.bc. Code object v5 requires abi_version_500.bc. bool requiresLibrary() { return ABIVersion >= 500; } - std::string toString() { + std::string toString() { return Twine(getAsCodeObjectVersion()).str(); } + + unsigned getAsCodeObjectVersion() const { assert(ABIVersion % 100 == 0 && "Not supported"); - return Twine(ABIVersion / 100).str(); + return ABIVersion / 100; } }; diff --git a/clang/test/Driver/hip-device-libs.hip b/clang/test/Driver/hip-device-libs.hip index c7cafd0027bc5..b123f741bdee5 100644 --- a/clang/test/Driver/hip-device-libs.hip +++ b/clang/test/Driver/hip-device-libs.hip @@ -254,4 +254,4 @@ // NOABI4-NOT: "-mlink-builtin-bitcode" "{{.*}}oclc_abi_version_400.bc" // NOABI4-NOT: "-mlink-builtin-bitcode" "{{.*}}oclc_abi_version_500.bc" // NOABI5: error: cannot find ROCm device library for ABI version 5; provide its path via '--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build without ROCm device library -// NOABI6: error: cannot find ROCm device library for ABI version 6; provide its path via '--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build without ROCm device library +// NOABI6: error: cannot find ROCm device library for ABI version 6, which requires ROCm 6.3 or higher; provide its path via '--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build without ROCm device library _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits