[LLVMdev] Reading the output of clang
Nuno Lopes
nunoplopes at sapo.pt
Thu Aug 2 14:33:59 PDT 2012
Hi Sitvanit,
I assume you want to do some sort of formal verification and/or model
checking of C++ programs.
I've some experience on the subject, so let me give you some pointers.
Some time ago I also asked here on the mailing list for opinions about where
to do these kind of analyses:
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2009-May/005032.html
Daniel Dunbar also provided some great comments:
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2009-May/005048.html
To summarize, I believe the right way to go is to directly convert LLVM IR
to your intermediate representation.
The main advantages of using the LLVM IR are:
- You can use LLVM's alias analysis to cheaply discard the simple aliasing
queries
- You can use LLVM to optimize the code (greatly reduces the verification
time)
- It supports multiple files (it's not something that is easy to do with
clang ASTs directly)
- LLVM IR is pretty low level, so all the complex C++ constructs are
already desugared. For some analyses this may be a con, but for us it's
great.
I would suggest you to implement a ModulePass, which allows you to iterate
over all global symbols (i.e., global variables and functions). You can then
have an instruction visitor that encodes instructions to your intermediate
representation.
Nuno
P.S.: BTW, there's a BMC tool (named LLBMC) implemented on top of LLVM. Our
model checker is not (yet) based on LLVM because of historical reasons.
----- Original Message -----
From: "Sitvanit Ruah" <RUAH at il.ibm.com>
To: "Konstantin Tokarev" <annulen at yandex.ru>
Cc: <llvmdev at cs.uiuc.edu>
Sent: Thursday, August 02, 2012 8:41 AM
Subject: Re: [LLVMdev] Reading the output of clang
> What is the best level to use for backend development? We do not need to
> generate machine code, but rather an intermediate representation that will
> give us the control flow graph.
> Is this the llvm IR?
> If so, how do I read into memory a file that was generated by clang++
> -emit-llvm <source file>.
>
> Thanks,
> Sitvanit
>
> Sitvanit Ruah
> Formal Verification Group
> IBM Haifa Research Laboratory
> Tel: 972-4-828-1249
>
>
>
> From: Konstantin Tokarev <annulen at yandex.ru>
> To: Sitvanit Ruah/Haifa/IBM at IBMIL,
> Cc: llvmdev at cs.uiuc.edu
> Date: 01/08/2012 01:22 PM
> Subject: Re:[LLVMdev] Reading the AST from the bitcode generated by
> clang
>
>
>
>> Hi all,
>> After reading the documentation on clang I still have the following
>> question:
>> How do I read the bitcode generated by clang from a C++ file? I need to
>> have all the AST information in memory.
>
> AST has nothing to do with LLVM bitcode.
>
> --
> Regards,
> Konstantin
More information about the llvm-dev
mailing list