From: Jakub Jelinek <jakub@redhat.com>
To: Segher Boessenkool <segher@kernel.crashing.org>
Cc: gcc-patches@gcc.gnu.org
Subject: [PATCH] combine, v2: Don't record for UNDO_MODE pointers into regno_reg_rtx array [PR104985]
Date: Wed, 6 Apr 2022 10:50:40 +0200 [thread overview]
Message-ID: <Yk1UYO1L3l3NUE/F@tucnak> (raw)
In-Reply-To: <20220405215655.GG614@gate.crashing.org>
On Tue, Apr 05, 2022 at 04:56:55PM -0500, Segher Boessenkool wrote:
> > Or there are variant patches in the PR, either a minimal version of
> > this patch, or one that records regno and adjusts all SUBST_MODE uses.
>
> I like this one best I think :-)
>
> > Also, not sure I like very much a function name in all caps, but I wanted
> > to preserve the users and all other SUBST and SUBST_* are also all caps.
> > Yet another possibility would be keep do_SUBST_MODE with the new
> > arguments and
> > #define SUBST_MODE(INTO, NEWVAL) do_SUBST_MODE ((INTO), (NEWVAL))
>
> Like the other things in combine.c do, so please change to that? Which
> means changing less than you do now :-)
>
> Changing this all to not have macros is better of course, and can be
> tastefully done even with C++ (it would use C++ features even :-) ), but
> let's do that all at once, and in stage 1.
>
> > - union { rtx *r; int *i; struct insn_link **l; } where;
> > + union { rtx *r; int *i; rtx m; struct insn_link **l; } where;
>
> NAK. It is not clear at all what "rtx m" means, esp. since there is an
> "rtx *r" already. In the PR you said "machine_mode m", that is clear of
> course, can you do that instead?
So in that case something like this (i.e. the regno variant, renamed
to subst_mode from SUBST_MODE, and naming the union member regno rather
than m)?
And for GCC 13 change do_SUBST_INT to subst_int with int &into arg,
do_SUBST_LINK to subst_link with struct insn_link *&into arg,
and do_SUBST into subst with rtx &into arg?
2022-04-06 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/104985
* combine.cc (struct undo): Add where.regno member.
(do_SUBST_MODE): Rename to ...
(subst_mode): ... this. Change first argument from rtx * into int,
operate on regno_reg_rtx[regno] and save regno into where.regno.
(SUBST_MODE): Remove.
(try_combine): Use subst_mode instead of SUBST_MODE, change first
argument from regno_reg_rtx[whatever] to whatever. For UNDO_MODE, use
regno_reg_rtx[undo->where.regno] instead of *undo->where.r.
(undo_to_marker): For UNDO_MODE, use regno_reg_rtx[undo->where.regno]
instead of *undo->where.r.
(simplify_set): Use subst_mode instead of SUBST_MODE, change first
argument from regno_reg_rtx[whatever] to whatever.
--- gcc/combine.cc.jj 2022-03-30 09:11:42.331261823 +0200
+++ gcc/combine.cc 2022-04-06 10:29:55.333106447 +0200
@@ -382,7 +382,7 @@ struct undo
struct undo *next;
enum undo_kind kind;
union { rtx r; int i; machine_mode m; struct insn_link *l; } old_contents;
- union { rtx *r; int *i; struct insn_link **l; } where;
+ union { rtx *r; int *i; int regno; struct insn_link **l; } where;
};
/* Record a bunch of changes to be undone, up to MAX_UNDO of them.
@@ -761,10 +761,11 @@ do_SUBST_INT (int *into, int newval)
well. */
static void
-do_SUBST_MODE (rtx *into, machine_mode newval)
+subst_mode (int regno, machine_mode newval)
{
struct undo *buf;
- machine_mode oldval = GET_MODE (*into);
+ rtx reg = regno_reg_rtx[regno];
+ machine_mode oldval = GET_MODE (reg);
if (oldval == newval)
return;
@@ -775,15 +776,13 @@ do_SUBST_MODE (rtx *into, machine_mode n
buf = XNEW (struct undo);
buf->kind = UNDO_MODE;
- buf->where.r = into;
+ buf->where.regno = regno;
buf->old_contents.m = oldval;
- adjust_reg_mode (*into, newval);
+ adjust_reg_mode (reg, newval);
buf->next = undobuf.undos, undobuf.undos = buf;
}
-#define SUBST_MODE(INTO, NEWVAL) do_SUBST_MODE (&(INTO), (NEWVAL))
-
/* Similar to SUBST, but NEWVAL is a LOG_LINKS expression. */
static void
@@ -3186,7 +3185,7 @@ try_combine (rtx_insn *i3, rtx_insn *i2,
newpat_dest = gen_rtx_REG (compare_mode, regno);
else
{
- SUBST_MODE (regno_reg_rtx[regno], compare_mode);
+ subst_mode (regno, compare_mode);
newpat_dest = regno_reg_rtx[regno];
}
}
@@ -3576,7 +3575,7 @@ try_combine (rtx_insn *i3, rtx_insn *i2,
ni2dest = gen_rtx_REG (new_mode, REGNO (i2dest));
else
{
- SUBST_MODE (regno_reg_rtx[REGNO (i2dest)], new_mode);
+ subst_mode (REGNO (i2dest), new_mode);
ni2dest = regno_reg_rtx[REGNO (i2dest)];
}
@@ -3712,7 +3711,7 @@ try_combine (rtx_insn *i3, rtx_insn *i2,
newdest = gen_rtx_REG (split_mode, REGNO (i2dest));
else
{
- SUBST_MODE (regno_reg_rtx[REGNO (i2dest)], split_mode);
+ subst_mode (REGNO (i2dest), split_mode);
newdest = regno_reg_rtx[REGNO (i2dest)];
}
}
@@ -4082,7 +4081,7 @@ try_combine (rtx_insn *i3, rtx_insn *i2,
for (undo = undobuf.undos; undo; undo = undo->next)
if (undo->kind == UNDO_MODE)
{
- rtx reg = *undo->where.r;
+ rtx reg = regno_reg_rtx[undo->where.regno];
machine_mode new_mode = GET_MODE (reg);
machine_mode old_mode = undo->old_contents.m;
@@ -4755,7 +4754,8 @@ undo_to_marker (void *marker)
*undo->where.i = undo->old_contents.i;
break;
case UNDO_MODE:
- adjust_reg_mode (*undo->where.r, undo->old_contents.m);
+ adjust_reg_mode (regno_reg_rtx[undo->where.regno],
+ undo->old_contents.m);
break;
case UNDO_LINKS:
*undo->where.l = undo->old_contents.l;
@@ -6819,7 +6819,7 @@ simplify_set (rtx x)
new_dest = gen_rtx_REG (compare_mode, regno);
else
{
- SUBST_MODE (regno_reg_rtx[regno], compare_mode);
+ subst_mode (regno, compare_mode);
new_dest = regno_reg_rtx[regno];
}
Jakub
next prev parent reply other threads:[~2022-04-06 8:50 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-29 7:52 [PATCH] combine: " Jakub Jelinek
2022-04-05 21:56 ` Segher Boessenkool
2022-04-06 8:50 ` Jakub Jelinek [this message]
2022-04-06 16:31 ` [PATCH] combine, v2: " Segher Boessenkool
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=Yk1UYO1L3l3NUE/F@tucnak \
--to=jakub@redhat.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=segher@kernel.crashing.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: 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).