Author: abataev Date: Tue Dec 18 13:01:42 2018 New Revision: 349540 URL: http://llvm.org/viewvc/llvm-project?rev=349540&view=rev Log: [OPENMP][NVPTX]Emit shared memory buffer for reduction as 128 bytes buffer.
Seems to me, nvlink has a bug with the proper support of the weakly linked symbols. It does not allow to define several shared memory buffer with the different sizes even with the weak linkage. Instead we always use 128 bytes buffer to prevent nvlink from the error message emission. Modified: cfe/trunk/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp cfe/trunk/test/OpenMP/nvptx_data_sharing.cpp cfe/trunk/test/OpenMP/nvptx_distribute_parallel_generic_mode_codegen.cpp cfe/trunk/test/OpenMP/nvptx_parallel_codegen.cpp cfe/trunk/test/OpenMP/nvptx_parallel_for_codegen.cpp cfe/trunk/test/OpenMP/nvptx_target_codegen.cpp cfe/trunk/test/OpenMP/nvptx_target_teams_distribute_codegen.cpp cfe/trunk/test/OpenMP/nvptx_target_teams_distribute_parallel_for_codegen.cpp cfe/trunk/test/OpenMP/nvptx_target_teams_distribute_parallel_for_simd_codegen.cpp cfe/trunk/test/OpenMP/nvptx_teams_codegen.cpp cfe/trunk/test/OpenMP/nvptx_teams_reduction_codegen.cpp Modified: cfe/trunk/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp?rev=349540&r1=349539&r2=349540&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp (original) +++ cfe/trunk/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp Tue Dec 18 13:01:42 2018 @@ -4518,6 +4518,22 @@ void CGOpenMPRuntimeNVPTX::clear() { Records.UseSharedMemory->setInitializer( llvm::ConstantInt::get(CGM.Int16Ty, UseSharedMemory ? 1 : 0)); } + // Allocate SharedMemorySize buffer for the shared memory. + // FIXME: nvlink does not handle weak linkage correctly (object with the + // different size are reported as erroneous). + // Restore this code as sson as nvlink is fixed. + if (!SharedStaticRD->field_empty()) { + llvm::APInt ArySize(/*numBits=*/64, SharedMemorySize); + QualType SubTy = C.getConstantArrayType( + C.CharTy, ArySize, ArrayType::Normal, /*IndexTypeQuals=*/0); + auto *Field = FieldDecl::Create( + C, SharedStaticRD, SourceLocation(), SourceLocation(), nullptr, SubTy, + C.getTrivialTypeSourceInfo(SubTy, SourceLocation()), + /*BW=*/nullptr, /*Mutable=*/false, + /*InitStyle=*/ICIS_NoInit); + Field->setAccess(AS_public); + SharedStaticRD->addDecl(Field); + } SharedStaticRD->completeDefinition(); if (!SharedStaticRD->field_empty()) { QualType StaticTy = C.getRecordType(SharedStaticRD); Modified: cfe/trunk/test/OpenMP/nvptx_data_sharing.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/nvptx_data_sharing.cpp?rev=349540&r1=349539&r2=349540&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/nvptx_data_sharing.cpp (original) +++ cfe/trunk/test/OpenMP/nvptx_data_sharing.cpp Tue Dec 18 13:01:42 2018 @@ -26,7 +26,7 @@ void test_ds(){ } } } -// CK1: [[MEM_TY:%.+]] = type { [8 x i8] } +// CK1: [[MEM_TY:%.+]] = type { [128 x i8] } // CK1-DAG: [[SHARED_GLOBAL_RD:@.+]] = common addrspace(3) global [[MEM_TY]] zeroinitializer // CK1-DAG: [[KERNEL_PTR:@.+]] = internal addrspace(3) global i8* null // CK1-DAG: [[KERNEL_SIZE:@.+]] = internal unnamed_addr constant i64 8 Modified: cfe/trunk/test/OpenMP/nvptx_distribute_parallel_generic_mode_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/nvptx_distribute_parallel_generic_mode_codegen.cpp?rev=349540&r1=349539&r2=349540&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/nvptx_distribute_parallel_generic_mode_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/nvptx_distribute_parallel_generic_mode_codegen.cpp Tue Dec 18 13:01:42 2018 @@ -21,7 +21,7 @@ int main(int argc, char **argv) { return 0; } -// CHECK: [[MEM_TY:%.+]] = type { [84 x i8] } +// CHECK: [[MEM_TY:%.+]] = type { [128 x i8] } // CHECK-DAG: [[SHARED_GLOBAL_RD:@.+]] = common addrspace(3) global [[MEM_TY]] zeroinitializer // CHECK-DAG: [[KERNEL_PTR:@.+]] = internal addrspace(3) global i8* null // CHECK-DAG: [[KERNEL_SIZE:@.+]] = internal unnamed_addr constant i{{64|32}} 84 Modified: cfe/trunk/test/OpenMP/nvptx_parallel_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/nvptx_parallel_codegen.cpp?rev=349540&r1=349539&r2=349540&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/nvptx_parallel_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/nvptx_parallel_codegen.cpp Tue Dec 18 13:01:42 2018 @@ -72,7 +72,7 @@ int bar(int n){ return a; } -// CHECK: [[MEM_TY:%.+]] = type { [4 x i8] } +// CHECK: [[MEM_TY:%.+]] = type { [128 x i8] } // CHECK-DAG: [[SHARED_GLOBAL_RD:@.+]] = common addrspace(3) global [[MEM_TY]] zeroinitializer // CHECK-DAG: [[KERNEL_PTR:@.+]] = internal addrspace(3) global i8* null // CHECK-DAG: [[KERNEL_SIZE:@.+]] = internal unnamed_addr constant i{{64|32}} 4 Modified: cfe/trunk/test/OpenMP/nvptx_parallel_for_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/nvptx_parallel_for_codegen.cpp?rev=349540&r1=349539&r2=349540&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/nvptx_parallel_for_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/nvptx_parallel_for_codegen.cpp Tue Dec 18 13:01:42 2018 @@ -30,7 +30,7 @@ int bar(int n){ return a; } -// CHECK: [[MEM_TY:%.+]] = type { [4 x i8] } +// CHECK: [[MEM_TY:%.+]] = type { [128 x i8] } // CHECK-DAG: [[SHARED_GLOBAL_RD:@.+]] = common addrspace(3) global [[MEM_TY]] zeroinitializer // CHECK-DAG: [[KERNEL_PTR:@.+]] = internal addrspace(3) global i8* null // CHECK-DAG: [[KERNEL_SIZE:@.+]] = internal unnamed_addr constant i{{64|32}} 4 Modified: cfe/trunk/test/OpenMP/nvptx_target_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/nvptx_target_codegen.cpp?rev=349540&r1=349539&r2=349540&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/nvptx_target_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/nvptx_target_codegen.cpp Tue Dec 18 13:01:42 2018 @@ -18,7 +18,7 @@ // CHECK-DAG: {{@__omp_offloading_.+l362}}_exec_mode = weak constant i8 1 // CHECK-DAG: {{@__omp_offloading_.+l380}}_exec_mode = weak constant i8 1 // CHECK-DAG: {{@__omp_offloading_.+l345}}_exec_mode = weak constant i8 1 -// CHECK-DAG: [[MAP_TY:%.+]] = type { [{{8|4}} x i8] } +// CHECK-DAG: [[MAP_TY:%.+]] = type { [128 x i8] } // CHECK-DAG: [[GLOB_TY:%.+]] = type { i32* } __thread int id; Modified: cfe/trunk/test/OpenMP/nvptx_target_teams_distribute_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/nvptx_target_teams_distribute_codegen.cpp?rev=349540&r1=349539&r2=349540&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/nvptx_target_teams_distribute_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/nvptx_target_teams_distribute_codegen.cpp Tue Dec 18 13:01:42 2018 @@ -8,7 +8,7 @@ #ifndef HEADER #define HEADER -// CHECK: [[MEM_TY:%.+]] = type { [4 x i8] } +// CHECK: [[MEM_TY:%.+]] = type { [128 x i8] } // CHECK-DAG: {{@__omp_offloading_.+}}_l19_exec_mode = weak constant i8 1 // CHECK-DAG: internal unnamed_addr constant i{{64|32}} 4 Modified: cfe/trunk/test/OpenMP/nvptx_target_teams_distribute_parallel_for_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/nvptx_target_teams_distribute_parallel_for_codegen.cpp?rev=349540&r1=349539&r2=349540&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/nvptx_target_teams_distribute_parallel_for_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/nvptx_target_teams_distribute_parallel_for_codegen.cpp Tue Dec 18 13:01:42 2018 @@ -67,7 +67,7 @@ int bar(int n){ return a; } -// CHECK-DAG: [[MEM_TY:%.+]] = type { [4 x i8] } +// CHECK-DAG: [[MEM_TY:%.+]] = type { [128 x i8] } // CHECK-DAG: [[SHARED_GLOBAL_RD:@.+]] = common addrspace(3) global [[MEM_TY]] zeroinitializer // CHECK-DAG: [[KERNEL_PTR:@.+]] = internal addrspace(3) global i8* null // CHECK-DAG: [[KERNEL_SIZE:@.+]] = internal unnamed_addr constant i{{64|32}} 4 Modified: cfe/trunk/test/OpenMP/nvptx_target_teams_distribute_parallel_for_simd_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/nvptx_target_teams_distribute_parallel_for_simd_codegen.cpp?rev=349540&r1=349539&r2=349540&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/nvptx_target_teams_distribute_parallel_for_simd_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/nvptx_target_teams_distribute_parallel_for_simd_codegen.cpp Tue Dec 18 13:01:42 2018 @@ -62,7 +62,7 @@ int bar(int n){ return a; } -// CHECK-DAG: [[MEM_TY:%.+]] = type { [4 x i8] } +// CHECK-DAG: [[MEM_TY:%.+]] = type { [128 x i8] } // CHECK-DAG: [[SHARED_GLOBAL_RD:@.+]] = common addrspace(3) global [[MEM_TY]] zeroinitializer // CHECK-DAG: [[KERNEL_PTR:@.+]] = internal addrspace(3) global i8* null // CHECK-DAG: [[KERNEL_SIZE:@.+]] = internal unnamed_addr constant i{{64|32}} 4 Modified: cfe/trunk/test/OpenMP/nvptx_teams_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/nvptx_teams_codegen.cpp?rev=349540&r1=349539&r2=349540&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/nvptx_teams_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/nvptx_teams_codegen.cpp Tue Dec 18 13:01:42 2018 @@ -27,7 +27,7 @@ int main (int argc, char **argv) { return tmain(argv); } -// CK1: [[MEM_TY:%.+]] = type { [{{4|8}} x i8] } +// CK1: [[MEM_TY:%.+]] = type { [128 x i8] } // CK1-DAG: [[SHARED_GLOBAL_RD:@.+]] = common addrspace(3) global [[MEM_TY]] zeroinitializer // CK1-DAG: [[KERNEL_PTR:@.+]] = internal addrspace(3) global i8* null // CK1-DAG: [[KERNEL_SIZE1:@.+]] = internal unnamed_addr constant i{{64|32}} 4 @@ -114,7 +114,7 @@ int main (int argc, char **argv) { return tmain(argv); } -// CK2: [[MEM_TY:%.+]] = type { [{{4|8}} x i8] } +// CK2: [[MEM_TY:%.+]] = type { [128 x i8] } // CK2-DAG: [[SHARED_GLOBAL_RD:@.+]] = common addrspace(3) global [[MEM_TY]] zeroinitializer // CK2-DAG: [[KERNEL_PTR:@.+]] = internal addrspace(3) global i8* null // CK2-DAG: [[KERNEL_SIZE1:@.+]] = internal unnamed_addr constant i{{64|32}} 4 Modified: cfe/trunk/test/OpenMP/nvptx_teams_reduction_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/nvptx_teams_reduction_codegen.cpp?rev=349540&r1=349539&r2=349540&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/nvptx_teams_reduction_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/nvptx_teams_reduction_codegen.cpp Tue Dec 18 13:01:42 2018 @@ -8,7 +8,7 @@ #ifndef HEADER #define HEADER -// CHECK: [[MAP_TY:%.+]] = type { [16 x i8] } +// CHECK: [[MAP_TY:%.+]] = type { [128 x i8] } // CHECK-DAG: [[KERNEL_PTR:@.+]] = internal addrspace(3) global i8* null // CHECK-DAG: [[KERNEL_SHARED1:@.+]] = internal unnamed_addr constant i16 1 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits