int to StringRed conversion

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?

  1. In the llvm::APSInt Class is toString() method, which seems it is not for this purpose
  2. itoa and string are not part of LLVM
  3. stringstream is not part of LLVM
  4. to_string is not part of LLVM
  5. 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

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 !

The problem is that I want to pass only srsr which is an int. “marked” was just an example :slight_smile:

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

Yes, it sounds good. I can try tomorrow.

Thank you for your advice !

Thank you very much ! It works ! And also I can get metadata accordingly.