本文整理汇总了C++中StringPtr::getMetadata方法的典型用法代码示例。如果您正苦于以下问题:C++ StringPtr::getMetadata方法的具体用法?C++ StringPtr::getMetadata怎么用?C++ StringPtr::getMetadata使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StringPtr
的用法示例。
在下文中一共展示了StringPtr::getMetadata方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: createStringConst
// Emit constants
ValueBuilder BlockBuilder::createStringConst(const String& value) {
StringPtr type = StringType::get(getNativeContext());
// get partial types for string
llvm::Type* charType = llvm::IntegerType::get(*m_context, 16);
llvm::Type* sizeType = llvm::IntegerType::get(*m_context, 32);
llvm::ArrayType* bufferType = llvm::ArrayType::get(charType, value.length());
// generate size
llvm::Constant* size = llvm::ConstantInt::get(*m_context, llvm::APInt(32, value.length(), false));
// generate buffer
llvm::Constant* buffer = 0; {
std::vector<llvm::Constant*> bufferConst;
for (int i = 0; i < value.length(); ++i) {
UChar c = value[i];
llvm::Constant* value = llvm::ConstantInt::get(*m_context, llvm::APInt(16, c, false));
bufferConst.push_back(value);
}
buffer = llvm::ConstantArray::get(bufferType, bufferConst);
}
// generate string type
std::vector<llvm::Type*> elements;
elements.push_back(sizeType);
elements.push_back(bufferType);
llvm::StructType* stringCstType = llvm::StructType::get(*m_context, elements);
// generate string
llvm::Constant* string = llvm::ConstantStruct::get(stringCstType, size, buffer, NULL);
llvm::GlobalVariable* stringCst = new llvm::GlobalVariable(
*m_module,
stringCstType,
true,
llvm::GlobalValue::PrivateLinkage,
string,
"string.cst"
);
stringCst->setUnnamedAddr(true); // Binary equal strings must be merged
llvm::Type* stringType = type->getMetadata()->getBackendVariableType();
llvm::Value* result = new llvm::BitCastInst(stringCst, stringType, "string.val", m_block);
return ValueBuilder(*this, result, type);
}