Enabling Efficient Parallelism For Applications With Dependences And Irregular Memory Accesses