diff options
Diffstat (limited to 'mlir/lib/Target/LLVMIR/ConvertFromLLVMIR.cpp')
| -rw-r--r-- | mlir/lib/Target/LLVMIR/ConvertFromLLVMIR.cpp | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/mlir/lib/Target/LLVMIR/ConvertFromLLVMIR.cpp b/mlir/lib/Target/LLVMIR/ConvertFromLLVMIR.cpp index fd4e4134d8b..6cf975bcce2 100644 --- a/mlir/lib/Target/LLVMIR/ConvertFromLLVMIR.cpp +++ b/mlir/lib/Target/LLVMIR/ConvertFromLLVMIR.cpp @@ -215,6 +215,37 @@ Attribute Importer::getConstantAsAttr(llvm::Constant *value) { return Attribute(); } +/// Converts LLVM global variable linkage type into the LLVM dialect predicate. +static LLVM::Linkage +processLinkage(llvm::GlobalVariable::LinkageTypes linkage) { + switch (linkage) { + case llvm::GlobalValue::PrivateLinkage: + return LLVM::Linkage::Private; + case llvm::GlobalValue::InternalLinkage: + return LLVM::Linkage::Internal; + case llvm::GlobalValue::AvailableExternallyLinkage: + return LLVM::Linkage::AvailableExternally; + case llvm::GlobalValue::LinkOnceAnyLinkage: + return LLVM::Linkage::Linkonce; + case llvm::GlobalValue::WeakAnyLinkage: + return LLVM::Linkage::Weak; + case llvm::GlobalValue::CommonLinkage: + return LLVM::Linkage::Common; + case llvm::GlobalValue::AppendingLinkage: + return LLVM::Linkage::Appending; + case llvm::GlobalValue::ExternalWeakLinkage: + return LLVM::Linkage::ExternWeak; + case llvm::GlobalValue::LinkOnceODRLinkage: + return LLVM::Linkage::LinkonceODR; + case llvm::GlobalValue::WeakODRLinkage: + return LLVM::Linkage::WeakODR; + case llvm::GlobalValue::ExternalLinkage: + return LLVM::Linkage::External; + } + + llvm_unreachable("unhandled linkage type"); +} + GlobalOp Importer::processGlobal(llvm::GlobalVariable *GV) { auto it = globals.find(GV); if (it != globals.end()) @@ -224,9 +255,10 @@ GlobalOp Importer::processGlobal(llvm::GlobalVariable *GV) { Attribute valueAttr; if (GV->hasInitializer()) valueAttr = getConstantAsAttr(GV->getInitializer()); - GlobalOp op = b.create<GlobalOp>(UnknownLoc::get(context), - processType(GV->getValueType()), - GV->isConstant(), GV->getName(), valueAttr); + GlobalOp op = b.create<GlobalOp>( + UnknownLoc::get(context), processType(GV->getValueType()), + GV->isConstant(), processLinkage(GV->getLinkage()), GV->getName(), + valueAttr); if (GV->hasInitializer() && !valueAttr) { Region &r = op.getInitializerRegion(); currentEntryBlock = b.createBlock(&r); |

