Commutativity analysis for software parallelization: letting program transformations see the big picture