Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[OPENMP] Codegen for 'omp master' directive
Patch adds 2 library functions to OpenMPRuntime class - int32 kmpc_master(ident_t *, int32 gtid) and void kmpc_end_master(ident_t *, int32 gtid); For 'omp master' directive the next code is generated: if (__kmpc_master(loc, gtid)) { <Associated structured block>; __kmpc_end_master(log, gtid); } Differential Revision: http://reviews.llvm.org/D6473 llvm-svn: 223342
- Loading branch information
1 parent
0152732
commit 8d69065
Showing
4 changed files
with
132 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
// RUN: %clang_cc1 -verify -fopenmp=libiomp5 -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s | ||
// RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s | ||
// RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s | ||
// expected-no-diagnostics | ||
|
||
#ifndef HEADER | ||
#define HEADER | ||
|
||
// CHECK: [[IDENT_T_TY:%.+]] = type { i32, i32, i32, i32, i8* } | ||
|
||
// CHECK: define void [[FOO:@.+]]() | ||
|
||
void foo() {} | ||
|
||
// CHECK-LABEL: @main | ||
int main() { | ||
// CHECK: [[A_ADDR:%.+]] = alloca i8 | ||
char a; | ||
|
||
// CHECK: [[GTID:%.+]] = call i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEFAULT_LOC:@.+]]) | ||
// CHECK: [[RES:%.+]] = call i32 @__kmpc_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]]) | ||
// CHECK-NEXT: [[IS_MASTER:%.+]] = icmp ne i32 [[RES]], 0 | ||
// CHECK-NEXT: br i1 [[IS_MASTER]], label {{%?}}[[THEN:.+]], label {{%?}}[[EXIT:.+]] | ||
// CHECK: [[THEN]] | ||
// CHECK-NEXT: store i8 2, i8* [[A_ADDR]] | ||
// CHECK-NEXT: call void @__kmpc_end_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]]) | ||
// CHECK-NEXT: br label {{%?}}[[EXIT]] | ||
// CHECK: [[EXIT]] | ||
#pragma omp master | ||
a = 2; | ||
// CHECK: [[RES:%.+]] = call i32 @__kmpc_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]]) | ||
// CHECK-NEXT: [[IS_MASTER:%.+]] = icmp ne i32 [[RES]], 0 | ||
// CHECK-NEXT: br i1 [[IS_MASTER]], label {{%?}}[[THEN:.+]], label {{%?}}[[EXIT:.+]] | ||
// CHECK: [[THEN]] | ||
// CHECK-NEXT: call void [[FOO]]() | ||
// CHECK-NEXT: call void @__kmpc_end_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]]) | ||
// CHECK-NEXT: br label {{%?}}[[EXIT]] | ||
// CHECK: [[EXIT]] | ||
#pragma omp master | ||
foo(); | ||
// CHECK-NOT: call i32 @__kmpc_master | ||
// CHECK-NOT: call void @__kmpc_end_master | ||
return a; | ||
} | ||
|
||
#endif |