public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Segher Boessenkool <segher@kernel.crashing.org>
To: luoxhu@linux.ibm.com
Cc: gcc-patches@gcc.gnu.org, wschmidt@linux.ibm.com,
	guojiufu@linux.ibm.com, linkw@gcc.gnu.org
Subject: Re: [PATCH] rs6000: Don't split constant oprator when add, move to temp register for future optimization
Date: Fri, 27 Mar 2020 09:33:31 -0500	[thread overview]
Message-ID: <20200327143331.GD22482@gate.crashing.org> (raw)
In-Reply-To: <20200326100643.32487-1-luoxhu@linux.ibm.com>

Hi!

On Thu, Mar 26, 2020 at 05:06:43AM -0500, luoxhu@linux.ibm.com wrote:
> Remove split code from add<mode>3 to allow a later pass to split.
> This allows later logic to hoist out constant load in add instructions.
> In loop, lis+ori could be hoisted out to improve performance compared with
> previous addis+addi (About 15% on typical case), weak point is
> one more register is used and one more instruction is generated.  i.e.:
> 
> addis 3,3,0x8765
> addi 3,3,0x4321
> 
> =>
> 
> lis 9,0x8765
> ori 9,9,0x4321
> add 3,3,9

What does it do overall?  Say, to SPEC.  What does it do to execution
time, and what does it do to binary size?

Do we want something later in the RTL pipeline to make "addi"s etc. again?

> 2020-03-26  Xiong Hu Luo  <luoxhu@linux.ibm.com>
> 
> 	* config/rs6000/rs6000.md (add<mode>3): Remove split code, move constant
> 	  to temp register before add.

This should not be indented, so just:
	* config/rs6000/rs6000.md (add<mode>3): Remove split code, move constant
	to temp register before add.

We have six separate add<mode>3 patterns (three of those are in rs6000.md,
too).  You can write something like
	(add<mode>3 for SDI):
to show which iterator (or mode) this one is for.  This is helpful with
any <mode> or <code> or the like, even if there (currently) is only one
pattern you could mean.

> diff --git a/gcc/testsuite/gcc.target/powerpc/add-const.c b/gcc/testsuite/gcc.target/powerpc/add-const.c
> new file mode 100644
> index 00000000000..e1007247b32
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/add-const.c
> @@ -0,0 +1,18 @@
> +/* { dg-do compile { target { lp64 } } } */
> +/* { dg-options "-O3 -fno-unroll-loops" } */
> +
> +/* Ensure the lis,ori are generated, which indicates they have
> +   been hoisted outside of the loop.  */

This sounds a bit fragile -- but we'll see :-)  It is small code, so it
probably will be fine, it won't change its generated code often.


Segher

  parent reply	other threads:[~2020-03-27 14:33 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-26 10:06 luoxhu
2020-03-26 15:18 ` will schmidt
2020-03-27 14:33 ` Segher Boessenkool [this message]
2020-03-30  3:59   ` luoxhu
2020-04-02 22:16     ` Segher Boessenkool
2020-04-03  6:13       ` luoxhu
2020-04-03 12:13         ` Alan Modra
2020-04-03 21:11           ` Segher Boessenkool
2020-04-03 23:51             ` Alan Modra
2020-04-07 21:47               ` Segher Boessenkool
2020-04-03 21:08         ` 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=20200327143331.GD22482@gate.crashing.org \
    --to=segher@kernel.crashing.org \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=guojiufu@linux.ibm.com \
    --cc=linkw@gcc.gnu.org \
    --cc=luoxhu@linux.ibm.com \
    --cc=wschmidt@linux.ibm.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).