- User Since
- Mar 10 2021, 1:07 PM (14 w, 4 d)
Fri, May 28
Thu, May 27
Wed, May 26
Fixed a failing opt pipeline test.
Addressed reviewer comments, and moved the pass earlier in the pipeline.
May 21 2021
May 18 2021
May 13 2021
I removed the unnecessary conditions, and used the llvm::DenseMap instead.
Implemented a cost model to avoid cloning too much code, and addressed reviewer comments.
May 4 2021
In case anyone is interested, there is some context about this patch over here: https://reviews.llvm.org/D88307
That is a good point, I agree we will need a cost model for the transformation. I have started working on one and gathering more performance stats. Also thanks for sharing CodeMetrics.h, I can add a check for those types of blocks that aren't legal to clone.
There were some formatting issues with the previous diff.
Apr 16 2021
Hi everyone, I wanted to give another progress update on this patch. We have gotten the transformation working on the coremark opportunity resulting in a speedup of over 20% for the benchmark. It also works on some smaller testcases such as std::merge. We are in the process of testing it more extensively and debugging issues that come up. Also there is still some work with cleaning up the codegen, refactoring, and writing test cases. An updated version will be submitted soon.
Mar 23 2021
Hi, I have posted the analysis mentioned above: https://reviews.llvm.org/D99205
Mar 10 2021
Hi, I just wanted to give an update about the pass @amehsan mentioned before. We revised the implementation so that it handles more general cases such as the std::merge example provided above. The core idea remains the same of using an analyze-then-transform approach to first find paths in an FSM that have the opportunity to be threaded, and then transforming them to skip over the expensive switch operation when it is possible to do so.