summaryrefslogtreecommitdiffstats
path: root/mlir/lib/Target/LLVMIR/ConvertFromLLVMIR.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mlir/lib/Target/LLVMIR/ConvertFromLLVMIR.cpp')
-rw-r--r--mlir/lib/Target/LLVMIR/ConvertFromLLVMIR.cpp38
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);
OpenPOWER on IntegriCloud