xref: /aosp_15_r20/external/clang/test/Preprocessor/openmp-macro-expansion.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN:   %clang_cc1 -fopenmp -E -o - %s 2>&1 | FileCheck %s
2*67e74705SXin Li 
3*67e74705SXin Li // This is to make sure the pragma name is not expanded!
4*67e74705SXin Li #define omp (0xDEADBEEF)
5*67e74705SXin Li 
6*67e74705SXin Li #define N 2
7*67e74705SXin Li #define M 1
8*67e74705SXin Li #define E N>
9*67e74705SXin Li 
10*67e74705SXin Li #define map_to_be_expanded(x) map(tofrom:x)
11*67e74705SXin Li #define sched_to_be_expanded(x,s) schedule(x,s)
12*67e74705SXin Li #define reda_to_be_expanded(x) reduction(+:x)
13*67e74705SXin Li #define redb_to_be_expanded(x,op) reduction(op:x)
14*67e74705SXin Li 
foo(int * a,int * b)15*67e74705SXin Li void foo(int *a, int *b) {
16*67e74705SXin Li   //CHECK: omp target map(a[0:2]) map(tofrom:b[0:2*1])
17*67e74705SXin Li   #pragma omp target map(a[0:N]) map_to_be_expanded(b[0:2*M])
18*67e74705SXin Li   {
19*67e74705SXin Li     int reda;
20*67e74705SXin Li     int redb;
21*67e74705SXin Li     //CHECK: omp parallel for schedule(static,2> >1) reduction(+:reda) reduction(*:redb)
22*67e74705SXin Li     #pragma omp parallel for sched_to_be_expanded(static, E>1) \
23*67e74705SXin Li         reda_to_be_expanded(reda) redb_to_be_expanded(redb,*)
24*67e74705SXin Li     for (int i = 0; i < N; ++i) {
25*67e74705SXin Li       reda += a[i];
26*67e74705SXin Li       redb += b[i];
27*67e74705SXin Li     }
28*67e74705SXin Li     a[0] = reda;
29*67e74705SXin Li     b[0] = redb;
30*67e74705SXin Li   }
31*67e74705SXin Li }
32