Johannes Doerfert | f85ae05 | 2020-03-27 20:36:30 -0500 | [diff] [blame] | 1 | // REQUIRES: nvptx-registered-target |
| 2 | // RUN: %clang_cc1 -x c -internal-isystem %S/Inputs/include -fopenmp -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o %t-ppc-host.bc |
| 3 | // RUN: %clang_cc1 -x c -include __clang_openmp_device_functions.h -internal-isystem %S/../../lib/Headers/openmp_wrappers -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-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck %s --check-prefix=SLOW |
Melanie Blower | f5360d4 | 2020-05-01 10:32:06 -0700 | [diff] [blame] | 4 | // RUN: %clang_cc1 -x c -internal-isystem %S/Inputs/include -fopenmp -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o %t-ppc-host.bc -ffast-math -ffp-contract=fast |
| 5 | // RUN: %clang_cc1 -x c -include __clang_openmp_device_functions.h -internal-isystem %S/../../lib/Headers/openmp_wrappers -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-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - -ffast-math -ffp-contract=fast | FileCheck %s --check-prefix=FAST |
Johannes Doerfert | f85ae05 | 2020-03-27 20:36:30 -0500 | [diff] [blame] | 6 | // expected-no-diagnostics |
| 7 | |
| 8 | #include <math.h> |
| 9 | |
Mariya Podchishchaeva | cf6cc66 | 2020-05-29 15:41:37 +0300 | [diff] [blame] | 10 | double math(float f, double d) { |
Johannes Doerfert | f85ae05 | 2020-03-27 20:36:30 -0500 | [diff] [blame] | 11 | double r = 0; |
| 12 | // SLOW: call float @__nv_sinf(float |
| 13 | // FAST: call fast float @__nv_fast_sinf(float |
| 14 | r += sinf(f); |
| 15 | // SLOW: call double @__nv_sin(double |
| 16 | // FAST: call fast double @__nv_sin(double |
| 17 | r += sin(d); |
| 18 | return r; |
| 19 | } |
| 20 | |
| 21 | long double foo(float f, double d, long double ld) { |
| 22 | double r = ld; |
Mariya Podchishchaeva | cf6cc66 | 2020-05-29 15:41:37 +0300 | [diff] [blame] | 23 | r += math(f, d); |
Johannes Doerfert | f85ae05 | 2020-03-27 20:36:30 -0500 | [diff] [blame] | 24 | #pragma omp target map(r) |
Mariya Podchishchaeva | cf6cc66 | 2020-05-29 15:41:37 +0300 | [diff] [blame] | 25 | { r += math(f, d); } |
Johannes Doerfert | f85ae05 | 2020-03-27 20:36:30 -0500 | [diff] [blame] | 26 | return r; |
| 27 | } |