1. A method for parallelizing analysis and optimization in a compiler, the method comprising: identifying a subset of data points of a computer program for processing by a main thread selected from a plurality of hardware threads; placing the subset of data points in a shared data structure by the main thread; concurrently with placing the subset of data points in the shared data structure, retrieving a tuple associated with the subset of data points from the shared data structure by a work thread selected from the plurality of hardware threads; and performing a compiler analysis or optimization on the tuple by the work thread.