register allocation works but peephole optimizer somehow breaks the code...
peephole optimizer was being too aggressive