[llvm-dev] Help with bitcast instruction

Alberto Barbaro via llvm-dev llvm-dev at lists.llvm.org
Sun Mar 10 14:54:25 PDT 2019


Hi Tim,
Thanks again for your help. All clear now

Alberto

On Sun, Mar 10, 2019, 08:59 Tim Northover <t.p.northover at gmail.com> wrote:

> Hi Alberto,
>
> > I would like to understand where bitcast is defined because it is not
> defined within libpng.
>
> It's because the function (@png_set) has been defined to take one kind
> of argument, but is being called with another. In this case the
> difference seems to be whether it takes pointers to
> %struct.png_struct_def or %struct.png_struct_def.68.
>
> This kind of situation isn't terribly common, but can happen for
> example in LTO where two modules are linked together, and one of them
> only has an opaque handle for the type to hide the implementation
> (e.g. from plain "struct png_struct_def;" in C). When that happens
> LLVM can't merge the types, so it adds a numeric tag to one of them,
> and then it has to insert bitcasts in the calls like this so that its
> own type system works.
>
> > I also noticed that the @ is not present, what does the missing @ mean?
> I guess it must be an LLVM function.
>
> The @ is only used directly before a global variable (including a
> declared/defined function). In this case it's buried, but it is there
> (@png_set). In other cases, like when you call a function pointer, it
> will be missing entirely.
>
> Cheers.
>
> Tim.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190310/8c5b7d54/attachment.html>


More information about the llvm-dev mailing list