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 compiler analysis on the tuple by the work thread in parallel with at least one other work thread performing compiler analysis on another tuple, wherein performing the compiler analysis on the tuple comprises: initializing data flow sets for data flow calculations; and performing the data flow calculations on the subset of data points by the work thread.