Reminds me of Steele's Rabbit compiler (as noted by Appel and probably others). Always made a lot of sense to me, though I never worked out the details. I thought in terms of every basic block taking arguments (in registers), and every branch passing some arguments. Lexical scoping gives us a way to express common arguments. This should be interesting to read and think about.