[PATCH] [Refactor] Replace RegionPasses by FunctionPasses
doerfert at cs.uni-saarland.de
Tue Mar 3 05:15:35 PST 2015
let me give you a short answer now and a more detailed one later:
- Compile time: We perform __much__ better on large test with a lot of regions. Here are some examples after one lnt run for a release build.
MultiSource/Benchmarks/tramp3d-v4/tramp3d-v4 -89.42% 345.5400 36.5533 - - SingleSource/Benchmarks/Misc-C++-EH/spirit -78.71% 33.4433 7.1200 - - MultiSource/Applications/kimwitu++/kc -71.26% 77.1700 22.1766 - - MultiSource/Benchmarks/MiBench/consumer-typeset/consumer-typeset -67.55% 65.2370 21.1667 - - SingleSource/UnitTests/DefaultInitDynArrays -50.00% 0.0200 0.0100 - - SingleSource/Benchmarks/Adobe-C++/simple_types_constant_folding -42.39% 8.6267 4.9700 - - MultiSource/Applications/sqlite3/sqlite3 -42.16% 60.4734 34.9800 - - MultiSource/Benchmarks/ASCI_Purple/SMG2000/smg2000 -39.79% 19.6970 11.8601 - - SingleSource/Regression/C++/EH/inlined_cleanup -38.34% 0.0433 0.0267 - - MultiSource/Applications/JM/ldecod/ldecod -37.42% 23.0533 14.4267 - - MultiSource/Applications/oggenc/oggenc -33.81% 24.6900 16.3433 - - SingleSource/Benchmarks/Stanford/Treesort -31.79% 0.0733 0.0500 - - MultiSource/Applications/lemon/lemon -30.80% 2.8467 1.9700 - - SingleSource/Benchmarks/Shootout/strcat -30.72% 0.0433 0.0300 - - MultiSource/Applications/JM/lencod/lencod -28.96% 39.8598 28.3167 - - MultiSource/Benchmarks/PAQ8p/paq8p -26.53% 4.6367 3.4067
Note that for a debug build I more or less always time out on some of these benchmarks after 500s with the old pass system! I admit the changes (especially in the DependenceInfo pass) can be made even more efficient but that is an easy patch I can write afterwards.
- I don't know enough about the new pass manager to say how this change will affect it.
- SCoPs affecting each other are a misconception by design (at least in my opinion). We should make the code generation aware of that (e.g., do not split the exit block of a region at 3 different locations in Polly!). However, this change passes lnt and all unit tests and we detect exactly the same number of SCoPs, that is at least a hint that we can make function passes work. With scalar/phi code generation and without independent blocks and code prepare the impact of one SCoP on another should be even smaller.
I hope you reconsider this change, at least after I provide more accurate
- F412349: msg-20286-67.dat <http://reviews.llvm.org/F412349>
More information about the llvm-commits