// This testcase checks emission of DIFlagArtificial flag for outlined // subroutines generated by compiler. // REQUIRES: x86-registered-target // RUN: %clang_cc1 -debug-info-kind=constructor -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s // expected-no-diagnostics #if defined(_WIN32) #define __KAI_KMPC_CONVENTION __cdecl #else #define __KAI_KMPC_CONVENTION #endif extern int printf(const char *, ...); extern void __KAI_KMPC_CONVENTION omp_set_num_threads(int); extern int __KAI_KMPC_CONVENTION omp_get_thread_num(void); #define N 10 float f[10]; void foo_simd(int low, int up) { for (int i = low; i < up; ++i) { f[i] = 0.0; #pragma omp ordered simd f[i] = 1.0; } } int main() { int arr[10]; int i; omp_set_num_threads(2); #pragma omp parallel #pragma omp single #pragma omp taskloop num_tasks(10) for (i = 0; i < N; i++) { arr[i] = i * i; } for (int j = 0; j < N; j++) { printf("%d\n", arr[j]); } return 0; } // foo_simd is not artificial. // CHECK-DAG: !DISubprogram(name: "foo_simd" // CHECK-DAG-SAME: flags: DIFlagPrototyped, // CHECK-DAG: !DISubprogram(name: "__captured_stmt_debug__" // CHECK-DAG-SAME: flags: DIFlagArtificial // CHECK-DAG: !DISubprogram(name: "__captured_stmt" // CHECK-DAG-SAME: flags: DIFlagArtificial // CHECK-DAG: !DISubprogram(name: "main.omp_outlined_debug__" // CHECK-DAG-SAME: flags: DIFlagArtificial // CHECK-DAG: !DISubprogram(linkageName: ".omp_task_entry." // CHECK-DAG-SAME: flags: DIFlagArtificial // CHECK-DAG: !DISubprogram(name: ".omp_outlined." // CHECK-DAG-SAME: flags: DIFlagArtificial // CHECK-DAG: !DISubprogram(name: "main.omp_outlined" // CHECK-DAG-SAME: flags: DIFlagArtificial