Hello, I am loop over the arguments of a call instruction : ----> for (Value *arg: c->args()){ errs() << *arg << "\n"; arg->print(llvm::errs(), false); errs()<<"\n"; } -----> How can I convert the arg for binary comparison(== etc.)? If I am correct, it is not a string. If the argument is "i32 1", Is there a way to access the content value "1" directly? Thanks -- Abid M. Malik ****************************************************** "I have learned silence from the talkative, toleration from the intolerant, and kindness from the unkind"---Gibran "Success is not for the chosen few, but for the few who choose" --- John Maxwell "Being a good person does not depend on your religion or status in life, your race or skin color, political views or culture. IT DEPENDS ON HOW GOOD YOU TREAT OTHERS"--- Abid "The Universe is talking to us, and the language of the Universe is mathematics."----Abid -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200119/4a5deb55/attachment.html>
Assuming you want to extract the constant number from a Value, you may want to try to cast it to a ConstantInt. For example: if (auto *CI = dyn_cast<ConstantInt>(arg)) { const APInt &Integer = CI->getValue(); // Or if you know that it is a signed (or unsigned), and just want the actual integer then use: int64_t SExtInt = CI->getSExtValue(); // signed uint64_t ZExtInt = CI->getZExtValue(); // unsigned // Now you may use either one of the 3 options above... } Cheers, Ehud. On Sun, Jan 19, 2020 at 5:57 PM Abid Malik via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Hello, > > > I am loop over the arguments of a call instruction : > ----> > > for (Value *arg: c->args()){ > errs() << *arg << "\n"; > arg->print(llvm::errs(), false); > errs()<<"\n"; > } > > -----> > > How can I convert the arg for binary comparison(== etc.)? If I am correct, > it is not a string. If the argument is "i32 1", Is there a way to access > the content value "1" directly? > > Thanks > > -- > Abid M. Malik > ****************************************************** > "I have learned silence from the talkative, toleration from the > intolerant, and kindness from the unkind"---Gibran > "Success is not for the chosen few, but for the few who choose" --- John > Maxwell > "Being a good person does not depend on your religion or status in life, > your race or skin color, political views or culture. IT DEPENDS ON HOW GOOD > YOU TREAT OTHERS"--- Abid > "The Universe is talking to us, and the language of the Universe is > mathematics."----Abid > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200119/e2020621/attachment.html>
On 01/19, Abid Malik via llvm-dev wrote:> How can I convert the arg for binary comparison(== etc.)? If I am correct, > it is not a string. If the argument is "i32 1", Is there a way to access > the content value "1" directly?You don't want to access "1" directly if you want to compare it to something other than a native C++ integer type such as `int/unsigned/long/...`. These are SSA values on which pointer equality works, especially since constants, e.g., i32 1, are unique. Cheers, Johannes -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 228 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200120/c12c711d/attachment.sig>
Thanks, Ehud. Thanks, Johannes. I am trying to compare the call instruction (openMP ) compatibility wrt scheduling, iteration, and chunk size. I think accessing these constant values makes sense to form the set of call of instructions which are compatible. What do you think? Can you elaborate? "These are SSA values on which pointer equality works, especially since constants, e.g., i32 1, are unique." "i32 1" is constant. But how I can use this constant for equality check? It is not a sting or datatype that can be used for binary equality check. Thanks, On Sun, Jan 19, 2020 at 9:02 PM Doerfert, Johannes <jdoerfert at anl.gov> wrote:> On 01/19, Abid Malik via llvm-dev wrote: > > How can I convert the arg for binary comparison(== etc.)? If I am > correct, > > it is not a string. If the argument is "i32 1", Is there a way to access > > the content value "1" directly? > > You don't want to access "1" directly if you want to compare it to > something other than a native C++ integer type such as > `int/unsigned/long/...`. These are SSA values on which pointer equality > works, especially since constants, e.g., i32 1, are unique. > > Cheers, > Johannes >-- Abid M. Malik ****************************************************** "I have learned silence from the talkative, toleration from the intolerant, and kindness from the unkind"---Gibran "Success is not for the chosen few, but for the few who choose" --- John Maxwell "Being a good person does not depend on your religion or status in life, your race or skin color, political views or culture. IT DEPENDS ON HOW GOOD YOU TREAT OTHERS"--- Abid "The Universe is talking to us, and the language of the Universe is mathematics."----Abid -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200120/e5dfa28d/attachment.html>