[all-commits] [llvm/llvm-project] de0df6: [CUDA][HIP] Fix overloading resolution in global v...

Yaxun (Sam) Liu via All-commits all-commits at lists.llvm.org
Tue Aug 29 07:17:56 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: de0df639724b10001ea9a74539381ea494296be9
      https://github.com/llvm/llvm-project/commit/de0df639724b10001ea9a74539381ea494296be9
  Author: Yaxun (Sam) Liu <yaxun.liu at amd.com>
  Date:   2023-08-29 (Tue, 29 Aug 2023)

  Changed paths:
    M clang/include/clang/Sema/Sema.h
    M clang/lib/Parse/ParseDecl.cpp
    M clang/lib/Sema/SemaCUDA.cpp
    M clang/lib/Sema/SemaDeclAttr.cpp
    M clang/lib/Sema/SemaOverload.cpp
    M clang/lib/Sema/SemaType.cpp
    A clang/test/CodeGenCUDA/global-initializers.cu
    M clang/test/SemaCUDA/amdgpu-windows-vectorcall.cu
    M clang/test/SemaCUDA/function-overload.cu
    R clang/test/SemaCUDA/global-initializers-host.cu
    A clang/test/SemaCUDA/global-initializers.cu

  Log Message:
  -----------
  [CUDA][HIP] Fix overloading resolution in global variable initializer

Currently, clang does not resolve certain overloaded functions correctly in the initializer
of global variables, e.g.

template<typename T1, typename U>
T1 mypow(T1, U);

__attribute__((device)) double mypow(double, int);

double t_extent = mypow(1.0, 2);

In the above example, mypow is supposed to resolve to the host version
but clang resolves it to the device version instead, and emits an error
(https://godbolt.org/z/17xxzaa67).

However, if the variable is assigned in a host function, there is no error.
The discrepancy in overloading resolution inside and outside of
a function is due to clang not accounting for the host/device target
when resolving functions called in the initializer of a global variable.

This patch introduces a global host/device target context for CUDA/HIP
for functions called outside of functions. For global variable initialization,
it is determined by the host/device attribute of the variable. For other
situations, a default value of host_device is sufficient.

Reviewed by: Artem Belevich

Differential Revision: https://reviews.llvm.org/D158247

Fixes: SWDEV-416731




More information about the All-commits mailing list