blob: d1bc2aafc7b4b953cdf7153a371c926529c0d69c [file] [log] [blame]
Alexey Bataevc30dd2d2015-06-18 12:14:09 +00001// RUN: %clang_cc1 -verify -fopenmp -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s
2// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s
3// RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s
Douglas Katzman3459ce22015-10-08 04:24:12 +00004// RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -fopenmp -fexceptions -fcxx-exceptions -debug-info-kind=line-tables-only -x c++ -emit-llvm %s -o - | FileCheck %s --check-prefix=TERM_DEBUG
Alexey Bataevc30dd2d2015-06-18 12:14:09 +00005// expected-no-diagnostics
Adrian Prantlbc068582015-07-08 01:00:30 +00006// REQUIRES: x86-registered-target
Alexey Bataevc30dd2d2015-06-18 12:14:09 +00007#ifndef HEADER
8#define HEADER
9
10// CHECK: [[IDENT_T_TY:%.+]] = type { i32, i32, i32, i32, i8* }
11
David Blaikieea3e51d2015-06-29 17:29:50 +000012// CHECK: define {{.*}}void [[FOO:@.+]]()
Alexey Bataevc30dd2d2015-06-18 12:14:09 +000013
14void foo() {}
15
16// CHECK-LABEL: @main
17// TERM_DEBUG-LABEL: @main
18int main() {
19// CHECK: [[A_ADDR:%.+]] = alloca i8
20 char a;
21
David Blaikieea3e51d2015-06-29 17:29:50 +000022// CHECK: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEFAULT_LOC:@.+]])
23// CHECK: call {{.*}}void @__kmpc_taskgroup([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
Alexey Bataevc30dd2d2015-06-18 12:14:09 +000024// CHECK-NEXT: store i8 2, i8* [[A_ADDR]]
David Blaikieea3e51d2015-06-29 17:29:50 +000025// CHECK-NEXT: call {{.*}}void @__kmpc_end_taskgroup([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
Alexey Bataevc30dd2d2015-06-18 12:14:09 +000026#pragma omp taskgroup
27 a = 2;
David Blaikieea3e51d2015-06-29 17:29:50 +000028// CHECK: call {{.*}}void @__kmpc_taskgroup([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
29// CHECK-NEXT: invoke {{.*}}void [[FOO]]()
30// CHECK: call {{.*}}void @__kmpc_end_taskgroup([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
Alexey Bataevc30dd2d2015-06-18 12:14:09 +000031#pragma omp taskgroup
32 foo();
David Blaikieea3e51d2015-06-29 17:29:50 +000033// CHECK-NOT: call {{.*}}void @__kmpc_taskgroup
34// CHECK-NOT: call {{.*}}void @__kmpc_end_taskgroup
Alexey Bataevc30dd2d2015-06-18 12:14:09 +000035 return a;
36}
37
38// CHECK-LABEL: parallel_taskgroup
39// TERM_DEBUG-LABEL: parallel_taskgroup
40void parallel_taskgroup() {
41#pragma omp parallel
42#pragma omp taskgroup
43 // TERM_DEBUG-NOT: __kmpc_global_thread_num
44 // TERM_DEBUG: call void @__kmpc_taskgroup({{.+}}), !dbg [[DBG_LOC_START:![0-9]+]]
45 // TERM_DEBUG: invoke void {{.*}}foo{{.*}}()
46 // TERM_DEBUG: unwind label %[[TERM_LPAD:.+]],
47 // TERM_DEBUG-NOT: __kmpc_global_thread_num
48 // TERM_DEBUG: call void @__kmpc_end_taskgroup({{.+}}), !dbg [[DBG_LOC_END:![0-9]+]]
49 // TERM_DEBUG: [[TERM_LPAD]]
50 // TERM_DEBUG: call void @__clang_call_terminate
51 // TERM_DEBUG: unreachable
52 foo();
53}
54// TERM_DEBUG-DAG: [[DBG_LOC_START]] = !DILocation(line: [[@LINE-12]],
55// TERM_DEBUG-DAG: [[DBG_LOC_END]] = !DILocation(line: [[@LINE-3]],
56#endif