[LLVMdev] Re: Control flow graph

Chris Lattner sabre at nondot.org
Thu Jun 16 22:16:17 PDT 2005


On Fri, 17 Jun 2005, Manvi Agarwal wrote:
> Hi Chris,

Hi.  FYI, it's usually better to email the llvmdev list with generic llvm 
questions.

> Is it possible to get control flow graph of the application with the llvm
> infrastructure in terms of basic blocks?

Yes, given a BasicBlock*, you can iterate over the pred/succ blocks in the 
CFG like this:

#include "llvm/Support/CFG.h"

   for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
     BasicBlock *OnePredecessor = *PI;
     ...

For successors, s/pred/succ/

> Is there any way of viewing the
> Control flow graph of the application.

Yes, use:
   analyze -print-cfg  X.(bc|ll)
or:
   analyze -print-cfg-only  X.(bc|ll)

These will emit "dot" files that can be turned into a variety of graphics 
formats with the graphviz toolset that you can get on the net.

If you're running on a system with graphviz installed and with 'gv' 
(ghostview), you can even call functions like this from your code or from 
the debugger:

   LLVMFunction->viewCFG()

also ->viewCFGOnly();

> Also, when I compile a C file to llvm assembly code i.e using llvmgcc -S
> option then the output file has lot of "declare" and "typedef" and then
> the "main" starts. Sorry for my naive questions but can you tell me what
> are those.

I wouldn't suggest looking at this code.  This is the raw output of the C 
front-end and has not been cleaned up at all.  I would suggest using 
'llvm-gcc -c', and using llvm-dis on the '.o' file.

> Any document which I can go through so that I can understand
> the llvm assembly file better.

http://llvm.cs.uiuc.edu/docs/LangRef.html

> Actually I am trying to generate VLIW words looking at the assembly file 
> of llvm. Is it possible to do that??

Sure, you can either write your own code generator (not recommended) or 
port the target independent code generator to your target (described in 
the docs).  We currently have no specific support for VLIW targets, but it 
should not be difficult to add (and can probably be shared with the IA64 
target).

-Chris

-- 
http://nondot.org/sabre/
http://llvm.cs.uiuc.edu/




More information about the llvm-dev mailing list