[all-commits] [llvm/llvm-project] 46ee7f: [libclc] Avoid out-of-range float-to-int. (#145698)

Harald van Dijk via All-commits all-commits at lists.llvm.org
Wed Jun 25 08:37:28 PDT 2025


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 46ee7f1908f467d8feb5617e097c88be1401296c
      https://github.com/llvm/llvm-project/commit/46ee7f1908f467d8feb5617e097c88be1401296c
  Author: Harald van Dijk <harald.vandijk at codeplay.com>
  Date:   2025-06-25 (Wed, 25 Jun 2025)

  Changed paths:
    M libclc/clc/lib/generic/math/clc_pow.inc
    M libclc/clc/lib/generic/math/clc_pown.inc
    M libclc/clc/lib/generic/math/clc_powr.inc
    M libclc/clc/lib/generic/math/clc_rootn.inc

  Log Message:
  -----------
  [libclc] Avoid out-of-range float-to-int. (#145698)

For a kernel such as

    kernel void foo(__global double3 *z) {
      double3 x = {0.6631661088,0.6612268107,0.1513627528};
      int3 y = {-1980459213,-660855407,615708204};
      *z = pown(x, y);
    }

we were not storing anything to z, because the implementation of pown
relied on an floating-point-to-integer conversion where the
floating-point value was outside of the integer's range. Although in
LLVM IR we permit that operation so long as we end up ignoring its
result -- that is the general rule for poison -- one thing we are not
permitted to do is have conditional branches that depend on it, and
through the call to __clc_ldexp, we did have that.

To fix this, rather than changing expv at the end to INFINITY/0, we can
change v at the start to values that we know will produce INFINITY/0
without performing such out-of-range conversions.

Tested with

    clang --target=nvptx64 -S -O3 -o - test.cl \
      -Xclang -mlink-builtin-bitcode \
      -Xclang runtimes/runtimes-bins/libclc/nvptx64--.bc

A grep showed that this exact same code existed in three more places, so
I changed it there too, though I did not do a broader search for other
similar code that potentially has the same problem.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list