basic block functionality
pre-push