Author: Aiden Grossman
Date: 2026-02-23T08:29:13-08:00
New Revision: 47da1cea9780dd3e60bad61fd96250b37469339a

URL: 
https://github.com/llvm/llvm-project/commit/47da1cea9780dd3e60bad61fd96250b37469339a
DIFF: 
https://github.com/llvm/llvm-project/commit/47da1cea9780dd3e60bad61fd96250b37469339a.diff

LOG: Revert "clang/AMDGPU: Stop looking for oclc_correctly_rounded_sqrt control 
libraries" (#182877)

Reverts llvm/llvm-project#182858

This breaks premerge for flang.
https://lab.llvm.org/staging/#/builders/192/builds/21018. Reverting the
patch locally fixes the issue.

Added: 
    
clang/test/Driver/Inputs/hip_dev_lib/oclc_correctly_rounded_sqrt_on.amdgcn.bc
    
clang/test/Driver/Inputs/rocm-invalid/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc
    
clang/test/Driver/Inputs/rocm-invalid/amdgcn/bitcode/oclc_correctly_rounded_sqrt_on.bc
    
clang/test/Driver/Inputs/rocm/amdgcn/bitcode-no-abi-ver/oclc_correctly_rounded_sqrt_off.bc
    
clang/test/Driver/Inputs/rocm/amdgcn/bitcode-no-abi-ver/oclc_correctly_rounded_sqrt_on.bc
    
clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc
    
clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_correctly_rounded_sqrt_on.bc
    
clang/test/Driver/Inputs/rocm_resource_dir/lib/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc
    
clang/test/Driver/Inputs/rocm_resource_dir/lib/amdgcn/bitcode/oclc_correctly_rounded_sqrt_on.bc
    
clang/test/Driver/Inputs/rocm_resource_dir/lib64/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc
    
clang/test/Driver/Inputs/rocm_resource_dir/lib64/amdgcn/bitcode/oclc_correctly_rounded_sqrt_on.bc

Modified: 
    clang/include/clang/Driver/RocmInstallationDetector.h
    clang/lib/Driver/ToolChains/AMDGPU.cpp
    clang/test/Driver/amdgpu-openmp-toolchain.c
    clang/test/Driver/hip-device-libs.hip
    clang/test/Driver/rocm-device-libs.cl

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Driver/RocmInstallationDetector.h 
b/clang/include/clang/Driver/RocmInstallationDetector.h
index b20dddbd045ea..488d9e7d40587 100644
--- a/clang/include/clang/Driver/RocmInstallationDetector.h
+++ b/clang/include/clang/Driver/RocmInstallationDetector.h
@@ -82,6 +82,7 @@ class RocmInstallationDetector {
     bool FiniteOnly;
     bool UnsafeMathOpt;
     bool FastRelaxedMath;
+    bool CorrectSqrt;
     bool GPUSan;
   };
 
@@ -145,6 +146,7 @@ class RocmInstallationDetector {
   ConditionalLibrary WavefrontSize64;
   ConditionalLibrary FiniteOnly;
   ConditionalLibrary UnsafeMath;
+  ConditionalLibrary CorrectlyRoundedSqrt;
 
   // Maps ABI version to library path. The version number is in the format of
   // three digits as used in the ABI version library name.
@@ -158,7 +160,7 @@ class RocmInstallationDetector {
   bool allGenericLibsValid() const {
     return !OCML.empty() && !OCKL.empty() && !OpenCL.empty() &&
            WavefrontSize64.isValid() && FiniteOnly.isValid() &&
-           UnsafeMath.isValid();
+           UnsafeMath.isValid() && CorrectlyRoundedSqrt.isValid();
   }
 
   void scanLibDevicePath(llvm::StringRef Path);
@@ -249,6 +251,10 @@ class RocmInstallationDetector {
     return UnsafeMath.get(Enabled);
   }
 
+  StringRef getCorrectlyRoundedSqrtPath(bool Enabled) const {
+    return CorrectlyRoundedSqrt.get(Enabled);
+  }
+
   StringRef getABIVersionPath(DeviceLibABIVersion ABIVer) const {
     auto Loc = ABIVersionMap.find(ABIVer.ABIVersion);
     if (Loc == ABIVersionMap.end())

diff  --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index fc78ff02ef214..ef5189359cd1a 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -81,6 +81,12 @@ RocmInstallationDetector::CommonBitcodeLibsPreferences::
                     DriverArgs.hasFlag(options::OPT_ffast_math,
                                        options::OPT_fno_fast_math, false);
 
+  const bool DefaultSqrt = IsKnownOffloading ? true : false;
+  CorrectSqrt =
+      DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt) ||
+      DriverArgs.hasFlag(
+          options::OPT_fhip_fp32_correctly_rounded_divide_sqrt,
+          options::OPT_fno_hip_fp32_correctly_rounded_divide_sqrt, 
DefaultSqrt);
   // GPU Sanitizer currently only supports ASan and is enabled through host
   // ASan.
   GPUSan = (DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
@@ -121,6 +127,10 @@ void 
RocmInstallationDetector::scanLibDevicePath(llvm::StringRef Path) {
       FiniteOnly.Off = FilePath;
     } else if (BaseName == "oclc_finite_only_on") {
       FiniteOnly.On = FilePath;
+    } else if (BaseName == "oclc_correctly_rounded_sqrt_on") {
+      CorrectlyRoundedSqrt.On = FilePath;
+    } else if (BaseName == "oclc_correctly_rounded_sqrt_off") {
+      CorrectlyRoundedSqrt.Off = FilePath;
     } else if (BaseName == "oclc_unsafe_math_on") {
       UnsafeMath.On = FilePath;
     } else if (BaseName == "oclc_unsafe_math_off") {
@@ -1044,6 +1054,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
     AddBCLib(getOCKLPath(), false);
   AddBCLib(getUnsafeMathPath(Pref.UnsafeMathOpt || Pref.FastRelaxedMath));
   AddBCLib(getFiniteOnlyPath(Pref.FiniteOnly || Pref.FastRelaxedMath));
+  AddBCLib(getCorrectlyRoundedSqrtPath(Pref.CorrectSqrt));
   AddBCLib(getWavefrontSize64Path(Pref.Wave64));
   AddBCLib(LibDeviceFile);
   auto ABIVerPath = getABIVersionPath(Pref.ABIVer);

diff  --git 
a/clang/test/Driver/Inputs/hip_dev_lib/oclc_correctly_rounded_sqrt_on.amdgcn.bc 
b/clang/test/Driver/Inputs/hip_dev_lib/oclc_correctly_rounded_sqrt_on.amdgcn.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git 
a/clang/test/Driver/Inputs/rocm-invalid/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc
 
b/clang/test/Driver/Inputs/rocm-invalid/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git 
a/clang/test/Driver/Inputs/rocm-invalid/amdgcn/bitcode/oclc_correctly_rounded_sqrt_on.bc
 
b/clang/test/Driver/Inputs/rocm-invalid/amdgcn/bitcode/oclc_correctly_rounded_sqrt_on.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git 
a/clang/test/Driver/Inputs/rocm/amdgcn/bitcode-no-abi-ver/oclc_correctly_rounded_sqrt_off.bc
 
b/clang/test/Driver/Inputs/rocm/amdgcn/bitcode-no-abi-ver/oclc_correctly_rounded_sqrt_off.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git 
a/clang/test/Driver/Inputs/rocm/amdgcn/bitcode-no-abi-ver/oclc_correctly_rounded_sqrt_on.bc
 
b/clang/test/Driver/Inputs/rocm/amdgcn/bitcode-no-abi-ver/oclc_correctly_rounded_sqrt_on.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git 
a/clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc
 
b/clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git 
a/clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_correctly_rounded_sqrt_on.bc
 
b/clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_correctly_rounded_sqrt_on.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git 
a/clang/test/Driver/Inputs/rocm_resource_dir/lib/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc
 
b/clang/test/Driver/Inputs/rocm_resource_dir/lib/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git 
a/clang/test/Driver/Inputs/rocm_resource_dir/lib/amdgcn/bitcode/oclc_correctly_rounded_sqrt_on.bc
 
b/clang/test/Driver/Inputs/rocm_resource_dir/lib/amdgcn/bitcode/oclc_correctly_rounded_sqrt_on.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git 
a/clang/test/Driver/Inputs/rocm_resource_dir/lib64/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc
 
b/clang/test/Driver/Inputs/rocm_resource_dir/lib64/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git 
a/clang/test/Driver/Inputs/rocm_resource_dir/lib64/amdgcn/bitcode/oclc_correctly_rounded_sqrt_on.bc
 
b/clang/test/Driver/Inputs/rocm_resource_dir/lib64/amdgcn/bitcode/oclc_correctly_rounded_sqrt_on.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git a/clang/test/Driver/amdgpu-openmp-toolchain.c 
b/clang/test/Driver/amdgpu-openmp-toolchain.c
index 9203d9271711b..688faaec6e015 100644
--- a/clang/test/Driver/amdgpu-openmp-toolchain.c
+++ b/clang/test/Driver/amdgpu-openmp-toolchain.c
@@ -54,12 +54,12 @@
 // RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx803 
\
 // RUN:   --no-offloadlib --offloadlib 
--rocm-device-lib-path=%S/Inputs/rocm/amdgcn/bitcode %s  2>&1 | \
 // RUN: FileCheck %s --check-prefix=CHECK-LIB-DEVICE
-// CHECK-LIB-DEVICE: "-cc1" 
{{.*}}ocml.bc"{{.*}}oclc_unsafe_math_off.bc"{{.*}}oclc_finite_only_off.bc"{{.*}}oclc_wavefrontsize64_on.bc"{{.*}}oclc_isa_version_803.bc"
+// CHECK-LIB-DEVICE: "-cc1" 
{{.*}}ocml.bc"{{.*}}oclc_unsafe_math_off.bc"{{.*}}oclc_finite_only_off.bc"{{.*}}oclc_correctly_rounded_sqrt_on.bc"{{.*}}oclc_wavefrontsize64_on.bc"{{.*}}oclc_isa_version_803.bc"
 
 // RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx803 
-nogpulib \
 // RUN:   --offloadlib --no-offloadlib 
--rocm-device-lib-path=%S/Inputs/rocm/amdgcn/bitcode %s  2>&1 | \
 // RUN: FileCheck %s --check-prefix=CHECK-LIB-DEVICE-NOGPULIB
-// CHECK-LIB-DEVICE-NOGPULIB-NOT: "-cc1" 
{{.*}}ocml.bc"{{.*}}oclc_unsafe_math_off.bc"{{.*}}oclc_finite_only_off.bc"{{.*}}oclc_wavefrontsize64_on.bc"{{.*}}oclc_isa_version_803.bc"
+// CHECK-LIB-DEVICE-NOGPULIB-NOT: "-cc1" 
{{.*}}ocml.bc"{{.*}}oclc_unsafe_math_off.bc"{{.*}}oclc_finite_only_off.bc"{{.*}}oclc_correctly_rounded_sqrt_on.bc"{{.*}}oclc_wavefrontsize64_on.bc"{{.*}}oclc_isa_version_803.bc"
 
 // RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp 
--offload-arch=gfx90a:sramecc-:xnack+ \
 // RUN:   -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-TARGET-ID

diff  --git a/clang/test/Driver/hip-device-libs.hip 
b/clang/test/Driver/hip-device-libs.hip
index 77d0bca4565dd..b3829114138cb 100644
--- a/clang/test/Driver/hip-device-libs.hip
+++ b/clang/test/Driver/hip-device-libs.hip
@@ -215,21 +215,26 @@
 
 // ALL-SAME: "-mlink-builtin-bitcode" 
"[[DEVICELIB_DIR]]oclc_unsafe_math_off.bc"
 // ALL-SAME: "-mlink-builtin-bitcode" 
"[[DEVICELIB_DIR]]oclc_finite_only_off.bc"
+// ALL-SAME: "-mlink-builtin-bitcode" 
"[[DEVICELIB_DIR]]oclc_correctly_rounded_sqrt_on.bc"
 // ALL-SAME: "-mlink-builtin-bitcode" 
"[[DEVICELIB_DIR]]oclc_wavefrontsize64_on.bc"
 // ALL-SAME: "-mlink-builtin-bitcode" 
"[[DEVICELIB_DIR]]oclc_isa_version_{{[0-9]+}}.bc"
 // INST-SAME: "-mlink-builtin-bitcode" "{{.*}}instrument.bc"
 
 // FAST: "-mlink-builtin-bitcode" "{{.*}}oclc_unsafe_math_on.bc"
 // FAST-SAME: "-mlink-builtin-bitcode" "{{.*}}oclc_finite_only_on.bc"
+// FAST-SAME: "-mlink-builtin-bitcode" 
"{{.*}}oclc_correctly_rounded_sqrt_on.bc"
 
 // FINITE: "-mlink-builtin-bitcode" "{{.*}}oclc_unsafe_math_off.bc"
 // FINITE-SAME: "-mlink-builtin-bitcode" "{{.*}}oclc_finite_only_on.bc"
+// FINITE-SAME: "-mlink-builtin-bitcode" 
"{{.*}}oclc_correctly_rounded_sqrt_on.bc"
 
 // UNSAFE: "-mlink-builtin-bitcode" "{{.*}}oclc_unsafe_math_on.bc"
 // UNSAFE-SAME: "-mlink-builtin-bitcode" "{{.*}}oclc_finite_only_off.bc"
+// UNSAFE-SAME: "-mlink-builtin-bitcode" 
"{{.*}}oclc_correctly_rounded_sqrt_on.bc"
 
 // DIVSQRT: "-mlink-builtin-bitcode" "{{.*}}oclc_unsafe_math_off.bc"
 // DIVSQRT-SAME: "-mlink-builtin-bitcode" "{{.*}}oclc_finite_only_off.bc"
+// DIVSQRT-SAME: "-mlink-builtin-bitcode" 
"{{.*}}oclc_correctly_rounded_sqrt_off.bc"
 
 // ABI4-NOT: error:
 // ABI4: "-mlink-builtin-bitcode" "{{.*}}oclc_abi_version_400.bc"

diff  --git a/clang/test/Driver/rocm-device-libs.cl 
b/clang/test/Driver/rocm-device-libs.cl
index 4741862be266e..e77a6a07315ad 100644
--- a/clang/test/Driver/rocm-device-libs.cl
+++ b/clang/test/Driver/rocm-device-libs.cl
@@ -165,22 +165,27 @@
 
 // COMMON-DEFAULT-SAME: "-mlink-builtin-bitcode" 
"{{.*}}/amdgcn/bitcode/oclc_unsafe_math_off.bc"
 // COMMON-DEFAULT-SAME: "-mlink-builtin-bitcode" 
"{{.*}}/amdgcn/bitcode/oclc_finite_only_off.bc"
+// COMMON-DEFAULT-SAME: "-mlink-builtin-bitcode" 
"{{.*}}/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc"
 
 
 // COMMON-FINITE-ONLY-SAME: "-mlink-builtin-bitcode" 
"{{.*}}/amdgcn/bitcode/oclc_unsafe_math_off.bc"
 // COMMON-FINITE-ONLY-SAME: "-mlink-builtin-bitcode" 
"{{.*}}/amdgcn/bitcode/oclc_finite_only_on.bc"
+// COMMON-FINITE-ONLY-SAME: "-mlink-builtin-bitcode" 
"{{.*}}/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc"
 
 
 // COMMON-CORRECT-SQRT-SAME: "-mlink-builtin-bitcode" 
"{{.*}}/amdgcn/bitcode/oclc_unsafe_math_off.bc"
 // COMMON-CORRECT-SQRT-SAME: "-mlink-builtin-bitcode" 
"{{.*}}/amdgcn/bitcode/oclc_finite_only_off.bc"
+// COMMON-CORRECT-SQRT-SAME: "-mlink-builtin-bitcode" 
"{{.*}}/amdgcn/bitcode/oclc_correctly_rounded_sqrt_on.bc"
 
 
 // COMMON-FAST-RELAXED-SAME: "-mlink-builtin-bitcode" 
"{{.*}}/amdgcn/bitcode/oclc_unsafe_math_on.bc"
 // COMMON-FAST-RELAXED-SAME: "-mlink-builtin-bitcode" 
"{{.*}}/amdgcn/bitcode/oclc_finite_only_on.bc"
+// COMMON-FAST-RELAXED-SAME: "-mlink-builtin-bitcode" 
"{{.*}}/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc"
 
 
 // COMMON-UNSAFE-MATH-SAME: "-mlink-builtin-bitcode" 
"{{.*}}/amdgcn/bitcode/oclc_unsafe_math_on.bc"
 // COMMON-UNSAFE-MATH-SAME: "-mlink-builtin-bitcode" 
"{{.*}}/amdgcn/bitcode/oclc_finite_only_off.bc"
+// COMMON-UNSAFE-MATH-SAME: "-mlink-builtin-bitcode" 
"{{.*}}/amdgcn/bitcode/oclc_correctly_rounded_sqrt_off.bc"
 
 // ASAN-SAME: "-fsanitize=address"
 


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to