Optimizing Locality And Parallelism Through Program Reorganization