| // REQUIRES: aarch64-registered-target |
| // -fopemp and -fopenmp-simd behavior are expected to be the same |
| |
| // RUN: %clang_cc1 -triple aarch64-linux-gnu -target-feature +sve \ |
| // RUN: -fopenmp -x c -emit-llvm %s -o - -femit-all-decls | FileCheck %s |
| |
| // RUN: %clang_cc1 -triple aarch64-linux-gnu -target-feature +sve \ |
| // RUN: -fopenmp-simd -x c -emit-llvm %s -o - -femit-all-decls | FileCheck %s |
| |
| #pragma omp declare simd |
| #pragma omp declare simd notinbranch |
| #pragma omp declare simd simdlen(2) |
| #pragma omp declare simd simdlen(4) |
| #pragma omp declare simd simdlen(5) // not a multiple of 128-bits |
| #pragma omp declare simd simdlen(6) |
| #pragma omp declare simd simdlen(8) |
| #pragma omp declare simd simdlen(32) |
| #pragma omp declare simd simdlen(34) // requires more than 2048 bits |
| double foo(float x); |
| |
| // CHECK-DAG: "_ZGVsM2v_foo" "_ZGVsM32v_foo" "_ZGVsM4v_foo" "_ZGVsM6v_foo" "_ZGVsM8v_foo" "_ZGVsMxv_foo" |
| // CHECK-NOT: _ZGVsN |
| // CHECK-NOT: _ZGVsM5v_foo |
| // CHECK-NOT: _ZGVsM34v_foo |
| // CHECK-NOT: foo |
| |
| void foo_loop(double *x, float *y, int N) { |
| for (int i = 0; i < N; ++i) { |
| x[i] = foo(y[i]); |
| } |
| } |
| |
| // test integers |
| |
| #pragma omp declare simd notinbranch |
| char a01_fun(int x); |
| // CHECK-DAG: _ZGVsMxv_a01_fun |
| // CHECK-NOT: a01_fun |
| |
| static int *in; |
| static char *out; |
| void do_something() { |
| *out = a01_fun(*in); |
| } |