public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [nvptx PATCH] Correct pattern for popcountdi2 insn in nvptx.md.
@ 2023-01-09 13:29 Roger Sayle
  2024-04-12 22:16 ` Thomas Schwinge
  0 siblings, 1 reply; 2+ messages in thread
From: Roger Sayle @ 2023-01-09 13:29 UTC (permalink / raw)
  To: 'GCC Patches'; +Cc: 'Tom de Vries'

[-- Attachment #1: Type: text/plain, Size: 834 bytes --]


The result of a POPCOUNT operation in RTL should have the same mode
as its operand.  This corrects the specification of popcount in
the nvptx backend, splitting the current generic define_insn into
two, one for popcountsi2 and the other for popcountdi2 (the latter
with an explicit truncate).

This patch has been tested on nvptx-none (hosted on x86_64-pc-linux-gnu)
with make and make -k check with no new failures.  This functionality is
already tested by gcc.target/nvptx/popc-[123].c.  Ok for mainline?


2023-01-09  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
	* config/nvptx/nvptx.md (popcount<mode>2): Split into...
	(popcountsi2): define_insn handling SImode popcount.
	(popcountdi2): define_insn handling DImode popcount, with an
	explicit truncate:SI to produce an SImode result.

Thanks in advance,
Roger
--


[-- Attachment #2: patchpc.txt --]
[-- Type: text/plain, Size: 793 bytes --]

diff --git a/gcc/config/nvptx/nvptx.md b/gcc/config/nvptx/nvptx.md
index 740c4de..461540e 100644
--- a/gcc/config/nvptx/nvptx.md
+++ b/gcc/config/nvptx/nvptx.md
@@ -658,11 +658,18 @@
   DONE;
 })
 
-(define_insn "popcount<mode>2"
+(define_insn "popcountsi2"
   [(set (match_operand:SI 0 "nvptx_register_operand" "=R")
-	(popcount:SI (match_operand:SDIM 1 "nvptx_register_operand" "R")))]
+	(popcount:SI (match_operand:SI 1 "nvptx_register_operand" "R")))]
   ""
-  "%.\\tpopc.b%T1\\t%0, %1;")
+  "%.\\tpopc.b32\\t%0, %1;")
+
+(define_insn "popcountdi2"
+  [(set (match_operand:SI 0 "nvptx_register_operand" "=R")
+	(truncate:SI
+	  (popcount:DI (match_operand:DI 1 "nvptx_register_operand" "R"))))]
+  ""
+  "%.\\tpopc.b64\\t%0, %1;")
 
 ;; Multiplication variants
 

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [nvptx PATCH] Correct pattern for popcountdi2 insn in nvptx.md.
  2023-01-09 13:29 [nvptx PATCH] Correct pattern for popcountdi2 insn in nvptx.md Roger Sayle
@ 2024-04-12 22:16 ` Thomas Schwinge
  0 siblings, 0 replies; 2+ messages in thread
From: Thomas Schwinge @ 2024-04-12 22:16 UTC (permalink / raw)
  To: Roger Sayle; +Cc: gcc-patches, Tom de Vries

Hi Roger!

On 2023-01-09T13:29:14+0000, "Roger Sayle" <roger@nextmovesoftware.com> wrote:
> The result of a POPCOUNT operation in RTL should have the same mode
> as its operand.  This corrects the specification of popcount in
> the nvptx backend, splitting the current generic define_insn into
> two, one for popcountsi2 and the other for popcountdi2 (the latter
> with an explicit truncate).
>
> This patch has been tested on nvptx-none (hosted on x86_64-pc-linux-gnu)
> with make and make -k check with no new failures.  This functionality is
> already tested by gcc.target/nvptx/popc-[123].c.

So I compared '-fdump-rtl-all' and '*.s' of current vs. patched for those
three '*.c' files.  It is expected that I only see '(popcount:SI [DI])'
-> '(truncate:SI (popcount:DI [DI]))', but not any actually observable
change, right?

Shouldn't the current erronuous form trigger a '--enable-checking=rtl'
error?

> Ok for mainline?

OK, thanks.


..., and sorry for the great delay!  The chaos that came upon my group
half a year ago, and resulted in having had to switch employers, has not
exactly helped to allow allocating proper time for better learning GCC
back end.  But, fortunately, we've been able to switch employers!


Grüße
 Thomas


> 2023-01-09  Roger Sayle  <roger@nextmovesoftware.com>
>
> gcc/ChangeLog
> 	* config/nvptx/nvptx.md (popcount<mode>2): Split into...
> 	(popcountsi2): define_insn handling SImode popcount.
> 	(popcountdi2): define_insn handling DImode popcount, with an
> 	explicit truncate:SI to produce an SImode result.
>
> Thanks in advance,
> Roger
> --
>
> diff --git a/gcc/config/nvptx/nvptx.md b/gcc/config/nvptx/nvptx.md
> index 740c4de..461540e 100644
> --- a/gcc/config/nvptx/nvptx.md
> +++ b/gcc/config/nvptx/nvptx.md
> @@ -658,11 +658,18 @@
>    DONE;
>  })
>  
> -(define_insn "popcount<mode>2"
> +(define_insn "popcountsi2"
>    [(set (match_operand:SI 0 "nvptx_register_operand" "=R")
> -	(popcount:SI (match_operand:SDIM 1 "nvptx_register_operand" "R")))]
> +	(popcount:SI (match_operand:SI 1 "nvptx_register_operand" "R")))]
>    ""
> -  "%.\\tpopc.b%T1\\t%0, %1;")
> +  "%.\\tpopc.b32\\t%0, %1;")
> +
> +(define_insn "popcountdi2"
> +  [(set (match_operand:SI 0 "nvptx_register_operand" "=R")
> +	(truncate:SI
> +	  (popcount:DI (match_operand:DI 1 "nvptx_register_operand" "R"))))]
> +  ""
> +  "%.\\tpopc.b64\\t%0, %1;")
>  
>  ;; Multiplication variants
>  

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-04-12 22:16 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-09 13:29 [nvptx PATCH] Correct pattern for popcountdi2 insn in nvptx.md Roger Sayle
2024-04-12 22:16 ` Thomas Schwinge

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).