public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Segher Boessenkool <segher@kernel.crashing.org>
To: Xionghu Luo <luoxhu@linux.ibm.com>
Cc: gcc-patches@gcc.gnu.org, dje.gcc@gmail.com,
	wschmidt@linux.ibm.com, guojiufu@linux.ibm.com,
	linkw@gcc.gnu.org
Subject: Re: [PATCH] rs6000: Remove unspecs for vec_mrghl[bhw]
Date: Tue, 8 Jun 2021 18:25:43 -0500	[thread overview]
Message-ID: <20210608232543.GC18427@gate.crashing.org> (raw)
In-Reply-To: <20210524090213.2813103-1-luoxhu@linux.ibm.com>

On Mon, May 24, 2021 at 04:02:13AM -0500, Xionghu Luo wrote:
> vmrghb only accepts permute index {0, 16, 1, 17, 2, 18, 3, 19, 4, 20,
> 5, 21, 6, 22, 7, 23} no matter for BE or LE in ISA, similarly for vmrghlb.

(vmrglb)

> +  if (BYTES_BIG_ENDIAN)
> +    emit_insn (
> +      gen_altivec_vmrghb_direct (operands[0], operands[1], operands[2]));
> +  else
> +    emit_insn (
> +      gen_altivec_vmrglb_direct (operands[0], operands[2], operands[1]));

Please don't indent like that, it doesn't match what we do elsewhere.
For better or for worse (for worse imo), we use deep hanging indents.
If you have to, you can do something like

  rtx insn;
  if (BYTES_BIG_ENDIAN)
    insn = gen_altivec_vmrghb_direct (operands[0], operands[1], operands[2]);
  else
    insn = gen_altivec_vmrglb_direct (operands[0], operands[2], operands[1]);
  emit_insn (insn);

(this is better even, in that it has only one emit_insn), or even

  rtx (*fun) () = BYTES_BIG_ENDIAN ? gen_altivec_vmrghb_direct
				   : gen_altivec_vmrglb_direct;
  if (!BYTES_BIG_ENDIAN)
    std::swap (operands[1], operands[2]);
  emit_insn (fun (operands[0], operands[1], operands[2]));

Well, C++ does not allow that last example like that, sigh, so
  rtx (*fun) (rtx, rtx, rtx) = BYTES_BIG_ENDIAN ? gen_altivec_vmrghb_direct
						: gen_altivec_vmrglb_direct;

This is shorter than the other two options ;-)

> +(define_insn "altivec_vmrghb_direct"
>    [(set (match_operand:V16QI 0 "register_operand" "=v")
> +    (vec_select:V16QI

This should be indented one space more.

>    "TARGET_ALTIVEC"
>    "@
> -   xxmrghw %x0,%x1,%x2
> -   vmrghw %0,%1,%2"
> +  xxmrghw %x0,%x1,%x2
> +  vmrghw %0,%1,%2"

The original indent was correct, please restore.

> -      emit_insn (gen_altivec_vmrghw_direct (operands[0], ve, vo));
> +      emit_insn (gen_altivec_vmrghw_direct_v4si (operands[0], ve, vo));

When you see a mode as part of a pattern name, chances are that it will
be a good candidate for using parameterized names with.  (But don't do
that now, just keep it in mind as a nice cleanup to do).

> @@ -23022,8 +23022,8 @@ altivec_expand_vec_perm_const (rtx target, rtx op0, rtx op1,
>         : CODE_FOR_altivec_vmrglh_direct),
>        {  0,  1, 16, 17,  2,  3, 18, 19,  4,  5, 20, 21,  6,  7, 22, 23 } },
>      { OPTION_MASK_ALTIVEC,
> -      (BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghw_direct
> -       : CODE_FOR_altivec_vmrglw_direct),
> +      (BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghw_direct_v4si
> +       : CODE_FOR_altivec_vmrglw_direct_v4si),

The correct way is to align the ? and the : (or put everything on one
line of course, if that fits)

The parens around this are not needed btw, and are a distraction.

> --- a/gcc/testsuite/gcc.target/powerpc/builtins-1.c
> +++ b/gcc/testsuite/gcc.target/powerpc/builtins-1.c
> @@ -317,10 +317,10 @@ int main ()
>  /* { dg-final { scan-assembler-times "vctuxs" 2 } } */
>  
>  /* { dg-final { scan-assembler-times "vmrghb" 4 { target be } } } */
> -/* { dg-final { scan-assembler-times "vmrghb" 5 { target le } } } */
> +/* { dg-final { scan-assembler-times "vmrghb" 6 { target le } } } */
>  /* { dg-final { scan-assembler-times "vmrghh" 8 } } */
> -/* { dg-final { scan-assembler-times "xxmrghw" 8 } } */
> -/* { dg-final { scan-assembler-times "xxmrglw" 8 } } */
> +/* { dg-final { scan-assembler-times "xxmrghw" 4 } } */
> +/* { dg-final { scan-assembler-times "xxmrglw" 4 } } */
>  /* { dg-final { scan-assembler-times "vmrglh" 8 } } */
>  /* { dg-final { scan-assembler-times "xxlnor" 6 } } */
>  /* { dg-final { scan-assembler-times {\mvpkudus\M} 1 } } */
> @@ -347,7 +347,7 @@ int main ()
>  /* { dg-final { scan-assembler-times "vspltb" 6 } } */
>  /* { dg-final { scan-assembler-times "vspltw" 0 } } */
>  /* { dg-final { scan-assembler-times "vmrgow" 8 } } */
> -/* { dg-final { scan-assembler-times "vmrglb" 5 { target le } } } */
> +/* { dg-final { scan-assembler-times "vmrglb" 4 { target le } } } */
>  /* { dg-final { scan-assembler-times "vmrglb" 6 { target be } } } */
>  /* { dg-final { scan-assembler-times "vmrgew" 8 } } */
>  /* { dg-final { scan-assembler-times "vsplth" 8 } } */

Are those changes correct?  It looks like a vmrglb became a vmrghb, and
that 4 each of xxmrghw and xxmrglw disappeared?  Both seem wrong?


Segher

  parent reply	other threads:[~2021-06-08 23:26 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-24  9:02 Xionghu Luo
2021-06-07  5:09 ` Ping: " Xionghu Luo
2021-06-08 23:25 ` Segher Boessenkool [this message]
2021-06-09  8:03   ` Xionghu Luo
2021-06-09 11:57     ` Segher Boessenkool
2021-06-30  1:47     ` Ping: " Xionghu Luo
2021-09-06  0:54       ` Ping ^ 2: " Xionghu Luo
2021-10-12 22:51         ` David Edelsohn
2021-10-13  1:59           ` Xionghu Luo

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=20210608232543.GC18427@gate.crashing.org \
    --to=segher@kernel.crashing.org \
    --cc=dje.gcc@gmail.com \
    --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).