[LLVMdev] int to StringRed conversion

Logan Chien tzuhsiang.chien at gmail.com
Thu May 2 08:43:04 PDT 2013


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


On Thu, May 2, 2013 at 11:10 PM, Alexandru Ionut Diaconescu <
alexandruionutdiaconescu at gmail.com> wrote:

> The problem is that I want to pass only srsr which is an int. "marked" was
> just an example :)
>
> Thanks you!
>
>
> On Thu, May 2, 2013 at 5:06 PM, Logan Chien <tzuhsiang.chien at gmail.com>wrote:
>
>> I'm not familiar with this, but maybe you can try:
>>
>> StringRef tst = ("marked" + Twine(srsr)).str();
>>
>> It seems that you can't use integer as meta data kind name.
>>
>> Logan
>>
>>
>> On Thu, May 2, 2013 at 10:59 PM, Alexandru Ionut Diaconescu <
>> alexandruionutdiaconescu at gmail.com> wrote:
>>
>>> 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<http://llvm.org/docs/doxygen/html/classllvm_1_1StringRef.html>
>>>   *Kind*,
>>>
>>> MDNode <http://llvm.org/docs/doxygen/html/classllvm_1_1MDNode.html> *  *
>>> Node*
>>> )
>>>
>>> I don't know how I can use the tsts parameter..
>>>
>>> Thank you again !
>>>
>>>
>>> On Thu, May 2, 2013 at 4:42 PM, Logan Chien <tzuhsiang.chien at gmail.com>wrote:
>>>
>>>> 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
>>>>
>>>>
>>>>
>>>>  On Thu, May 2, 2013 at 9:53 PM, Alexandru Ionut Diaconescu <
>>>> alexandruionutdiaconescu at gmail.com> wrote:
>>>>
>>>>>  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 !
>>>>>
>>>>> _______________________________________________
>>>>> LLVM Developers mailing list
>>>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>>>
>>>>>
>>>>
>>>
>>>
>>> --
>>> Best regards,
>>> Alexandru Ionut Diaconescu
>>>
>>
>>
>
>
> --
> Best regards,
> Alexandru Ionut Diaconescu
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130502/e8c5e590/attachment.html>


More information about the llvm-dev mailing list