| // This testcase checks emission of debug info for threadprivate variables |
| // present in any clause of OpenMP construct. |
| |
| // 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 |
| |
| // CHECK: define internal void @main.omp_outlined_debug__( |
| // CHECK: call void @llvm.dbg.declare(metadata ptr %.global_tid..addr, |
| // CHECK: call void @llvm.dbg.declare(metadata ptr %.bound_tid..addr, |
| // CHECK: call void @llvm.dbg.declare(metadata ptr %nt.addr |
| // CHECK: store ptr %gbl_dynamic_int, ptr %gbl_dynamic_int.addr, align 8 |
| // CHECK-NOT: call void @llvm.dbg.declare(metadata ptr %gbl_dynamic_int.addr |
| // CHECK-NOT: call void @llvm.dbg.declare(metadata ptr %gbl_static_int.addr |
| |
| extern int printf(const char *, ...); |
| extern void omp_set_num_threads(int); |
| extern int omp_get_num_threads(void); |
| extern int omp_get_thread_num(void); |
| |
| int gbl_dynamic_int; |
| __thread int gbl_static_int; |
| |
| #pragma omp threadprivate(gbl_dynamic_int) |
| |
| int main() { |
| int nt = 0; |
| int offset = 10; |
| gbl_dynamic_int = 55; |
| gbl_static_int = 77; |
| |
| omp_set_num_threads(4); |
| #pragma omp parallel copyin(gbl_dynamic_int, gbl_static_int) |
| { |
| int data; |
| int tid; |
| nt = omp_get_num_threads(); |
| tid = omp_get_thread_num(); |
| data = gbl_dynamic_int + gbl_static_int; |
| gbl_dynamic_int += 10; |
| gbl_static_int += 20; |
| #pragma omp barrier |
| if (tid == 0) |
| printf("In parallel region total threads = %d, thread id = %d data=%d gbl_dyn_addr = %p, gbl_static_addr = %p\n", |
| nt, tid, data, &gbl_dynamic_int, &gbl_static_int); |
| if (tid == 1) |
| printf("In parallel region total threads = %d, thread id = %d data=%d gbl_dyn_addr = %p, gbl_static_addr = %p\n", |
| nt, tid, data, &gbl_dynamic_int, &gbl_static_int); |
| if (tid == 2) |
| printf("In parallel region total threads = %d, thread id = %d data=%d gbl_dyn_addr = %p, gbl_static_addr = %p\n", |
| nt, tid, data, &gbl_dynamic_int, &gbl_static_int); |
| if (tid == 3) |
| printf("In parallel region total threads = %d, thread id = %d data=%d gbl_dyn_addr = %p, gbl_static_addr = %p\n", |
| nt, tid, data, &gbl_dynamic_int, &gbl_static_int); |
| } |
| |
| return 0; |
| } |