From: Stephan Herhut Date: Fri, 24 May 2019 11:49:56 +0000 (-0700) Subject: Add support for llvm.constant with StringAttr as value. X-Git-Tag: llvmorg-11-init~1466^2~1615 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cb348dff8aaceb21fd8ccb0ae9c310c5eba3f0e1;p=platform%2Fupstream%2Fllvm.git Add support for llvm.constant with StringAttr as value. These are translated to an llvm::ConstantDataArray on translation to llvm IR proper. -- PiperOrigin-RevId: 249813111 --- diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp index ff3d6b0..533c1ef 100644 --- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp @@ -110,6 +110,11 @@ llvm::Constant *ModuleTranslation::getLLVMConstant(llvm::Type *llvmType, } return llvm::ConstantVector::get(constants); } + if (auto stringAttr = attr.dyn_cast()) { + return llvm::ConstantDataArray::get( + llvmModule->getContext(), ArrayRef{stringAttr.getValue().data(), + stringAttr.getValue().size()}); + } mlirModule.getContext()->emitError(loc, "unsupported constant value"); return nullptr; } diff --git a/mlir/test/Target/llvmir.mlir b/mlir/test/Target/llvmir.mlir index fca0475..36641b3 100644 --- a/mlir/test/Target/llvmir.mlir +++ b/mlir/test/Target/llvmir.mlir @@ -819,3 +819,9 @@ func @intpointerconversion(%arg0 : !llvm.i32) -> !llvm.i32 { llvm.return %2 : !llvm.i32 } +func @stringconstant() -> !llvm<"i8*"> { + %1 = llvm.constant("Hello world!") : !llvm<"i8*"> + // CHECK: ret [12 x i8] c"Hello world!" + llvm.return %1 : !llvm<"i8*"> +} +