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)22void 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()30int 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