Binary(op, lhs, rhs), Call(callee, args), Let(name, init)
t1 = a * 2
if t1 > 10 goto B1 else B2
x0 = 0
if (c) x1 = 1 else x2 = 2
x3 = phi(x1, x2)
DF(X) = Union over Y in Succ(X) of (DomFrontier(Y))
SCCP: lattice {undef, const(c), overdefined} + sparse worklist on CFG
# Inspect LLVM IR
clang -O0 -S -emit-llvm foo.c -o - | less