Commits

Xin Tong committed ee1396aaa69
Refactor RLE into stages. After the refactoring, RLE runs in the following phases: Phase 1. we use an iterative data flow to compute whether there is an available value at a given point, we do not yet care about what the value is. Phase 2. we compute the real forwardable value at a given point. Phase 3. we setup the SILValues for the redundant load elimination. Phase 4. we perform the redundant load elimination. Previously we were computing available bit as well as what the available value is every iteration of the data flow. I do not see a compilation time improvement though, but this helps to move to a genset and killset later as we only need to expand Phase 1 into a few smaller phases to compute genset & killset first and then iterate until convergence for the data flow. I verified that we are performing same # of RLE on stdlib before the change. Existing test ensure correctness.