[LLVMdev] Documentation of bitcasts in calls

Thomas Ströder stroeder at informatik.rwth-aachen.de
Mon Jul 13 07:09:15 PDT 2015


Dear James and Jeremy,

Thanks for the quick help!
While I found the documentation for the textual IR, I didn't find any
for the bitcode. Could you point me to some documentation about its
syntax and semantics?

Best regards,

  Thomas


Am 13.07.2015 um 15:00 schrieb James Molloy:
> Hi Thomas,
> 
> That syntax is expressing a ConstantExpr of type BitCast.
> 
> I echo Jeremy's comment that the textual IR isn't meant to be parsed by
> non-LLVM tools - you'd have much better stability using bitcode instead,
> which has a backwards-compatibility guarantee.
> 
> Cheers,
> 
> James
> 
> On Mon, 13 Jul 2015 at 13:35 Jeremy Lakeman <Jeremy.Lakeman at gmail.com
> <mailto:Jeremy.Lakeman at gmail.com>> wrote:
> 
>     Textual LLVM IR is not guaranteed to be stable between versions.
>     Even LLVM's parser is not guaranteed to be backwards compatible.
> 
>     There was/is a move afoot to remove types from pointers, so explicit
>     bitcasts are no longer required or used. Instead each instruction
>     that uses a pointer will also take a type parameter for that pointer.
> 
>     Casts that don't change the value, don't result in machine
>     instructions anyway.
> 
> 
> 
>     On Mon, Jul 13, 2015 at 9:16 PM, Thomas Ströder
>     <stroeder at informatik.rwth-aachen.de
>     <mailto:stroeder at informatik.rwth-aachen.de>> wrote:
> 
>         Dear all,
> 
>         I just stumbled over the following instruction in the LLVM IR of a C
>         program compiled with clang:
> 
>         %26 = call i32 (...)* bitcast (i32 (i32, i32, i32, i32, i32)*
>         @KeWaitForSingleObject to i32 (...)*)(i32 %23, i32 %24, i32 %25,
>         i32 0,
>         i32 0)
> 
>         Since our LLVM Parser choked on this instruction, I tried to
>         check the
>         documentation, but did not find anything about such nested bitcasts
>         within calls. What is the exact syntax and semantics (while I
>         can guess
>         the latter, especially the former is interesting for me when
>         building a
>         parser for LLVM IR) for such instructions and/or where is this
>         documented? In particular, the parantheses around the arguments
>         of the
>         bitcast are confusing me.
> 
>         Alternatively, is there a way to tell clang not to inline such
>         bitcasts,
>         but have them in a separate instruction before and use the
>         result in the
>         call?
> 
>         Best regards,
> 
>           Thomas
> 
> 
>         --
>         Thomas Ströder        mailto:stroeder at informatik.rwth-aachen.de
>         <mailto:stroeder at informatik.rwth-aachen.de>
>         LuFG Informatik 2     http://verify.rwth-aachen.de/stroeder
>         <https://urldefense.proofpoint.com/v2/url?u=http-3A__verify.rwth-2Daachen.de_stroeder&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=6drm1kA9bTnON-PUHJYeus9Hrihu1CUkeWU81YdAJRU&s=D6tPQqOTGpv0s0KRdAiiNWkQ8M5n7NWhgEnD0xxxD84&e=>
>         RWTH Aachen           phone: +49 241 80-21241
>         <tel:%2B49%20241%2080-21241>
> 
> 
>         _______________________________________________
>         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
> 
> 
>     _______________________________________________
>     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
> 

-- 
Thomas Ströder        mailto:stroeder at informatik.rwth-aachen.de
LuFG Informatik 2     http://verify.rwth-aachen.de/stroeder
RWTH Aachen           phone: +49 241 80-21241

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150713/cf09eaee/attachment.sig>


More information about the llvm-dev mailing list