Author: abataev Date: Mon Apr 8 12:06:42 2019 New Revision: 357933 URL: http://llvm.org/viewvc/llvm-project?rev=357933&view=rev Log: [OPENMP] Sync __kmpc_alloc/_kmpc_free function with the runtime.
Functions __kmpc_alloc/__kmpc_free are updated with the new interfaces. Patch synchronizes the compiler with the runtime. Modified: cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp cfe/trunk/test/OpenMP/allocate_codegen.cpp cfe/trunk/test/OpenMP/for_lastprivate_codegen.cpp cfe/trunk/test/OpenMP/for_linear_codegen.cpp cfe/trunk/test/OpenMP/for_reduction_codegen_UDR.cpp cfe/trunk/test/OpenMP/parallel_firstprivate_codegen.cpp cfe/trunk/test/OpenMP/parallel_private_codegen.cpp Modified: cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp?rev=357933&r1=357932&r2=357933&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp (original) +++ cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp Mon Apr 8 12:06:42 2019 @@ -667,9 +667,9 @@ enum OpenMPRTLFunction { // Call to void *__kmpc_task_reduction_get_th_data(int gtid, void *tg, void // *d); OMPRTL__kmpc_task_reduction_get_th_data, - // Call to void *__kmpc_alloc(int gtid, size_t sz, const omp_allocator_t *al); + // Call to void *__kmpc_alloc(int gtid, size_t sz, omp_allocator_handle_t al); OMPRTL__kmpc_alloc, - // Call to void __kmpc_free(int gtid, void *ptr, const omp_allocator_t *al); + // Call to void __kmpc_free(int gtid, void *ptr, omp_allocator_handle_t al); OMPRTL__kmpc_free, // @@ -2200,20 +2200,18 @@ llvm::FunctionCallee CGOpenMPRuntime::cr break; } case OMPRTL__kmpc_alloc: { - // Build to void *__kmpc_alloc(int gtid, size_t sz, const omp_allocator_t - // *al); - // omp_allocator_t type is void *. - llvm::Type *TypeParams[] = {CGM.IntTy, CGM.SizeTy, CGM.VoidPtrPtrTy}; + // Build to void *__kmpc_alloc(int gtid, size_t sz, omp_allocator_handle_t + // al); omp_allocator_handle_t type is void *. + llvm::Type *TypeParams[] = {CGM.IntTy, CGM.SizeTy, CGM.VoidPtrTy}; auto *FnTy = llvm::FunctionType::get(CGM.VoidPtrTy, TypeParams, /*isVarArg=*/false); RTLFn = CGM.CreateRuntimeFunction(FnTy, /*Name=*/"__kmpc_alloc"); break; } case OMPRTL__kmpc_free: { - // Build to void __kmpc_free(int gtid, void *ptr, const omp_allocator_t - // *al); - // omp_allocator_t type is void *. - llvm::Type *TypeParams[] = {CGM.IntTy, CGM.VoidPtrTy, CGM.VoidPtrPtrTy}; + // Build to void __kmpc_free(int gtid, void *ptr, omp_allocator_handle_t + // al); omp_allocator_handle_t type is void *. + llvm::Type *TypeParams[] = {CGM.IntTy, CGM.VoidPtrTy, CGM.VoidPtrTy}; auto *FnTy = llvm::FunctionType::get(CGM.VoidTy, TypeParams, /*isVarArg=*/false); RTLFn = CGM.CreateRuntimeFunction(FnTy, /*Name=*/"__kmpc_free"); @@ -9781,6 +9779,13 @@ Address CGOpenMPRuntime::getAddressOfLoc assert(AA->getAllocator() && "Expected allocator expression for non-default allocator."); llvm::Value *Allocator = CGF.EmitScalarExpr(AA->getAllocator()); + // According to the standard, the original allocator type is a enum (integer). + // Convert to pointer type, if required. + if (Allocator->getType()->isIntegerTy()) + Allocator = CGF.Builder.CreateIntToPtr(Allocator, CGM.VoidPtrTy); + else if (Allocator->getType()->isPointerTy()) + Allocator = CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(Allocator, + CGM.VoidPtrTy); llvm::Value *Args[] = {ThreadID, Size, Allocator}; llvm::Value *Addr = Modified: cfe/trunk/test/OpenMP/allocate_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/allocate_codegen.cpp?rev=357933&r1=357932&r2=357933&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/allocate_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/allocate_codegen.cpp Mon Apr 8 12:06:42 2019 @@ -17,15 +17,18 @@ #ifndef HEADER #define HEADER -typedef void **omp_allocator_handle_t; -extern const omp_allocator_handle_t omp_default_mem_alloc; -extern const omp_allocator_handle_t omp_large_cap_mem_alloc; -extern const omp_allocator_handle_t omp_const_mem_alloc; -extern const omp_allocator_handle_t omp_high_bw_mem_alloc; -extern const omp_allocator_handle_t omp_low_lat_mem_alloc; -extern const omp_allocator_handle_t omp_cgroup_mem_alloc; -extern const omp_allocator_handle_t omp_pteam_mem_alloc; -extern const omp_allocator_handle_t omp_thread_mem_alloc; +enum omp_allocator_handle_t { + omp_null_allocator = 0, + omp_default_mem_alloc = 1, + omp_large_cap_mem_alloc = 2, + omp_const_mem_alloc = 3, + omp_high_bw_mem_alloc = 4, + omp_low_lat_mem_alloc = 5, + omp_cgroup_mem_alloc = 6, + omp_pteam_mem_alloc = 7, + omp_thread_mem_alloc = 8, + KMP_ALLOCATOR_MAX_HANDLE = __UINTPTR_MAX__ +}; struct St{ int a; @@ -77,13 +80,12 @@ int main () { // CHECK: define {{.*}}i32 @{{.+}}foo{{.+}}() // CHECK: [[GTID:%.+]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @{{.+}}) -// CHECK-NEXT: [[OMP_CGROUP_MEM_ALLOC:%.+]] = load i8**, i8*** @omp_cgroup_mem_alloc, -// CHECK-NEXT: [[V_VOID_ADDR:%.+]] = call i8* @__kmpc_alloc(i32 [[GTID]], i64 4, i8** [[OMP_CGROUP_MEM_ALLOC]]) +// CHECK-NEXT: [[V_VOID_ADDR:%.+]] = call i8* @__kmpc_alloc(i32 [[GTID]], i64 4, i8* inttoptr (i64 6 to i8*)) // CHECK-NEXT: [[V_ADDR:%.+]] = bitcast i8* [[V_VOID_ADDR]] to i32* // CHECK-NOT: {{__kmpc_alloc|__kmpc_free}} // CHECK: store i32 %{{.+}}, i32* [[V_ADDR]], // CHECK-NEXT: [[V_VAL:%.+]] = load i32, i32* [[V_ADDR]], -// CHECK-NEXT: call void @__kmpc_free(i32 [[GTID]], i8* [[V_VOID_ADDR]], i8** [[OMP_CGROUP_MEM_ALLOC]]) +// CHECK-NEXT: call void @__kmpc_free(i32 [[GTID]], i8* [[V_VOID_ADDR]], i8* inttoptr (i64 6 to i8*)) // CHECK-NOT: {{__kmpc_alloc|__kmpc_free}} // CHECK: ret i32 [[V_VAL]] Modified: cfe/trunk/test/OpenMP/for_lastprivate_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/for_lastprivate_codegen.cpp?rev=357933&r1=357932&r2=357933&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/for_lastprivate_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/for_lastprivate_codegen.cpp Mon Apr 8 12:06:42 2019 @@ -14,15 +14,18 @@ #ifndef HEADER #define HEADER -typedef void **omp_allocator_handle_t; -extern const omp_allocator_handle_t omp_default_mem_alloc; -extern const omp_allocator_handle_t omp_large_cap_mem_alloc; -extern const omp_allocator_handle_t omp_const_mem_alloc; -extern const omp_allocator_handle_t omp_high_bw_mem_alloc; -extern const omp_allocator_handle_t omp_low_lat_mem_alloc; -extern const omp_allocator_handle_t omp_cgroup_mem_alloc; -extern const omp_allocator_handle_t omp_pteam_mem_alloc; -extern const omp_allocator_handle_t omp_thread_mem_alloc; +enum omp_allocator_handle_t { + omp_null_allocator = 0, + omp_default_mem_alloc = 1, + omp_large_cap_mem_alloc = 2, + omp_const_mem_alloc = 3, + omp_high_bw_mem_alloc = 4, + omp_low_lat_mem_alloc = 5, + omp_cgroup_mem_alloc = 6, + omp_pteam_mem_alloc = 7, + omp_thread_mem_alloc = 8, + KMP_ALLOCATOR_MAX_HANDLE = __UINTPTR_MAX__ +}; struct SS { int a; @@ -605,8 +608,7 @@ int main() { // Check for default initialization. // CHECK: [[GTID_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[GTID_ADDR_REF]] // CHECK: [[GTID:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[GTID_REF]] -// CHECK: [[ALLOCATOR:%.+]] = load i8**, i8*** @omp_const_mem_alloc, -// CHECK: [[F_VOID_PTR:%.+]] = call i8* @__kmpc_alloc(i32 [[GTID]], i64 4, i8** [[ALLOCATOR]]) +// CHECK: [[F_VOID_PTR:%.+]] = call i8* @__kmpc_alloc(i32 [[GTID]], i64 4, i8* inttoptr (i64 3 to i8*)) // CHECK: [[F_PRIV:%.+]] = bitcast i8* [[F_VOID_PTR]] to float* // CHECK: [[F_VAL:%.+]] = load float, float* [[F]], // CHECK: store float [[F_VAL]], float* [[F_PRIV]], @@ -629,7 +631,7 @@ int main() { // CHECK-NEXT: br label %[[LAST_DONE]] // CHECK: [[LAST_DONE]] -// CHECK: call void @__kmpc_free(i32 [[GTID]], i8* [[F_VOID_PTR]], i8** [[ALLOCATOR]]) +// CHECK: call void @__kmpc_free(i32 [[GTID]], i8* [[F_VOID_PTR]], i8* inttoptr (i64 3 to i8*)) // CHECK-NEXT: call void @__kmpc_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i{{[0-9]+}} [[GTID]]) // CHECK-NEXT: ret void @@ -637,8 +639,7 @@ int main() { // CHECK: [[GTID_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[GTID_ADDR_REF]] // CHECK: [[GTID:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[GTID_REF]] -// CHECK: [[ALLOCATOR:%.+]] = load i8**, i8*** @omp_const_mem_alloc, -// CHECK: [[CNT_PRIV:%.+]] = call i8* @__kmpc_alloc(i32 [[GTID]], i64 1, i8** [[ALLOCATOR]]) +// CHECK: [[CNT_PRIV:%.+]] = call i8* @__kmpc_alloc(i32 [[GTID]], i64 1, i8* inttoptr (i64 3 to i8*)) // CHECK: call {{.+}} @__kmpc_for_static_init_4(%{{.+}}* @{{.+}}, i32 [[GTID]], i32 34, i32* [[IS_LAST_ADDR:%.+]], i32* [[OMP_LB:%[^,]+]], i32* [[OMP_UB:%[^,]+]], i32* [[OMP_ST:%[^,]+]], i32 1, i32 1) // UB = min(UB, GlobalUB) // CHECK-NEXT: [[UB:%.+]] = load i32, i32* [[OMP_UB]] @@ -666,7 +667,7 @@ int main() { // CHECK-NEXT: br label %[[LAST_DONE]] // CHECK: [[LAST_DONE]] -// CHECK: call void @__kmpc_free(i32 [[GTID]], i8* [[CNT_PRIV]], i8** [[ALLOCATOR]]) +// CHECK: call void @__kmpc_free(i32 [[GTID]], i8* [[CNT_PRIV]], i8* inttoptr (i64 3 to i8*)) // CHECK-NEXT: call void @__kmpc_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i{{[0-9]+}} [[GTID]]) // CHECK-NEXT: ret void Modified: cfe/trunk/test/OpenMP/for_linear_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/for_linear_codegen.cpp?rev=357933&r1=357932&r2=357933&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/for_linear_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/for_linear_codegen.cpp Mon Apr 8 12:06:42 2019 @@ -14,15 +14,18 @@ #ifndef HEADER #define HEADER -typedef void **omp_allocator_handle_t; -extern const omp_allocator_handle_t omp_default_mem_alloc; -extern const omp_allocator_handle_t omp_large_cap_mem_alloc; -extern const omp_allocator_handle_t omp_const_mem_alloc; -extern const omp_allocator_handle_t omp_high_bw_mem_alloc; -extern const omp_allocator_handle_t omp_low_lat_mem_alloc; -extern const omp_allocator_handle_t omp_cgroup_mem_alloc; -extern const omp_allocator_handle_t omp_pteam_mem_alloc; -extern const omp_allocator_handle_t omp_thread_mem_alloc; +enum omp_allocator_handle_t { + omp_null_allocator = 0, + omp_default_mem_alloc = 1, + omp_large_cap_mem_alloc = 2, + omp_const_mem_alloc = 3, + omp_high_bw_mem_alloc = 4, + omp_low_lat_mem_alloc = 5, + omp_cgroup_mem_alloc = 6, + omp_pteam_mem_alloc = 7, + omp_thread_mem_alloc = 8, + KMP_ALLOCATOR_MAX_HANDLE = __UINTPTR_MAX__ +}; template <class T> struct S { @@ -389,8 +392,7 @@ int main() { // CHECK: store float* [[PVAR_VAL]], float** [[PVAR_START]], // CHECK: [[LVAR_VAL:%.+]] = load i64, i64* [[LVAR_REF]], // CHECK: store i64 [[LVAR_VAL]], i64* [[LVAR_START]], -// CHECK: [[ALLOCATOR:%.+]] = load i8**, i8*** @omp_low_lat_mem_alloc, -// CHECK: [[LVAR_VOID_PTR:%.+]] = call i8* @__kmpc_alloc(i32 [[GTID:%.+]], i64 8, i8** [[ALLOCATOR]]) +// CHECK: [[LVAR_VOID_PTR:%.+]] = call i8* @__kmpc_alloc(i32 [[GTID:%.+]], i64 8, i8* inttoptr (i64 5 to i8*)) // CHECK: [[LVAR_PRIV:%.+]] = bitcast i8* [[LVAR_VOID_PTR]] to i64* // CHECK: call {{.+}} @__kmpc_for_static_init_4(%{{.+}}* @{{.+}}, i32 [[GTID]], i32 34, i32* [[IS_LAST_ADDR:%.+]], i32* %{{.+}}, i32* %{{.+}}, i32* %{{.+}}, i32 1, i32 1) // CHECK: [[PVAR_VAL:%.+]] = load float*, float** [[PVAR_START]], @@ -412,7 +414,7 @@ int main() { // CHECK: [[ADD:%.+]] = add nsw i64 [[LVAR_VAL]], 3 // CHECK: store i64 [[ADD]], i64* [[LVAR_PRIV]], // CHECK: call void @__kmpc_for_static_fini(%{{.+}}* @{{.+}}, i32 %{{.+}}) -// CHECK: call void @__kmpc_free(i32 [[GTID]], i8* [[LVAR_VOID_PTR]], i8** [[ALLOCATOR]]) +// CHECK: call void @__kmpc_free(i32 [[GTID]], i8* [[LVAR_VOID_PTR]], i8* inttoptr (i64 5 to i8*)) // CHECK: call void @__kmpc_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i{{[0-9]+}} [[GTID]]) // CHECK: ret void Modified: cfe/trunk/test/OpenMP/for_reduction_codegen_UDR.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/for_reduction_codegen_UDR.cpp?rev=357933&r1=357932&r2=357933&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/for_reduction_codegen_UDR.cpp (original) +++ cfe/trunk/test/OpenMP/for_reduction_codegen_UDR.cpp Mon Apr 8 12:06:42 2019 @@ -10,15 +10,18 @@ #ifndef HEADER #define HEADER -typedef void **omp_allocator_handle_t; -extern const omp_allocator_handle_t omp_default_mem_alloc; -extern const omp_allocator_handle_t omp_large_cap_mem_alloc; -extern const omp_allocator_handle_t omp_const_mem_alloc; -extern const omp_allocator_handle_t omp_high_bw_mem_alloc; -extern const omp_allocator_handle_t omp_low_lat_mem_alloc; -extern const omp_allocator_handle_t omp_cgroup_mem_alloc; -extern const omp_allocator_handle_t omp_pteam_mem_alloc; -extern const omp_allocator_handle_t omp_thread_mem_alloc; +enum omp_allocator_handle_t { + omp_null_allocator = 0, + omp_default_mem_alloc = 1, + omp_large_cap_mem_alloc = 2, + omp_const_mem_alloc = 3, + omp_high_bw_mem_alloc = 4, + omp_low_lat_mem_alloc = 5, + omp_cgroup_mem_alloc = 6, + omp_pteam_mem_alloc = 7, + omp_thread_mem_alloc = 8, + KMP_ALLOCATOR_MAX_HANDLE = __UINTPTR_MAX__ +}; volatile double g, g_orig; volatile double &g1 = g_orig; @@ -797,15 +800,14 @@ int main() { // CHECK: [[VAR3_ORIG:%.+]] = load [4 x [[S_FLOAT_TY]]]*, [4 x [[S_FLOAT_TY]]]** [[VAR3_ORIG_ADDR]], // CHECK: store [4 x [[S_FLOAT_TY]]]* [[VAR3_ORIG]], [4 x [[S_FLOAT_TY]]]** [[VAR3_ORIG_ADDR:%.+]], // CHECK: [[VAR3_ORIG:%.+]] = load [4 x [[S_FLOAT_TY]]]*, [4 x [[S_FLOAT_TY]]]** [[VAR3_ORIG_ADDR]], -// CHECK: [[ALLOCATOR:%.+]] = load i8**, i8*** @omp_cgroup_mem_alloc, -// CHECK: [[VAR3_VOID_PTR:%.+]] = call i8* @__kmpc_alloc(i32 [[GTID:%.+]], i64 48, i8** [[ALLOCATOR]]) +// CHECK: [[VAR3_VOID_PTR:%.+]] = call i8* @__kmpc_alloc(i32 [[GTID:%.+]], i64 48, i8* inttoptr (i64 6 to i8*)) // CHECK: [[VAR3_PRIV:%.+]] = bitcast i8* [[VAR3_VOID_PTR]] to [4 x %struct.S]* // CHECK: getelementptr inbounds [4 x [[S_FLOAT_TY]]], [4 x [[S_FLOAT_TY]]]* [[VAR3_PRIV]], i32 0, i32 0 // CHECK: bitcast [4 x [[S_FLOAT_TY]]]* [[VAR3_ORIG]] to [[S_FLOAT_TY]]* // CHECK: getelementptr [[S_FLOAT_TY]], [[S_FLOAT_TY]]* %{{.+}}, i64 4 // CHECK: store [4 x [[S_FLOAT_TY]]]* [[VAR3_PRIV]], [4 x [[S_FLOAT_TY]]]** % -// CHECK: call void @__kmpc_free(i32 [[GTID]], i8* [[VAR3_VOID_PTR]], i8** [[ALLOCATOR]]) +// CHECK: call void @__kmpc_free(i32 [[GTID]], i8* [[VAR3_VOID_PTR]], i8* inttoptr (i64 6 to i8*)) // CHECK: ret void // CHECK: define {{.*}} i{{[0-9]+}} [[TMAIN_INT_42]]() Modified: cfe/trunk/test/OpenMP/parallel_firstprivate_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/parallel_firstprivate_codegen.cpp?rev=357933&r1=357932&r2=357933&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/parallel_firstprivate_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/parallel_firstprivate_codegen.cpp Mon Apr 8 12:06:42 2019 @@ -33,15 +33,18 @@ #ifndef HEADER #define HEADER -typedef void **omp_allocator_handle_t; -extern const omp_allocator_handle_t omp_default_mem_alloc; -extern const omp_allocator_handle_t omp_large_cap_mem_alloc; -extern const omp_allocator_handle_t omp_const_mem_alloc; -extern const omp_allocator_handle_t omp_high_bw_mem_alloc; -extern const omp_allocator_handle_t omp_low_lat_mem_alloc; -extern const omp_allocator_handle_t omp_cgroup_mem_alloc; -extern const omp_allocator_handle_t omp_pteam_mem_alloc; -extern const omp_allocator_handle_t omp_thread_mem_alloc; +enum omp_allocator_handle_t { + omp_null_allocator = 0, + omp_default_mem_alloc = 1, + omp_large_cap_mem_alloc = 2, + omp_const_mem_alloc = 3, + omp_high_bw_mem_alloc = 4, + omp_low_lat_mem_alloc = 5, + omp_cgroup_mem_alloc = 6, + omp_pteam_mem_alloc = 7, + omp_thread_mem_alloc = 8, + KMP_ALLOCATOR_MAX_HANDLE = __UINTPTR_MAX__ +}; struct St { int a, b; @@ -412,13 +415,12 @@ int main() { // CHECK-64: [[BC:%.+]] = bitcast [[iz]]* [[T_VAR_ADDR]] to i32* // CHECK: [[GTID_PTR:%.+]] = load i32*, i32** [[GTID_ADDR]], // CHECK: [[GTID:%.+]] = load i32, i32* [[GTID_PTR]], -// CHECK: [[ALLOCATOR:%.+]] = load i8**, i8*** @omp_default_mem_alloc, -// CHECK: [[T_VAR_VOID_PTR:%.+]] = call i8* @__kmpc_alloc(i32 [[GTID]], [[iz]] 4, i8** [[ALLOCATOR]]) +// CHECK: [[T_VAR_VOID_PTR:%.+]] = call i8* @__kmpc_alloc(i32 [[GTID]], [[iz]] 4, i8* inttoptr ([[iz]] 1 to i8*)) // CHECK: [[T_VAR_PRIV:%.+]] = bitcast i8* [[T_VAR_VOID_PTR]] to i32* // CHECK-32: [[T_VAR_VAL:%.+]] = load i32, i32* [[T_VAR_ADDR]], // CHECK-64: [[T_VAR_VAL:%.+]] = load i32, i32* [[BC]], // CHECK: store i32 [[T_VAR_VAL]], i32* [[T_VAR_PRIV]], -// CHECK: call void @__kmpc_free(i32 [[GTID]], i8* [[T_VAR_VOID_PTR]], i8** [[ALLOCATOR]]) +// CHECK: call void @__kmpc_free(i32 [[GTID]], i8* [[T_VAR_VOID_PTR]], i8* inttoptr ([[iz]] 1 to i8*)) // CHECK: ret void @@ -515,15 +517,19 @@ int main() { #endif #else -typedef void **omp_allocator_handle_t; -extern const omp_allocator_handle_t omp_default_mem_alloc; -extern const omp_allocator_handle_t omp_large_cap_mem_alloc; -extern const omp_allocator_handle_t omp_const_mem_alloc; -extern const omp_allocator_handle_t omp_high_bw_mem_alloc; -extern const omp_allocator_handle_t omp_low_lat_mem_alloc; -extern const omp_allocator_handle_t omp_cgroup_mem_alloc; -extern const omp_allocator_handle_t omp_pteam_mem_alloc; -extern const omp_allocator_handle_t omp_thread_mem_alloc; + +enum omp_allocator_handle_t { + omp_null_allocator = 0, + omp_default_mem_alloc = 1, + omp_large_cap_mem_alloc = 2, + omp_const_mem_alloc = 3, + omp_high_bw_mem_alloc = 4, + omp_low_lat_mem_alloc = 5, + omp_cgroup_mem_alloc = 6, + omp_pteam_mem_alloc = 7, + omp_thread_mem_alloc = 8, + KMP_ALLOCATOR_MAX_HANDLE = __UINTPTR_MAX__ +}; struct St { int a, b; @@ -570,13 +576,12 @@ void array_func(float a[3], St s[2], int // ARRAY: [[SZ1:%.+]] = add nuw i64 [[SIZE]], 127 // ARRAY: [[SZ2:%.+]] = udiv i64 [[SZ1]], 128 // ARRAY: [[SIZE:%.+]] = mul nuw i64 [[SZ2]], 128 -// ARRAY: [[ALLOCATOR:%.+]] = load i8**, i8*** @omp_thread_mem_alloc, -// ARRAY: [[VLA2_VOID_PTR:%.+]] = call i8* @__kmpc_alloc(i32 [[GTID:%.+]], i64 [[SIZE]], i8** [[ALLOCATOR]]) +// ARRAY: [[VLA2_VOID_PTR:%.+]] = call i8* @__kmpc_alloc(i32 [[GTID:%.+]], i64 [[SIZE]], i8* inttoptr (i64 8 to i8*)) // ARRAY: [[VLA2_PTR:%.+]] = bitcast i8* [[VLA2_VOID_PTR]] to double* // ARRAY: [[SIZE:%.+]] = mul nuw i64 %{{.+}}, 8 // ARRAY: [[BC:%.+]] = bitcast double* [[VLA2_PTR]] to i8* // ARRAY: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 128 [[BC]], i8* align 128 %{{.+}}, i64 [[SIZE]], i1 false) -// ARRAY: call void @__kmpc_free(i32 [[GTID]], i8* [[VLA2_VOID_PTR]], i8** [[ALLOCATOR]]) +// ARRAY: call void @__kmpc_free(i32 [[GTID]], i8* [[VLA2_VOID_PTR]], i8* inttoptr (i64 8 to i8*)) // ARRAY-NEXT: ret void #endif Modified: cfe/trunk/test/OpenMP/parallel_private_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/parallel_private_codegen.cpp?rev=357933&r1=357932&r2=357933&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/parallel_private_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/parallel_private_codegen.cpp Mon Apr 8 12:06:42 2019 @@ -13,15 +13,19 @@ // expected-no-diagnostics #ifndef HEADER #define HEADER -typedef void **omp_allocator_handle_t; -extern const omp_allocator_handle_t omp_default_mem_alloc; -extern const omp_allocator_handle_t omp_large_cap_mem_alloc; -extern const omp_allocator_handle_t omp_const_mem_alloc; -extern const omp_allocator_handle_t omp_high_bw_mem_alloc; -extern const omp_allocator_handle_t omp_low_lat_mem_alloc; -extern const omp_allocator_handle_t omp_cgroup_mem_alloc; -extern const omp_allocator_handle_t omp_pteam_mem_alloc; -extern const omp_allocator_handle_t omp_thread_mem_alloc; + +enum omp_allocator_handle_t { + omp_null_allocator = 0, + omp_default_mem_alloc = 1, + omp_large_cap_mem_alloc = 2, + omp_const_mem_alloc = 3, + omp_high_bw_mem_alloc = 4, + omp_low_lat_mem_alloc = 5, + omp_cgroup_mem_alloc = 6, + omp_pteam_mem_alloc = 7, + omp_thread_mem_alloc = 8, + KMP_ALLOCATOR_MAX_HANDLE = __UINTPTR_MAX__ +}; template <class T> struct S { @@ -356,15 +360,14 @@ int main() { // CHECK: [[GTID_ADDR_PTR:%.+]] = alloca i32*, // CHECK: [[GTID_ADDR:%.+]] = load i32*, i32** [[GTID_ADDR_PTR]], // CHECK: [[GTID:%.+]] = load i32, i32* [[GTID_ADDR]], -// CHECK: [[LARGE_CAP_ALLOC:%.+]] = load i8**, i8*** @omp_large_cap_mem_alloc, -// CHECK: [[A_VOID_PTR:%.+]] = call i8* @__kmpc_alloc(i32 [[GTID]], i64 4, i8** [[LARGE_CAP_ALLOC]]) +// CHECK: [[A_VOID_PTR:%.+]] = call i8* @__kmpc_alloc(i32 [[GTID]], i64 4, i8* inttoptr (i64 2 to i8*)) // CHECK: [[A_PRIV:%.+]] = bitcast i8* [[A_VOID_PTR]] to i32* // CHECK: store i{{[0-9]+}}* [[A_PRIV]], i{{[0-9]+}}** [[REF:%.+]], // CHECK-NEXT: [[A_PRIV:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[REF]], // CHECK-NEXT: [[A_VAL:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[A_PRIV]], // CHECK-NEXT: [[INC:%.+]] = add nsw i{{[0-9]+}} [[A_VAL]], 1 // CHECK-NEXT: store i{{[0-9]+}} [[INC]], i{{[0-9]+}}* [[A_PRIV]], -// CHECK-NEXT: call void @__kmpc_free(i32 [[GTID]], i8* [[A_VOID_PTR]], i8** [[LARGE_CAP_ALLOC]]) +// CHECK-NEXT: call void @__kmpc_free(i32 [[GTID]], i8* [[A_VOID_PTR]], i8* inttoptr (i64 2 to i8*)) // CHECK-NEXT: ret void #endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits