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 ! -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130502/81aaf1ab/attachment.html>
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 > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130502/d7a38ca6/attachment.html>
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 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130502/756e6575/attachment.html>
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/a57d5e0a/attachment.html>
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>