45 lines · c
1// REQUIRES: aarch64-registered-target2// -fopemp and -fopenmp-simd behavior are expected to be the same3 4// RUN: %clang_cc1 -triple aarch64-linux-gnu -target-feature +sve \5// RUN: -fopenmp -x c -emit-llvm %s -o - -femit-all-decls | FileCheck %s6 7// RUN: %clang_cc1 -triple aarch64-linux-gnu -target-feature +sve \8// RUN: -fopenmp-simd -x c -emit-llvm %s -o - -femit-all-decls | FileCheck %s9 10#pragma omp declare simd11#pragma omp declare simd notinbranch12#pragma omp declare simd simdlen(2)13#pragma omp declare simd simdlen(4)14#pragma omp declare simd simdlen(5) // not a multiple of 128-bits15#pragma omp declare simd simdlen(6)16#pragma omp declare simd simdlen(8)17#pragma omp declare simd simdlen(32)18#pragma omp declare simd simdlen(34) // requires more than 2048 bits19double foo(float x);20 21// CHECK-DAG: "_ZGVsM2v_foo" "_ZGVsM32v_foo" "_ZGVsM4v_foo" "_ZGVsM6v_foo" "_ZGVsM8v_foo" "_ZGVsMxv_foo"22// CHECK-NOT: _ZGVsN23// CHECK-NOT: _ZGVsM5v_foo24// CHECK-NOT: _ZGVsM34v_foo25// CHECK-NOT: foo26 27void foo_loop(double *x, float *y, int N) {28 for (int i = 0; i < N; ++i) {29 x[i] = foo(y[i]);30 }31}32 33 // test integers34 35#pragma omp declare simd notinbranch36char a01_fun(int x);37// CHECK-DAG: _ZGVsMxv_a01_fun38// CHECK-NOT: a01_fun39 40static int *in;41static char *out;42void do_something() {43 *out = a01_fun(*in);44}45