[LLVMdev] SSA in the Front End

John Criswell criswell at cs.uiuc.edu
Fri May 27 15:27:55 PDT 2005


Ricardo wrote:
> Hi,
> 
> I have been looking into the code that generates the LLVM assembly in the LLVM front end, but I am
> not very sure if at the time that the llvm_c_expand_body_1 function is called, the SSA form was
> already constructed (each definition dominates all the uses). Can somebody please tell me?

The LLVM GCC frontend does not translate variables directly into LLVM 
virtual regsiters (which must be in SSA form).

Instead, the LLVM GCC frontend simply uses a memory location for each 
variable (e.g. a local variable is allocated via the LLVM alloca 
instruction).  If you use llvm-gcc -S -o file.ll file.c, you can see the 
code that llvm-gcc generates.

Next, gccas (after assembling the LLVM assembly file) runs a pass called 
mem2reg.  This pass finds memory locations that can be promoted to LLVM 
virtual registers and promotes them into registers.  The following 
commands will allow you to see the change:

llvm-as -o file.bc file.ll
opt -mem2reg -o newfile.bc file.bc
llvm-dis -o newfile.ll newfile.bc

If you compare newfile.ll to file.ll, you'll see what the mem2reg 
transformation does.

Using this technique, language frontends don't need to worry about 
maintaining SSA for variables that it generates.  It simply generates 
them as memory locations and the LLVM optimizer fixes it up into more 
efficient code.

-- John T.

> 
> Thanks
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev


-- 
John T. Criswell
Research Programmer
University of Illinois at Urbana-Champaign
"It's today!" said Piglet. "My favorite day," said Pooh.




More information about the llvm-dev mailing list