use a different variable for type propagation
do not add jumps in exit block
make all storeouts immediately before call instructions
use generic load function
fix ordering of rules in DOT expressions