[LLVMdev] int to StringRed conversion

Alexandru Ionut Diaconescu alexandruionutdiaconescu at gmail.com
Fri May 3 01:21:31 PDT 2013


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


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

> Yes, it sounds good. I can try tomorrow.
>
> Thank you for your advice !
>
>
>
> On Thu, May 2, 2013 at 5:43 PM, Logan Chien <tzuhsiang.chien at gmail.com>wrote:
>
>> 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
>>>
>>
>>
>
>
> --
> 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/20130503/34c091d2/attachment.html>


More information about the llvm-dev mailing list