Support multiple basic blocks and "cif" nodes.
commit1773e66003b65894d90b776c70781c1c0847d185
authorJames Y Knight <foom@fuhm.net>
Wed, 23 Dec 2009 01:14:50 +0000 (22 20:14 -0500)
committerJames Y Knight <foom@fuhm.net>
Wed, 23 Dec 2009 01:14:50 +0000 (22 20:14 -0500)
treed1616883240c17dadaa9cff041fb1ec3ff25fb00
parent5156fdbfc571d388e8ce4f42ed4f5214cc21ae36
Support multiple basic blocks and "cif" nodes.

This exposed an error (well, shortcut) I made in treatment of lvars:
they are not SSA form. Thus, I now follow the LLVM-recommended way to
implement SSA transforms: let it do it for me. That is, I use "alloca"
to allocate stackspace for each lvar, and use load/store to read/write
them. This all gets optimized away into registers by the mem2reg llvm
optimization pass.

The upshort is that now:
(llvm-compile '(lambda (x) (if x 'foo 'bar)))
works.
llvm/llvm.lisp