Skip to content

Commit

Permalink
[OpenMP] Replace Clang's OpenMP RTL Definitions with OMPKinds.def
Browse files Browse the repository at this point in the history
Summary: This changes Clang's generation of OpenMP runtime functions to use the types and functions defined in OpenMPKinds and OpenMPConstants. New OpenMP runtime function information should now be added to OMPKinds.def. This patch also changed the definitions of __kmpc_push_num_teams and __kmpc_copyprivate to match those found in the runtime.

Reviewers: jdoerfert

Reviewed By: jdoerfert

Subscribers: jfb, AndreyChurbanov, openmp-commits, fghanim, hiraditya, sstefan1, cfe-commits, llvm-commits

Tags: #openmp, #clang, #llvm

Differential Revision: https://reviews.llvm.org/D80222
  • Loading branch information
jhuber-ornl authored and jhuber6 committed Jun 1, 2020
1 parent 45fd3e4 commit 1a4fb2e
Show file tree
Hide file tree
Showing 18 changed files with 1,113 additions and 1,215 deletions.
1,324 changes: 204 additions & 1,120 deletions clang/lib/CodeGen/CGOpenMPRuntime.cpp

Large diffs are not rendered by default.

5 changes: 0 additions & 5 deletions clang/lib/CodeGen/CGOpenMPRuntime.h
Expand Up @@ -737,11 +737,6 @@ class CGOpenMPRuntime {
/// Returns pointer to kmpc_micro type.
llvm::Type *getKmpc_MicroPointerTy();

/// Returns specified OpenMP runtime function.
/// \param Function OpenMP runtime function.
/// \return Specified function.
llvm::FunctionCallee createRuntimeFunction(unsigned Function);

/// Returns __kmpc_for_static_init_* runtime function for the specified
/// size \a IVSize and sign \a IVSigned.
llvm::FunctionCallee createForStaticInitFunction(unsigned IVSize,
Expand Down
1 change: 0 additions & 1 deletion clang/test/OpenMP/barrier_codegen.cpp
Expand Up @@ -43,7 +43,6 @@ int main(int argc, char **argv) {
}

// CLANGCG: declare i32 @__kmpc_global_thread_num(%struct.ident_t*)
// CLANGCG-NOT: #
// IRBUILDER: ; Function Attrs: nounwind
// IRBUILDER-NEXT: declare i32 @__kmpc_global_thread_num(%struct.ident_t*) #
// IRBUILDER_OPT: ; Function Attrs: inaccessiblememonly nofree nosync nounwind readonly
Expand Down
4 changes: 2 additions & 2 deletions clang/test/OpenMP/nvptx_teams_codegen.cpp
Expand Up @@ -145,7 +145,7 @@ int main (int argc, char **argv) {

// CK2: define internal void [[OUTLINED]](
// CK2: store i{{[0-9]+}} 0, i{{[0-9]+}}* %
// CK2-NOT: {{.+}} = call i32 @__kmpc_push_num_teams(
// CK2-NOT: {{.+}} = call void @__kmpc_push_num_teams(
// CK2-NOT: call {{.*}}void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(

// CK2: define {{.*}}void @{{[^,]+}}(i{{[0-9]+}} [[A_IN:%.+]], i{{[0-9]+}} [[BP:%.+]], i{{[0-9]+}}** [[ARGC:%.+]])
Expand All @@ -169,7 +169,7 @@ int main (int argc, char **argv) {

// CK2: define internal void [[OUTLINED]](
// CK2: store i{{[0-9]+}}** null, i{{[0-9]+}}*** %
// CK2-NOT: {{.+}} = call i32 @__kmpc_push_num_teams(
// CK2-NOT: {{.+}} = call void @__kmpc_push_num_teams(
// CK2-NOT: call {{.*}}void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(

#endif // CK2
Expand Down
4 changes: 2 additions & 2 deletions clang/test/OpenMP/openmp_win_codegen.cpp
Expand Up @@ -61,9 +61,9 @@ int main() {
// CHECK-NEXT: call void @__kmpc_end_critical(%struct.ident_t* {{.*}}@0, i32 [[GID]],
// CHECK-NEXT: cleanupret from {{.*}} unwind label %[[CATCHTERM:[^ ]+]]
// CHECK: cleanuppad within none []
// CHECK-NEXT: call void @"?terminate@@YAXXZ"() #5 [ "funclet"(token %{{.*}}) ]
// CHECK-NEXT: call void @"?terminate@@YAXXZ"() #{{[0-9]+}} [ "funclet"(token %{{.*}}) ]
// CHECK-NEXT: unreachable
// CHECK: [[CATCHTERM]]
// CHECK-NEXT: cleanuppad within [[CATCHPAD]] []
// CHECK-NEXT: call void @"?terminate@@YAXXZ"() #5 [ "funclet"(token %{{.*}}) ]
// CHECK-NEXT: call void @"?terminate@@YAXXZ"() #{{[0-9]+}} [ "funclet"(token %{{.*}}) ]
// CHECK-NEXT: unreachable
Expand Up @@ -94,7 +94,7 @@ int target_teams_fun(int *g){
// CK1-64: [[TH_VAL:%.+]] = load i32, i32* [[TH_CONV]],
// CK1-32: [[TE_VAL:%.+]] = load i32, i32* [[TE_ADDR]],
// CK1-32: [[TH_VAL:%.+]] = load i32, i32* [[TH_ADDR]],
// CK1: {{%.+}} = call i32 @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK1: call void @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK1: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 2, {{.+}} @[[OUTL1:.+]] to {{.+}}, {{.+}}, {{.+}})
// CK1: ret void

Expand Down
Expand Up @@ -95,7 +95,7 @@ int target_teams_fun(int *g){
// CK1-64: [[TH_VAL:%.+]] = load i32, i32* [[TH_CONV]],
// CK1-32: [[TE_VAL:%.+]] = load i32, i32* [[TE_ADDR]],
// CK1-32: [[TH_VAL:%.+]] = load i32, i32* [[TH_ADDR]],
// CK1: {{%.+}} = call i32 @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK1: call void @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK1: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 3, {{.+}} @[[OUTL1:.+]] to {{.+}}, {{.+}}, {{.+}})
// CK1: ret void

Expand Down
27 changes: 6 additions & 21 deletions clang/test/OpenMP/target_teams_num_teams_codegen.cpp
Expand Up @@ -276,31 +276,23 @@ int bar(int n){
// CHECK-64: [[CONV:%.+]] = bitcast i[[SZ]]* [[CAPE_ADDR]] to i32*
// CHECK-64: [[NT:%.+]] = load i32, i32* [[CONV]], align
// CHECK-32: [[NT:%.+]] = load i32, i32* [[CAPE_ADDR]], align
// CHECK: call i32 @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 [[NT]], i32 0)
// CHECK: call void @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 [[NT]], i32 0)
// CHECK: call {{.*}}void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* [[DEF_LOC]], i32 2,
//
//


// CHECK: define internal void [[HVT2]]([[S1]]* {{%.+}})
// CHECK: call i32 @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 1024, i32 0)
// CHECK: call void @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 1024, i32 0)
// CHECK: call {{.*}}void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* [[DEF_LOC]], i32 1,
//
//








// CHECK: define internal void [[HVT3]](i[[SZ]] [[PARM:%.+]])
// CHECK-DAG: store i[[SZ]] [[PARM]], i[[SZ]]* [[CAPE_ADDR:%.+]], align
// CHECK-64: [[CONV:%.+]] = bitcast i[[SZ]]* [[CAPE_ADDR]] to i32*
// CHECK-64: [[NT:%.+]] = load i32, i32* [[CONV]], align
// CHECK-32: [[NT:%.+]] = load i32, i32* [[CAPE_ADDR]], align
// CHECK: call i32 @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 [[NT]], i32 0)
// CHECK: call void @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 [[NT]], i32 0)
// CHECK: call {{.*}}void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* [[DEF_LOC]], i32 0,
//
//
Expand All @@ -309,32 +301,25 @@ int bar(int n){
// CHECK-64: [[CONV:%.+]] = bitcast i[[SZ]]* [[CAPE_ADDR]] to i32*
// CHECK-64: [[NT:%.+]] = load i32, i32* [[CONV]], align
// CHECK-32: [[NT:%.+]] = load i32, i32* [[CAPE_ADDR]], align
// CHECK: call i32 @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 [[NT]], i32 0)
// CHECK: call void @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 [[NT]], i32 0)
// CHECK: call {{.*}}void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* [[DEF_LOC]], i32 0,
//
//





// CHECK: define internal void [[HVT5]](
// CHECK: call i32 @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 20, i32 0)
// CHECK: call void @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 20, i32 0)
// CHECK: call {{.*}}void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* [[DEF_LOC]], i32 0,
//
//


// CHECK: define internal void [[HVT6]](i[[SZ]] [[PARM1:%.+]], i[[SZ]] [[PARM2:%.+]], i[[SZ]] [[PARM3:%.+]])
// CHECK-DAG: store i[[SZ]] [[PARM3]], i[[SZ]]* [[CAPE_ADDR:%.+]], align
// CHECK: [[CONV:%.+]] = bitcast i[[SZ]]* [[CAPE_ADDR]] to i16*
// CHECK: [[T:%.+]] = load i16, i16* [[CONV]], align
// CHECK: [[NT:%.+]] = sext i16 [[T]] to i32
// CHECK: call i32 @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 [[NT]], i32 0)
// CHECK: call void @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 [[NT]], i32 0)
// CHECK: call {{.*}}void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* [[DEF_LOC]], i32 2,
//
//



#endif
27 changes: 6 additions & 21 deletions clang/test/OpenMP/target_teams_thread_limit_codegen.cpp
Expand Up @@ -285,25 +285,17 @@ int bar(int n){
// CHECK-64: [[CONV:%.+]] = bitcast i[[SZ]]* [[CAPE_ADDR]] to i32*
// CHECK-64: [[TL:%.+]] = load i32, i32* [[CONV]], align
// CHECK-32: [[TL:%.+]] = load i32, i32* [[CAPE_ADDR]], align
// CHECK: call i32 @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 0, i32 [[TL]])
// CHECK: call void @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 0, i32 [[TL]])
// CHECK: call {{.*}}void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* [[DEF_LOC]], i32 2,
//
//


// CHECK: define internal void [[HVT2]]([[S1]]* {{%.+}})
// CHECK: call i32 @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 0, i32 1024)
// CHECK: call void @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 0, i32 1024)
// CHECK: call {{.*}}void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* [[DEF_LOC]], i32 1,
//
//








// CHECK: define internal void [[HVT3]](i[[SZ]] [[PARM1:%.+]], i[[SZ]] [[PARM2:%.+]])
// CHECK-DAG: store i[[SZ]] [[PARM1]], i[[SZ]]* [[CAPE_ADDR1:%.+]], align
// CHECK-DAG: store i[[SZ]] [[PARM2]], i[[SZ]]* [[CAPE_ADDR2:%.+]], align
Expand All @@ -313,7 +305,7 @@ int bar(int n){
// CHECK-64: [[TL:%.+]] = load i32, i32* [[CONV2]], align
// CHECK-32: [[NT:%.+]] = load i32, i32* [[CAPE_ADDR1]], align
// CHECK-32: [[TL:%.+]] = load i32, i32* [[CAPE_ADDR2]], align
// CHECK: call i32 @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 [[NT]], i32 [[TL]])
// CHECK: call void @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 [[NT]], i32 [[TL]])
// CHECK: call {{.*}}void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* [[DEF_LOC]], i32 0,
//
//
Expand All @@ -322,32 +314,25 @@ int bar(int n){
// CHECK-64: [[CONV:%.+]] = bitcast i[[SZ]]* [[CAPE_ADDR]] to i32*
// CHECK-64: [[TL:%.+]] = load i32, i32* [[CONV]], align
// CHECK-32: [[TL:%.+]] = load i32, i32* [[CAPE_ADDR]], align
// CHECK: call i32 @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 0, i32 [[TL]])
// CHECK: call void @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 0, i32 [[TL]])
// CHECK: call {{.*}}void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* [[DEF_LOC]], i32 0,
//
//





// CHECK: define internal void [[HVT5]](
// CHECK: call i32 @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 0, i32 20)
// CHECK: call void @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 0, i32 20)
// CHECK: call {{.*}}void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* [[DEF_LOC]], i32 0,
//
//


// CHECK: define internal void [[HVT6]](i[[SZ]] [[PARM1:%.+]], i[[SZ]] [[PARM2:%.+]], i[[SZ]] [[PARM3:%.+]])
// CHECK-DAG: store i[[SZ]] [[PARM3]], i[[SZ]]* [[CAPE_ADDR:%.+]], align
// CHECK: [[CONV:%.+]] = bitcast i[[SZ]]* [[CAPE_ADDR]] to i16*
// CHECK: [[T:%.+]] = load i16, i16* [[CONV]], align
// CHECK: [[NT:%.+]] = sext i16 [[T]] to i32
// CHECK: call i32 @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 [[NT]], i32 1024)
// CHECK: call void @__kmpc_push_num_teams(%struct.ident_t* {{[^,]+}}, i32 {{[^,]+}}, i32 [[NT]], i32 1024)
// CHECK: call {{.*}}void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* [[DEF_LOC]], i32 2,
//
//



#endif
6 changes: 3 additions & 3 deletions clang/test/OpenMP/teams_codegen.cpp
Expand Up @@ -369,7 +369,7 @@ int main (int argc, char **argv) {
// CK5-64: [[BCONVVAL:%.+]] = load i32, i32* [[BCONV]]
// CK5-32: [[ACONVVAL:%.+]] = load i32, i32* [[AADDR]]
// CK5-32: [[BCONVVAL:%.+]] = load i32, i32* [[BADDR]]
// CK5: {{.+}} = call i32 @__kmpc_push_num_teams(%struct.ident_t* [[DEF_LOC_0]], i32 [[GBL_TH_NUM]], i32 [[ACONVVAL]], i32 [[BCONVVAL]])
// CK5: call void @__kmpc_push_num_teams(%struct.ident_t* [[DEF_LOC_0]], i32 [[GBL_TH_NUM]], i32 [[ACONVVAL]], i32 [[BCONVVAL]])
// CK5-64: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* [[DEF_LOC_0]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*), i32* [[CONV]])
// CK5-32: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* [[DEF_LOC_0]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*), i32* [[ARGCADDR]])

Expand All @@ -385,10 +385,10 @@ int main (int argc, char **argv) {
// CK5-64: [[BCONV:%.+]] = bitcast i64* [[BADDR]] to i32*
// CK5-64: [[ACONVVAL:%.+]] = load i32, i32* [[ACONV]]
// CK5-64: [[BCONVVAL:%.+]] = load i32, i32* [[BCONV]]
// CK5-64: {{.+}} = call i32 @__kmpc_push_num_teams(%struct.ident_t* [[DEF_LOC_0]], i32 [[GBL_TH_NUM]], i32 [[ACONVVAL]], i32 [[BCONVVAL]])
// CK5-64: call void @__kmpc_push_num_teams(%struct.ident_t* [[DEF_LOC_0]], i32 [[GBL_TH_NUM]], i32 [[ACONVVAL]], i32 [[BCONVVAL]])
// CK5-32: [[A_VAL:%.+]] = load i32, i32* [[AADDR]]
// CK5-32: [[B_VAL:%.+]] = load i32, i32* [[BADDR]]
// CK5-32: {{.+}} = call i32 @__kmpc_push_num_teams(%struct.ident_t* [[DEF_LOC_0]], i32 [[GBL_TH_NUM]], i32 [[A_VAL]], i32 [[B_VAL]])
// CK5-32: call void @__kmpc_push_num_teams(%struct.ident_t* [[DEF_LOC_0]], i32 [[GBL_TH_NUM]], i32 [[A_VAL]], i32 [[B_VAL]])
// CK5: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* [[DEF_LOC_0]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i{{.+}})* @.omp_outlined.{{.+}} to void (i32*, i32*, ...)*), i{{.+}}*** [[ARGCADDR]])
// CK5: ret void
// CK5-NEXT: }
Expand Down
4 changes: 2 additions & 2 deletions clang/test/OpenMP/teams_distribute_codegen.cpp
Expand Up @@ -65,7 +65,7 @@ int teams_argument_global(int n) {
// CK1-64: [[TH_VAL:%.+]] = load i32, i32* [[TH_CONV]],
// CK1-32: [[TE_VAL:%.+]] = load i32, i32* [[TE_ADDR]],
// CK1-32: [[TH_VAL:%.+]] = load i32, i32* [[TH_ADDR]],
// CK1: {{%.+}} = call i32 @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK1: call void @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK1: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 2, {{.+}} @[[OUTL1:.+]] to {{.+}}, {{.+}}, {{.+}})
// CK1: ret void

Expand Down Expand Up @@ -261,7 +261,7 @@ int main (int argc, char **argv) {
// CK4-64: [[TH_VAL:%.+]] = load i32, i32* [[TH_CONV]],
// CK4-32: [[TE_VAL:%.+]] = load i32, i32* [[TE_ADDR]],
// CK4-32: [[TH_VAL:%.+]] = load i32, i32* [[TH_ADDR]],
// CK4: {{%.+}} = call i32 @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK4: call void @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK4: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 1, {{.+}} @[[OUTLT:.+]] to {{.+}}, {{.+}}, {{.+}})
// CK4: ret void

Expand Down
4 changes: 2 additions & 2 deletions clang/test/OpenMP/teams_distribute_parallel_for_codegen.cpp
Expand Up @@ -65,7 +65,7 @@ int teams_argument_global(int n){
// CK1-64: [[TH_VAL:%.+]] = load i32, i32* [[TH_CONV]],
// CK1-32: [[TE_VAL:%.+]] = load i32, i32* [[TE_ADDR]],
// CK1-32: [[TH_VAL:%.+]] = load i32, i32* [[TH_ADDR]],
// CK1: {{%.+}} = call i32 @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK1: call void @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK1: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 2, {{.+}} @[[OUTL1:.+]] to {{.+}}, {{.+}}, {{.+}})
// CK1: ret void

Expand Down Expand Up @@ -266,7 +266,7 @@ int main (int argc, char **argv) {
// CK4-64: [[TH_VAL:%.+]] = load i32, i32* [[TH_CONV]],
// CK4-32: [[TE_VAL:%.+]] = load i32, i32* [[TE_ADDR]],
// CK4-32: [[TH_VAL:%.+]] = load i32, i32* [[TH_ADDR]],
// CK4: {{%.+}} = call i32 @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK4: call void @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK4: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 1, {{.+}} @[[OUTLT:.+]] to {{.+}}, {{.+}}, {{.+}})
// CK4: ret void

Expand Down
Expand Up @@ -65,7 +65,7 @@ int teams_argument_global(int n){
// CK1-64: [[TH_VAL:%.+]] = load i32, i32* [[TH_CONV]],
// CK1-32: [[TE_VAL:%.+]] = load i32, i32* [[TE_ADDR]],
// CK1-32: [[TH_VAL:%.+]] = load i32, i32* [[TH_ADDR]],
// CK1: {{%.+}} = call i32 @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK1: call void @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK1: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 2, {{.+}} @[[OUTL1:.+]] to {{.+}}, {{.+}}, {{.+}})
// CK1: ret void

Expand Down Expand Up @@ -277,7 +277,7 @@ int main (int argc, char **argv) {
// CK4-64: [[TH_VAL:%.+]] = load i32, i32* [[TH_CONV]],
// CK4-32: [[TE_VAL:%.+]] = load i32, i32* [[TE_ADDR]],
// CK4-32: [[TH_VAL:%.+]] = load i32, i32* [[TH_ADDR]],
// CK4: {{%.+}} = call i32 @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK4: call void @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK4: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 1, {{.+}} @[[OUTLT:.+]] to {{.+}}, {{.+}}, {{.+}})
// CK4: ret void

Expand Down
4 changes: 2 additions & 2 deletions clang/test/OpenMP/teams_distribute_simd_codegen.cpp
Expand Up @@ -67,7 +67,7 @@ int teams_argument_global(int n) {
// CK1-64: [[TH_VAL:%.+]] = load i32, i32* [[TH_CONV]],
// CK1-32: [[TE_VAL:%.+]] = load i32, i32* [[TE_ADDR]],
// CK1-32: [[TH_VAL:%.+]] = load i32, i32* [[TH_ADDR]],
// CK1: {{%.+}} = call i32 @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK1: call void @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK1: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 3, {{.+}} @[[OUTL1:.+]] to {{.+}}, {{.+}}, {{.+}})
// CK1: ret void

Expand Down Expand Up @@ -308,7 +308,7 @@ int main (int argc, char **argv) {
// CK4-64: [[TH_VAL:%.+]] = load i32, i32* [[TH_CONV]],
// CK4-32: [[TE_VAL:%.+]] = load i32, i32* [[TE_ADDR]],
// CK4-32: [[TH_VAL:%.+]] = load i32, i32* [[TH_ADDR]],
// CK4: {{%.+}} = call i32 @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK4: call void @__kmpc_push_num_teams({{.+}}, {{.+}}, i32 [[TE_VAL]], i32 [[TH_VAL]])
// CK4: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 1, {{.+}} @[[OUTLT:.+]] to {{.+}}, {{.+}}, {{.+}})
// CK4: ret void

Expand Down
7 changes: 5 additions & 2 deletions llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
Expand Up @@ -39,7 +39,7 @@ class OpenMPIRBuilder {
void finalize();

/// Add attributes known for \p FnID to \p Fn.
void addAttributes(omp::RuntimeFunction FnID, Function &Fn);
static void addAttributes(omp::RuntimeFunction FnID, Function &Fn);

/// Type used throughout for insertion points.
using InsertPointTy = IRBuilder<>::InsertPoint;
Expand Down Expand Up @@ -199,7 +199,10 @@ class OpenMPIRBuilder {
}

/// Return the function declaration for the runtime function with \p FnID.
Function *getOrCreateRuntimeFunction(omp::RuntimeFunction FnID);
static FunctionCallee getOrCreateRuntimeFunction(Module &M,
omp::RuntimeFunction FnID);

Function *getOrCreateRuntimeFunctionPtr(omp::RuntimeFunction FnID);

/// Return the (LLVM-IR) string describing the source location \p LocStr.
Constant *getOrCreateSrcLocStr(StringRef LocStr);
Expand Down

0 comments on commit 1a4fb2e

Please sign in to comment.