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
This commit is contained in:
Stephan Herhut 2019-05-24 04:49:56 -07:00 committed by Mehdi Amini
parent 22f1af4400
commit cb348dff8a
2 changed files with 11 additions and 0 deletions

View File

@ -110,6 +110,11 @@ llvm::Constant *ModuleTranslation::getLLVMConstant(llvm::Type *llvmType,
}
return llvm::ConstantVector::get(constants);
}
if (auto stringAttr = attr.dyn_cast<StringAttr>()) {
return llvm::ConstantDataArray::get(
llvmModule->getContext(), ArrayRef<char>{stringAttr.getValue().data(),
stringAttr.getValue().size()});
}
mlirModule.getContext()->emitError(loc, "unsupported constant value");
return nullptr;
}

View File

@ -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*">
}