1d8e0ae9aSErich Keane // RUN: %clang_cc1 -triple spir64-unknown-unknown-sycldevice -aux-triple x86_64-pc-windows-msvc -fsycl-is-device -disable-llvm-passes -fsycl-is-device -emit-llvm %s -o - | FileCheck %s 2d8e0ae9aSErich Keane // RUN: %clang_cc1 -triple x86_64-pc-windows-msvc -fsycl-is-device -disable-llvm-passes -fsycl-is-device -emit-llvm %s -o - | FileCheck %s 3d8e0ae9aSErich Keane 4d8e0ae9aSErich Keane 5d8e0ae9aSErich Keane template<typename KN, typename Func> kernel(Func F)6d8e0ae9aSErich Keane__attribute__((sycl_kernel)) void kernel(Func F){ 7d8e0ae9aSErich Keane F(); 8d8e0ae9aSErich Keane } 9d8e0ae9aSErich Keane 10d8e0ae9aSErich Keane template<typename KN, typename Func> kernel2(Func F)11d8e0ae9aSErich Keane__attribute__((sycl_kernel)) void kernel2(Func F){ 12d8e0ae9aSErich Keane F(1); 13d8e0ae9aSErich Keane } 14d8e0ae9aSErich Keane 15d8e0ae9aSErich Keane template<typename KN, typename Func> kernel3(Func F)16d8e0ae9aSErich Keane__attribute__((sycl_kernel)) void kernel3(Func F){ 17d8e0ae9aSErich Keane F(1.1); 18d8e0ae9aSErich Keane } 19d8e0ae9aSErich Keane main()20d8e0ae9aSErich Keaneint main() { 21d8e0ae9aSErich Keane int i; 22d8e0ae9aSErich Keane double d; 23d8e0ae9aSErich Keane float f; 24d8e0ae9aSErich Keane auto lambda1 = [](){}; 25d8e0ae9aSErich Keane auto lambda2 = [](int){}; 26d8e0ae9aSErich Keane auto lambda3 = [](double){}; 27d8e0ae9aSErich Keane 28d8e0ae9aSErich Keane kernel<class K1>(lambda1); 29d8e0ae9aSErich Keane kernel2<class K2>(lambda2); 30d8e0ae9aSErich Keane kernel3<class K3>(lambda3); 31d8e0ae9aSErich Keane 32d8e0ae9aSErich Keane // Ensure the kernels are named the same between the device and host 33d8e0ae9aSErich Keane // invocations. 34d8e0ae9aSErich Keane (void)__builtin_sycl_unique_stable_name(decltype(lambda1)); 35d8e0ae9aSErich Keane (void)__builtin_sycl_unique_stable_name(decltype(lambda2)); 36d8e0ae9aSErich Keane (void)__builtin_sycl_unique_stable_name(decltype(lambda3)); 37d8e0ae9aSErich Keane 38d8e0ae9aSErich Keane // Make sure the following 3 are the same between the host and device compile. 39d8e0ae9aSErich Keane // Note that these are NOT the same value as eachother, they differ by the 40d8e0ae9aSErich Keane // signature. 41*9324cc2cSErich Keane // CHECK: private unnamed_addr constant [17 x i8] c"_ZTSZ4mainEUlvE_\00" 42*9324cc2cSErich Keane // CHECK: private unnamed_addr constant [17 x i8] c"_ZTSZ4mainEUliE_\00" 43*9324cc2cSErich Keane // CHECK: private unnamed_addr constant [17 x i8] c"_ZTSZ4mainEUldE_\00" 44d8e0ae9aSErich Keane } 45