[LLVMdev] How to get the string value?
Welson Sun
welson.sun at gmail.com
Sat Jan 28 08:29:37 PST 2012
Hey Duncan,
Thanks! I figured out this piece of code finally:
Value *gep = call->getArgOperand(0);
if ( ConstantExpr *pCE = dyn_cast<ConstantExpr>(gep) ) {
Value *firstop = pCE->getOperand(0);
if (GlobalVariable *GV = dyn_cast<GlobalVariable>(firstop)){
Constant *v = GV->getInitializer();
if (ConstantArray *CA = dyn_cast<ConstantArray>(v)) {
StringRef portName(CA->getAsString());
That's some learning experience :-)
Regards,
Welson
On Sat, Jan 28, 2012 at 6:41 AM, Duncan Sands <baldrick at free.fr> wrote:
> Hi Welson,
>
>
> Yes, it is a ConstantExpr! Thank you!
>>
>> Now trying to find a clue in ConstantExpr's functions to get that string
>> :-)
>>
>
> you can get the pointer operand by doing: getOperand(0)
> The i'th index is getOperand(i+1).
>
> Ciao, Duncan.
>
>
>> Regards,
>> Welson
>>
>> On Thu, Jan 26, 2012 at 9:04 PM, Duncan Sands <baldrick at free.fr
>> <mailto:baldrick at free.fr>> wrote:
>>
>> Hi Welson Sun,
>>
>> > Hi, if I have some LLVM code like this:
>> >
>> > @.str = private unnamed_addr constant [7 x i8] c"in_arr\00", align 1
>> > @.str1 = private unnamed_addr constant [8 x i8] c"in_arr2\00",
>> align 1
>> > @.str2 = private unnamed_addr constant [8 x i8] c"out_arr\00",
>> align 1
>> > ...
>> > ...
>> >
>> > call void (...)* @_Z16fooz(i8* *getelementptr inbounds ([7 x i8]*
>> @.str, i64
>> > 0, i64 0)*, i32 0, i32 1024)
>> > ...
>> >
>> > I would like to get the string value of the bold argument, but how?
>> I
>> know it's
>> > a llvm::Value pointer, but it is not a llvm::GetElementPtrInst?
>>
>> it is a ConstantExpr getelementptr. Whenever you see something that
>> looks like
>> an instruction but is printed inline inside another instruction then
>> that means
>> it is actually a constant, a ConstantExpr.
>>
>> Ciao, Duncan.
>>
>> >
>> >
>> > Thanks,
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > ______________________________**_________________
>> > LLVM Developers mailing list
>> > LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
>> http://llvm.cs.uiuc.edu
>>
>> > http://lists.cs.uiuc.edu/**mailman/listinfo/llvmdev<http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev>
>>
>> ______________________________**_________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
>> http://llvm.cs.uiuc.edu
>>
>> http://lists.cs.uiuc.edu/**mailman/listinfo/llvmdev<http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev>
>>
>>
>>
>>
>> --
>> Welson
>>
>> Phone: (408) 418-8385
>> Email: welson.sun at gmail.com <mailto:welson.sun at gmail.com>
>>
>>
>>
>
--
Welson
Phone: (408) 418-8385
Email: welson.sun at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120128/e11d15ff/attachment.html>
More information about the llvm-dev
mailing list