brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 9be0828 Raw
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