public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "rsandifo at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug rtl-optimization/98782] [11/12 Regression] Bad interaction between IPA frequences and IRA resulting in spills due to changes in BB frequencies Date: Fri, 31 Dec 2021 17:28:19 +0000 [thread overview] Message-ID: <bug-98782-4-a0a5Fmes4r@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-98782-4@http.gcc.gnu.org/bugzilla/> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98782 rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |rsandifo at gcc dot gnu.org --- Comment #32 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> --- Created attachment 52102 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52102&action=edit Alternative patch This patch is a squash of several ira tweaks that together recover the pre-GCC11 exchange2 performance on aarch64. It isn't ready for trunk yet (hence lack of comments and changelog). It would be great to hear whether/how it works on other targets though. The patch bootstraps on aarch64-linux-gnu and x86_64-linux-gnu, but there are some new scan-assembler failures that need looking at. Quoting from the covering message: The main changes are: (1) Add ira_loop_border_costs to simplify spill cost calculations (NFC intended) (2) Avoid freeing updated costs until the loop node has been fully allocated. This in turn allows: (3) Make improve_allocation work exclusively on updated costs, rather than using a mixture of updated and original costs. One reason this matters is that the register costs only make sense relative to the memory costs, so in some cases, a common register is subtracted from the updated memory cost instead of being added to each individual updated register cost. (4) If a child allocno has a hard register conflict, allow the parent allocno to handle the conflict by spilling to memory throughout the child allocno's loop. This carries the child allocno's full memory cost plus the cost of spilling to memory on entry to the loop and restoring it on exit, but this can still be cheaper than spilling the entire parent allocno. In particular, it helps for allocnos that are live across a loop but not referenced within it, since the child allocno's memory cost is 0 in that case. (5) Extend (4) to cases in which the child allocno is live across a call. The parent then has a free choice between spilling call-clobbered registers around each call (as normal) or spilling them on entry to the loop, keeping the allocno in memory throughout the loop, and restoring them on exit from the loop. (6) Detect <E2><80><9C>soft conflicts<E2><80><9D> in which: - one allocno (A1) is a cap whose (transitive) <E2><80><9C>real<E2><80><9D> allocno is A1' - A1' occurs in loop L1' - the other allocno (A2) is a non-cap allocno - the equivalent of A2 is live across L1' (hence the conflict) but has no references in L1' In this case we can spill A2 around L1' (or perhaps some parent loop) and reuse the same register for A1'. A1 and A2 can then use the same hard register, provided that we make sure not to propagate A1's allocation to A1'.
next prev parent reply other threads:[~2021-12-31 17:28 UTC|newest] Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-01-21 14:31 [Bug rtl-optimization/98782] New: IRA artificially creating spills due to " tnfchris at gcc dot gnu.org 2021-01-21 14:35 ` [Bug rtl-optimization/98782] " jgreenhalgh at gcc dot gnu.org 2021-01-22 10:12 ` fxue at os dot amperecomputing.com 2021-01-29 13:34 ` tnfchris at gcc dot gnu.org 2021-02-05 12:02 ` [Bug rtl-optimization/98782] [11 Regression] Bad interaction between IPA frequences and IRA resulting in spills due to changes in " tnfchris at gcc dot gnu.org 2021-02-23 2:11 ` jiangning.liu at amperecomputing dot com 2021-02-23 12:06 ` rguenth at gcc dot gnu.org 2021-02-26 12:32 ` rguenth at gcc dot gnu.org 2021-11-28 19:07 ` [Bug rtl-optimization/98782] [11/12 " hubicka at gcc dot gnu.org 2021-11-29 1:33 ` jiangning.liu at amperecomputing dot com 2021-11-29 6:59 ` tnfchris at gcc dot gnu.org 2021-12-03 11:44 ` hubicka at gcc dot gnu.org 2021-12-03 11:47 ` hubicka at gcc dot gnu.org 2021-12-07 11:19 ` tnfchris at gcc dot gnu.org 2021-12-07 11:21 ` tnfchris at gcc dot gnu.org 2021-12-07 11:21 ` tnfchris at gcc dot gnu.org 2021-12-07 19:44 ` rsandifo at gcc dot gnu.org 2021-12-07 23:52 ` tnfchris at gcc dot gnu.org 2021-12-08 9:33 ` rsandifo at gcc dot gnu.org 2021-12-08 14:31 ` tnfchris at gcc dot gnu.org 2021-12-08 15:02 ` rsandifo at gcc dot gnu.org 2021-12-09 19:56 ` pthaugen at gcc dot gnu.org 2021-12-09 20:12 ` hubicka at gcc dot gnu.org 2021-12-09 21:27 ` pthaugen at gcc dot gnu.org 2021-12-10 11:36 ` hubicka at gcc dot gnu.org 2021-12-14 14:38 ` tnfchris at gcc dot gnu.org 2021-12-14 14:40 ` hubicka at kam dot mff.cuni.cz 2021-12-14 14:48 ` tnfchris at gcc dot gnu.org 2021-12-14 14:58 ` hubicka at kam dot mff.cuni.cz 2021-12-14 15:07 ` tnfchris at gcc dot gnu.org 2021-12-14 15:08 ` tnfchris at gcc dot gnu.org 2021-12-14 18:16 ` jamborm at gcc dot gnu.org 2021-12-15 12:15 ` tnfchris at gcc dot gnu.org 2021-12-20 18:06 ` rsandifo at gcc dot gnu.org 2021-12-31 17:28 ` rsandifo at gcc dot gnu.org [this message] 2022-01-04 22:26 ` pthaugen at gcc dot gnu.org 2022-01-04 22:29 ` pthaugen at gcc dot gnu.org 2022-01-06 14:53 ` rsandifo at gcc dot gnu.org 2022-01-10 1:29 ` crazylht at gmail dot com 2022-01-11 10:14 ` Jan Hubicka 2022-01-10 14:47 ` cvs-commit at gcc dot gnu.org 2022-01-10 14:47 ` cvs-commit at gcc dot gnu.org 2022-01-10 14:47 ` cvs-commit at gcc dot gnu.org 2022-01-10 14:47 ` cvs-commit at gcc dot gnu.org 2022-01-10 14:52 ` [Bug rtl-optimization/98782] [11 " rsandifo at gcc dot gnu.org 2022-01-11 10:14 ` hubicka at kam dot mff.cuni.cz 2022-01-11 14:22 ` rsandifo 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-98782-4-a0a5Fmes4r@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).