[LLVMdev] where are my phi-nodes?

John McCall
Mon, 13 Sep 2010 17:46:30 -0000

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.