diff options
Diffstat (limited to 'flang/lib')
-rw-r--r-- | flang/lib/Frontend/CompilerInstance.cpp | 6 | ||||
-rw-r--r-- | flang/lib/Optimizer/Transforms/CUFComputeSharedMemoryOffsetsAndSize.cpp | 6 |
2 files changed, 8 insertions, 4 deletions
diff --git a/flang/lib/Frontend/CompilerInstance.cpp b/flang/lib/Frontend/CompilerInstance.cpp index d97b4b8..5920ed8 100644 --- a/flang/lib/Frontend/CompilerInstance.cpp +++ b/flang/lib/Frontend/CompilerInstance.cpp @@ -344,9 +344,10 @@ bool CompilerInstance::setUpTargetMachine() { const std::string &theTriple = targetOpts.triple; // Create `Target` + const llvm::Triple triple(theTriple); std::string error; const llvm::Target *theTarget = - llvm::TargetRegistry::lookupTarget(theTriple, error); + llvm::TargetRegistry::lookupTarget(triple, error); if (!theTarget) { getDiagnostics().Report(clang::diag::err_fe_unable_to_create_target) << error; @@ -365,13 +366,12 @@ bool CompilerInstance::setUpTargetMachine() { tOpts.EnableAIXExtendedAltivecABI = targetOpts.EnableAIXExtendedAltivecABI; targetMachine.reset(theTarget->createTargetMachine( - llvm::Triple(theTriple), /*CPU=*/targetOpts.cpu, + triple, /*CPU=*/targetOpts.cpu, /*Features=*/featuresStr, /*Options=*/tOpts, /*Reloc::Model=*/CGOpts.getRelocationModel(), /*CodeModel::Model=*/cm, OptLevel)); assert(targetMachine && "Failed to create TargetMachine"); if (cm.has_value()) { - const llvm::Triple triple(theTriple); if ((cm == llvm::CodeModel::Medium || cm == llvm::CodeModel::Large) && triple.getArch() == llvm::Triple::x86_64) { targetMachine->setLargeDataThreshold(CGOpts.LargeDataThreshold); 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(), |