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

Reply via email to