[LLVMdev] where are my phi-nodes?

John McCall rjmccall at apple.com
Mon Sep 13 10:46:30 PDT 2010


On Sep 13, 2010, at 1:15 AM, Duncan Sands wrote:
>> I compiled with "llvm-gcc -emit-llvm test.c -S -o test.ll". Attached to this
>> message are the source and the resulting ll output.
> 
> compile with optimization.  The llvm-gcc front-end "cheats" and stores/loads all
> values to/from memory, avoiding the need to construct phi nodes; instead it lets
> the optimizers do that.  For what it's worth the dragonegg plugin produces phi
> nodes directly, even at -O0.  I don't know what clang does.

If you're talking about variables, clang emits stores and loads, of course.  C/C++
variables specify their semantics in terms of objects in memory;  SSA conversion
is an optimization which does break (obviously invalid) programs.  Any attempt
by the frontend to emit variables in true SSA form is just duplicating this
optimization — in the case of dragonegg, because the SSA conversion is
implicit in how gcc creates the IR it lowers from.

John.



More information about the llvm-dev mailing list