diff options
Diffstat (limited to 'flang/lib')
-rw-r--r-- | flang/lib/Optimizer/Transforms/CUFComputeSharedMemoryOffsetsAndSize.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/flang/lib/Optimizer/Transforms/CUFComputeSharedMemoryOffsetsAndSize.cpp b/flang/lib/Optimizer/Transforms/CUFComputeSharedMemoryOffsetsAndSize.cpp index 6e04c71..09126e0 100644 --- a/flang/lib/Optimizer/Transforms/CUFComputeSharedMemoryOffsetsAndSize.cpp +++ b/flang/lib/Optimizer/Transforms/CUFComputeSharedMemoryOffsetsAndSize.cpp @@ -143,7 +143,11 @@ struct CUFComputeSharedMemoryOffsetsAndSize auto sharedMemType = fir::SequenceType::get(sharedMemSize, i8Ty); std::string sharedMemGlobalName = (funcOp.getName() + llvm::Twine(cudaSharedMemSuffix)).str(); - mlir::StringAttr linkage = builder.createInternalLinkage(); + // Dynamic shared memory needs an external linkage while static shared + // memory needs an internal linkage. + mlir::StringAttr linkage = nbDynamicSharedVariables > 0 + ? builder.createExternalLinkage() + : builder.createInternalLinkage(); builder.setInsertionPointToEnd(gpuMod.getBody()); llvm::SmallVector<mlir::NamedAttribute> attrs; auto globalOpName = mlir::OperationName(fir::GlobalOp::getOperationName(), |