public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "vmakarov at redhat dot com" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug rtl-optimization/21617] [4.4/4.5/4.6/4.7 Regression] CRC64 algorithm optimization problem on Intel 32-bit Date: Fri, 09 Dec 2011 19:16:00 -0000 [thread overview] Message-ID: <bug-21617-4-t9Ot1EFmC9@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-21617-4@http.gcc.gnu.org/bugzilla/> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21617 Vladimir Makarov <vmakarov at redhat dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |vmakarov at redhat dot com --- Comment #6 from Vladimir Makarov <vmakarov at redhat dot com> 2011-12-09 19:09:52 UTC --- There is small difference in the code which results in such degradation. -O1 generates an insn in the major loop (insn 43 42 44 5 /home/cygnus/vmakarov/build1/trunk/crctest64.c:241 (parallel [ (set (reg/v:SI 77 [ __tab_index ]) (xor:SI (reg:SI 108) (reg:SI 120))) (clobber (reg:CC 17 flags)) ]) 395 {*xorsi_1} (expr_list:REG_DEAD (reg:SI 108) (expr_list:REG_DEAD (reg:SI 120) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil))))) -O2 generates analogous insn (insn 39 38 40 5 /home/cygnus/vmakarov/build1/trunk/crctest64.c:241 (parallel [ (set (reg/v:SI 83 [ __tab_index ]) (xor:SI (reg/v:SI 83 [ __tab_index ]) (reg:SI 143))) (clobber (reg:CC 17 flags)) ]) 395 {*xorsi_1} (expr_list:REG_DEAD (reg:SI 143) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil)))) The reason for the difference because of regmove optimization. The RTL insn in the second variant looks even better but it makes pseudo 83 most frequently used and assigned first by pushing it last to the coloring stack between bunch trivially colorable pseudos. The set of trivially colorable pseudos contains two double word pseudos which need two adjacent hard registers each. Assigning pseudo 83 first (the case is complicated more because some pseudos cross calls) results in presence of only one pair of adjacent hard registers although there are still 2 free hard register for the second double word pseudos but they are not adjacent. It results in spilling of one double word pseudo and code performance degradation. For -O1 analog pseudo 83 (p77) is assigned last after assigning to two double word pseudos and spilling does not occur. To solve the problem we should increase probability of keeping free hard registers adjacent. It can be done by pushing multi-word pseudos last to the coloring stack and as consequence to assign them first by modifying function bucket_allocno_compare_func. I did the problem was solved unfortunately, it results in 2% performance degradation of SPEC2000 perlbmk although there is a small code size improvement on SPEC2000 with this heuristic. On a general note, RA allocation is all about heuristics. So it is possible to find a test where it will work worse than other heuristics. The most important that RA works well in overall (on big credible set of tests). With this point of view IRA is much better than the previous register allocator. But because crc code is important, I'll continue the work on tuning which does not degrade SPEC2000 and which does solve problem.
next prev parent reply other threads:[~2011-12-09 19:11 UTC|newest] Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top [not found] <bug-21617-4@http.gcc.gnu.org/bugzilla/> 2011-06-12 12:38 ` rguenth at gcc dot gnu.org 2011-12-08 3:35 ` pinskia at gcc dot gnu.org 2011-12-08 3:37 ` pinskia at gcc dot gnu.org 2011-12-08 3:53 ` pinskia at gcc dot gnu.org 2011-12-09 19:16 ` vmakarov at redhat dot com [this message] 2011-12-12 21:00 ` vmakarov at gcc dot gnu.org 2011-12-12 21:26 ` [Bug rtl-optimization/21617] [4.4/4.5/4.6 " jakub at gcc dot gnu.org 2012-03-13 15:31 ` [Bug rtl-optimization/21617] [4.5/4.6 " jakub at gcc dot gnu.org 2012-07-02 12:11 ` rguenth at gcc dot gnu.org 2013-04-12 16:18 ` [Bug rtl-optimization/21617] [4.6 " jakub at gcc dot gnu.org
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=bug-21617-4-t9Ot1EFmC9@http.gcc.gnu.org/bugzilla/ \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=gcc-bugs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).