Extracting task-level parallelism from a sequential program and coarse-grain parallelism from irregular loops