64 lines · cpp
1// REQUIRES: nvptx-registered-target2// RUN: %clang_cc1 -internal-isystem %S/Inputs/include -fopenmp -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o %t-ppc-host.bc3// RUN: %clang_cc1 -internal-isystem %S/../../lib/Headers/openmp_wrappers -include __clang_openmp_device_functions.h -internal-isystem %S/Inputs/include -fopenmp -triple nvptx64-nvidia-cuda -aux-triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck %s4 5#include <cmath>6 7// 6 calls to sin/cos(f), all translated to __nv_sin/__nv_cos calls:8 9// CHECK-NOT: _Z.sin10// CHECK-NOT: _Z.cos11// CHECK: call noundef double @__nv_sin(double12// CHECK-NOT: _Z.sin13// CHECK-NOT: _Z.cos14// CHECK: call noundef float @__nv_sinf(float15// CHECK-NOT: _Z.sin16// CHECK-NOT: _Z.cos17// CHECK: call noundef double @__nv_sin(double18// CHECK-NOT: _Z.sin19// CHECK-NOT: _Z.cos20// CHECK: call noundef double @__nv_cos(double21// CHECK-NOT: _Z.sin22// CHECK-NOT: _Z.cos23// CHECK: call noundef float @__nv_sinf(float24// CHECK-NOT: _Z.sin25// CHECK-NOT: _Z.cos26// CHECK: call noundef float @__nv_cosf(float27// CHECK-NOT: _Z.sin28// CHECK-NOT: _Z.cos29 30template<typename T>31void test_sin_cos(T x)32{33 T res_sin, res_cos;34 35 #pragma omp target map(from: res_sin, res_cos)36 {37 res_sin = std::sin(x);38 res_cos = std::cos(x);39 }40}41 42int main()43{44 45#if !defined(C_ONLY)46 test_sin_cos<double>(0.0);47 test_sin_cos<float>(0.0);48#endif49 50 #pragma omp target51 {52 double res;53 res = sin(1.0);54 }55 56 #pragma omp target57 {58 float res;59 res = sinf(1.0f);60 }61 62 return 0;63}64