[llvm-dev] Cast a function parameter to GEP

Alberto Barbaro via llvm-dev llvm-dev at lists.llvm.org
Fri Mar 8 23:22:05 PST 2019


Sorry Tim,
I now need to find the value of the constant expression and I found online
a solution like: string value =
cast<ConstantDataArray>(cast<GlobalVariable>(CallInstruction->getOperand(0))->getInitializer())->getAsCString();

This one works but I feel the GEPOperator should be used based on your
comments, so I tried to cast the operator and get the value but I'm not
able to do it.

I cast using GEPOperator *op = dyn_cast<GEPOperator>(CI->getOperand(0));

Could you tell me if it is correct and how to extract the value please?

Thanks

Il giorno sab 9 mar 2019 alle ore 06:26 Alberto Barbaro <
barbaro.alberto at gmail.com> ha scritto:

> Thanks Tim,
> I'll try to solve my problem ASAP, if I cannot maybe I'll some other
> clarifications.
>
> Thanks again
>
> On Sat, Mar 9, 2019, 06:03 Tim Northover <t.p.northover at gmail.com> wrote:
>
>> Hi Alberto,
>>
>> On Sat, 9 Mar 2019 at 05:50, Alberto Barbaro via llvm-dev
>> <llvm-dev at lists.llvm.org> wrote:
>> > i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str1, i32 0, i32 0)
>>
>> Because all of its inputs are Constants, this is actually a
>> GetElementPtrConstantExpr instead of a GetElementPtrInst (the easiest
>> way to tell on sight without context is the extra parens, which the
>> instruction variant never has).
>>
>> The main practical difference between the two is that instances of
>> Constant don't live in a BasicBlock independently, but are referenced
>> directly by each user. When printing the IR this is shown by
>> "inlining" them into the parent Instruction.
>>
>> LLVM has a GEPOperator class to help deal with this issue; it can be
>> used to access the common features of Instructions and Constants.
>> There are similar Operators for other operations because this is quite
>> a common situation.
>>
>> > I think it does not work because str1 is a "private constant". Is there
>> a way to solve it?
>>
>> Broadly true, but the same would apply to any global, not just ones
>> declared constant.
>>
>> Cheers.
>>
>> Tim.
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190309/6fb8b79e/attachment.html>


More information about the llvm-dev mailing list