[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