Practical analyses and transformations for flow-based parallelism