Alex3
#1
Hello everyone,
I have an integer and I want to convert it to StringRef in order to set metadata.
setMetadata->(StringRef, MDNode*);
It is there a native LLVM way to do it?
- In the llvm::APSInt Class is toString() method, which seems it is not for this purpose
- itoa and string are not part of LLVM
- stringstream is not part of LLVM
- to_string is not part of LLVM
- any casting method?
Also, I would like to get the metadata and convert it back to integer.
Thank you !
Hi,
I think you may try to use llvm::Twine(int). For example, to convert 30 to string, you can use:
Twine(30).str()
To convert the string back to integer, you can try the StringRef::getAsInteger(unsigned, APInt &). For example:
APInt i;
str.getAsInteger(/radix=/ 10, /output=/ i);
Sincerely,
Logan
Alex3
#3
Thank you for your help!
Almost solved my problem. Now I don’t have any compilation errors. I have only one segfault:
opt: LLVMContext.cpp:147: unsigned int llvm::LLVMContext::getMDKindID(llvm::StringRef) const: Assertion `isValidName(Name) && “Invalid MDNode name”’ failed.
This is due because when I setMetadata() it failes.
StringRef tsts = llvm::Twine(srsr).str();
…
LLVMContext& C = is->getContext();
MDNode* N = MDNode::get(C, MDString::get(C, “path”));
is->setMetadata(tsts, N);
If I put
is->setMetadata(“marked”, N);, it goes ok and the .bc is modified. But if I directly put tsts it failes…
and the definition is :
void Instruction::setMetadata ( StringRef Kind,
MDNode * Node
)
I don’t know how I can use the tsts parameter…
Thank you again !
Alex3
#4
The problem is that I want to pass only srsr which is an int. “marked” was just an example 
Thanks you!
I think the better solution should be:
LLVMContext& C = is->getContext();
Value *values[] = {
ConstantInt::getSigned(Type::getInt64Ty(C), scsr),
MDString::get(C, “path”)
};
lnstr.setMetadata(“your_analysis_name”, MDNode::get(C, values));
So that you can take advantage of the type system of LLVM bitcode, and don’t have to cast the integers from/to strings by yourself.
Logan
Alex3
#6
Yes, it sounds good. I can try tomorrow.
Thank you for your advice !
Alex3
#7
Thank you very much ! It works ! And also I can get metadata accordingly.