Hello, We at ISPRAS still have some SMS patches floating around from the time we have been actively working on them. At the time they were not committed because either of lack of interest or approval but they might be still useful as PR69252 discussion shows. We don’t have much resource now for preparing the patches for approval with changelogs and everything, so we have posted them on github at https://github.com/ispras/gcc-sms. There are also branches with almost the same changes for gcc branches starting from 4.9 (sms-4_9, sms-5, sms-6 branches). Most of fixes there are useful even without applying the non-doloop support patch that was the main goal.
The first ML discussion regarding the patches starts at https://gcc.gnu.org/ml/gcc-patches/2011-07/msg01807.html (below there are many other mail list archive links). Since that time I have rebased patches several times, made minor changes and ran some tests, at least bootstrapping and regtest plus compiling my own gentoo server installation on x86-64. Also, sometimes source were regstrapped on arm and aarch64 under qemu. There are no miscompilations right now known to me but the last few years I didn't run any performance testing. Here in mailing lists only Shiva Chen https://gcc.gnu.org/ml/gcc-patches/2016-07/msg00591.html was interested in modulo scheduler. His interest means he may have some tests which gain profit with his patches, maybe he can also try my patches. Of course we are ready to answer questions and discuss any patch ideas if needed. For reference, here I briefly discuss all patches (in the order they appear on sms* branches at the aforementioned github repo) with a lot of links to old emails: 1) Make find_simple_exit static Minor obvious fix. 2) Remove strange CPU_NONE with all zero costs Previously discussed https://gcc.gnu.org/ml/gcc-patches/2012-04/msg01004.html Having all zero costs seems very strange for modulo scheduling and other passes. 3) Correct extracting loop exit condition Previously discussed, was approved but not committed. https://gcc.gnu.org/ml/gcc-patches/2011-07/msg01803.html https://gcc.gnu.org/ml/gcc-patches/2011-09/msg02049.html https://gcc.gnu.org/ml/gcc-patches/2012-02/msg00479.html 4) Eliminate redundant edges from DDG Previously discussed https://gcc.gnu.org/ml/gcc-patches/2011-07/msg01804.html https://gcc.gnu.org/ml/gcc/2012-07/msg00162.html Unfortunately, the example where this caused failures for me was lost in history, but I suppose this should be obvious with all other patches applied and reg-strapping on several platforms like x86-64, ARM and ia64. Five or six years ago I tested modulo-scheduling changes mostly using regstrap on these platforms. 5) Add additional DDG edges to instructions with clobbers Previous description https://gcc.gnu.org/ml/gcc-patches/2011-12/msg00505.html 6) Correctly delete anti-dep ddg edges for renaming Previous description https://gcc.gnu.org/ml/gcc-patches/2011-12/msg00506.html 7) Add some assertions One assert described https://gcc.gnu.org/ml/gcc-patches/2011-07/msg01808.html Another assert helps to catch wrong schedule when regmoves are disabled, but we try to create them. 8) Extend simple_rhs_p Previous description https://gcc.gnu.org/ml/gcc-patches/2011-07/msg01810.html 9) Revert part of commit 84486 - do not prevent copy propagation in niter_expr This allows to optimize runtime calculations for loop versioning condition. 10) Add new loop pattern support to modulo scheduler Links to almost all emails in the previous discussion. https://gcc.gnu.org/ml/gcc-patches/2011-07/msg01806.html https://gcc.gnu.org/ml/gcc-patches/2011-09/msg02051.html https://gcc.gnu.org/ml/gcc-patches/2011-10/msg00938.html https://gcc.gnu.org/ml/gcc-patches/2011-12/msg00495.html https://gcc.gnu.org/ml/gcc-patches/2011-12/msg01801.html https://gcc.gnu.org/ml/gcc-patches/2012-02/msg00483.html https://gcc.gnu.org/ml/gcc-patches/2012-03/msg01859.html https://gcc.gnu.org/ml/gcc-patches/2012-04/msg00478.html 11) Remove artificial doloop_end pattern for ARM Previously discussed https://gcc.gnu.org/ml/gcc-patches/2011-07/msg01812.html https://gcc.gnu.org/ml/gcc-patches/2012-01/msg00195.html Now it eliminates fake doloop_end pattern for both 32bit and 64bit arm platforms. The problem with such a pattern is that it slows down the loop when SMS doesn't create good schedule. So, I suppose fake pattern is no longer needed with new loop forms supported. 12) Enable SMS by default, also allow regmoves Only for bootstrap and regtest. -- Roman Zhuykov zhr...@ispras.ru