From: Lehua Ding <lehua.ding@rivai.ai>
To: gcc-patches@gcc.gnu.org
Cc: vmakarov@redhat.com, richard.sandiford@arm.com,
juzhe.zhong@rivai.ai, lehua.ding@rivai.ai
Subject: [PATCH V3 5/7] ira: Add all nregs >= 2 pseudos to tracke subreg list
Date: Sun, 12 Nov 2023 20:08:15 +0800 [thread overview]
Message-ID: <20231112120817.2635864-6-lehua.ding@rivai.ai> (raw)
In-Reply-To: <20231112120817.2635864-1-lehua.ding@rivai.ai>
This patch relax the subreg track capability to all subreg registers.
gcc/ChangeLog:
* ira-build.cc (get_reg_unit_size): New.
(has_same_nregs): New.
(ira_set_allocno_class): Adjust.
---
gcc/ira-build.cc | 41 ++++++++++++++++++++++++++++++++++++-----
1 file changed, 36 insertions(+), 5 deletions(-)
diff --git a/gcc/ira-build.cc b/gcc/ira-build.cc
index 13f0f7336ed..f88aeeeeaef 100644
--- a/gcc/ira-build.cc
+++ b/gcc/ira-build.cc
@@ -607,6 +607,37 @@ ira_create_allocno (int regno, bool cap_p,
return a;
}
+/* Return single register size of allocno A. */
+static poly_int64
+get_reg_unit_size (ira_allocno_t a)
+{
+ enum reg_class aclass = ALLOCNO_CLASS (a);
+ gcc_assert (aclass != NO_REGS);
+ machine_mode mode = ALLOCNO_MODE (a);
+ int nregs = ALLOCNO_NREGS (a);
+ poly_int64 block_size = REGMODE_NATURAL_SIZE (mode);
+ int nblocks = get_nblocks (mode);
+ gcc_assert (nblocks % nregs == 0);
+ return block_size * (nblocks / nregs);
+}
+
+/* Return true if TARGET_CLASS_MAX_NREGS and TARGET_HARD_REGNO_NREGS results is
+ same. It should be noted that some targets may not implement these two very
+ uniformly, and need to be debugged step by step. For example, in V3x1DI mode
+ in AArch64, TARGET_CLASS_MAX_NREGS returns 2 but TARGET_HARD_REGNO_NREGS
+ returns 3. They are in conflict and need to be repaired in the Hook of
+ AArch64. */
+static bool
+has_same_nregs (ira_allocno_t a)
+{
+ for (int i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ if (REGNO_REG_CLASS (i) != NO_REGS
+ && reg_class_subset_p (REGNO_REG_CLASS (i), ALLOCNO_CLASS (a))
+ && ALLOCNO_NREGS (a) != hard_regno_nregs (i, ALLOCNO_MODE (a)))
+ return false;
+ return true;
+}
+
/* Set up register class for A and update its conflict hard
registers. */
void
@@ -624,12 +655,12 @@ ira_set_allocno_class (ira_allocno_t a, enum reg_class aclass)
if (aclass == NO_REGS)
return;
- /* SET the unit_size of one register. */
- machine_mode mode = ALLOCNO_MODE (a);
- int nregs = ira_reg_class_max_nregs[aclass][mode];
- if (nregs == 2 && maybe_eq (GET_MODE_SIZE (mode), nregs * UNITS_PER_WORD))
+ gcc_assert (!ALLOCNO_TRACK_SUBREG_P (a));
+ /* Set unit size and track_subreg_p flag for pseudo which need occupied multi
+ hard regs. */
+ if (ALLOCNO_NREGS (a) > 1 && has_same_nregs (a))
{
- ALLOCNO_UNIT_SIZE (a) = UNITS_PER_WORD;
+ ALLOCNO_UNIT_SIZE (a) = get_reg_unit_size (a);
ALLOCNO_TRACK_SUBREG_P (a) = true;
return;
}
--
2.36.3
next prev parent reply other threads:[~2023-11-12 12:08 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-12 12:08 [PATCH V3 0/7] ira/lra: Support subreg coalesce Lehua Ding
2023-11-12 12:08 ` [PATCH V3 1/7] df: Add DF_LIVE_SUBREG problem Lehua Ding
2023-11-13 22:38 ` Vladimir Makarov
2023-11-14 8:14 ` Richard Biener
2023-11-14 8:38 ` Lehua Ding
2023-11-14 9:03 ` Richard Biener
2023-11-14 14:52 ` Vladimir Makarov
2023-11-14 17:18 ` Vladimir Makarov
2023-11-14 18:29 ` Vladimir Makarov
2023-11-20 20:11 ` Richard Sandiford
2023-11-21 6:35 ` Lehua Ding
2023-11-12 12:08 ` [PATCH V3 2/7] ira: Switch to live_subreg data Lehua Ding
2023-11-14 20:26 ` Vladimir Makarov
2023-11-12 12:08 ` [PATCH V3 3/7] ira: Support subreg live range track Lehua Ding
2023-11-14 20:37 ` Vladimir Makarov
2023-11-12 12:08 ` [PATCH V3 4/7] ira: Support subreg copy Lehua Ding
2023-11-16 21:13 ` Vladimir Makarov
2023-11-17 2:06 ` Lehua Ding
2023-11-17 14:05 ` Vladimir Makarov
2023-11-18 8:00 ` Lehua Ding
2023-11-18 8:06 ` Sam James
2023-11-18 8:16 ` Lehua Ding
2023-11-18 8:24 ` Sam James
2023-11-18 8:27 ` Lehua Ding
2023-11-12 12:08 ` Lehua Ding [this message]
2023-11-16 21:14 ` [PATCH V3 5/7] ira: Add all nregs >= 2 pseudos to tracke subreg list Vladimir Makarov
2023-11-12 12:08 ` [PATCH V3 6/7] lra: Switch to live_subreg data flow Lehua Ding
2023-11-12 12:08 ` [PATCH V3 7/7] lra: Support subreg live range track and conflict detect Lehua Ding
2023-11-13 16:43 ` [PATCH V3 0/7] ira/lra: Support subreg coalesce Dimitar Dimitrov
2023-11-15 2:10 ` Lehua Ding
2023-11-13 19:37 ` Vladimir Makarov
2023-11-14 5:37 ` Lehua Ding
2023-11-14 23:33 ` Peter Bergner
2023-11-14 23:22 ` Peter Bergner
2023-11-15 3:12 ` Lehua Ding
2023-11-15 3:33 ` Peter Bergner
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=20231112120817.2635864-6-lehua.ding@rivai.ai \
--to=lehua.ding@rivai.ai \
--cc=gcc-patches@gcc.gnu.org \
--cc=juzhe.zhong@rivai.ai \
--cc=richard.sandiford@arm.com \
--cc=vmakarov@redhat.com \
/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: link
Be 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).