xref: /llvm-project/clang/test/OpenMP/outlined_artificial.c (revision 782c59a4eef0bca8546b0cfbb1e48a9fcd044c93)
1 // This testcase checks emission of DIFlagArtificial flag for outlined
2 // subroutines generated by compiler.
3 
4 // REQUIRES: x86-registered-target
5 
6 // RUN: %clang_cc1 -debug-info-kind=constructor -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s
7 // expected-no-diagnostics
8 
9 #if defined(_WIN32)
10 #define __KAI_KMPC_CONVENTION __cdecl
11 #else
12 #define __KAI_KMPC_CONVENTION
13 #endif
14 
15 extern int printf(const char *, ...);
16 extern void __KAI_KMPC_CONVENTION omp_set_num_threads(int);
17 extern int __KAI_KMPC_CONVENTION omp_get_thread_num(void);
18 
19 #define N 10
20 
21 float f[10];
foo_simd(int low,int up)22 void foo_simd(int low, int up) {
23   for (int i = low; i < up; ++i) {
24     f[i] = 0.0;
25 #pragma omp ordered simd
26     f[i] = 1.0;
27   }
28 }
29 
main()30 int main() {
31   int arr[10];
32   int i;
33   omp_set_num_threads(2);
34 #pragma omp parallel
35 #pragma omp single
36 #pragma omp taskloop num_tasks(10)
37   for (i = 0; i < N; i++) {
38     arr[i] = i * i;
39   }
40 
41   for (int j = 0; j < N; j++) {
42     printf("%d\n", arr[j]);
43   }
44   return 0;
45 }
46 
47 // foo_simd is not artificial.
48 // CHECK-DAG: !DISubprogram(name: "foo_simd"
49 // CHECK-DAG-SAME: flags: DIFlagPrototyped,
50 
51 // CHECK-DAG: !DISubprogram(name: "__captured_stmt_debug__"
52 // CHECK-DAG-SAME: flags: DIFlagArtificial
53 
54 // CHECK-DAG: !DISubprogram(name: "__captured_stmt"
55 // CHECK-DAG-SAME: flags: DIFlagArtificial
56 
57 // CHECK-DAG: !DISubprogram(name: "main.omp_outlined_debug__"
58 // CHECK-DAG-SAME: flags: DIFlagArtificial
59 
60 // CHECK-DAG: !DISubprogram(linkageName: ".omp_task_entry."
61 // CHECK-DAG-SAME: flags: DIFlagArtificial
62 
63 // CHECK-DAG: !DISubprogram(name: ".omp_outlined."
64 // CHECK-DAG-SAME: flags: DIFlagArtificial
65 
66 // CHECK-DAG: !DISubprogram(name: "main.omp_outlined"
67 // CHECK-DAG-SAME: flags: DIFlagArtificial
68