Commits

Xin Tong committed cc1dda478e6
Move to a genset and killset for the dataflow in redundant load elimination. Previously we process every instruction every time the data flow re-iterates. This is very inefficient. In addition to moving to genset and killset, we also group function into OneIterationFunction which we know that the data flow would converge in 1 iteration and functions that requre the iterative data flow, mostly due to backedges in loops. we process them differently. I observed that there are ~93% of the functions that require just a single iteration to perform the RLE. But the other 7% accounts for 2321 (out of 6318) of the redundant loads we eliminated. This change reduces RLE compilation from 4.1% to 2.7% of the entire compilation time (frontend+OPT+LLVM) on stdlib with -O. This represents 6.9% of the time spent in SILOptimizations (38.8%). ~2 weeks ago, RLE was taking 1.9% of the entire compilation time. It rose to 4.1% mostly due to that we are now eliminating many more redundant loads (mostly thank to Erik's integragtion of escape analysis in alias analysis). i.e. 3945 redundant loads elimnated before Erik's change to 6318 redundant loads eliminated now.