* [PATCH] lower-bitint: Fix a typo in a condition [PR113323]
@ 2024-01-12 9:37 Jakub Jelinek
2024-01-12 9:43 ` Richard Biener
0 siblings, 1 reply; 2+ messages in thread
From: Jakub Jelinek @ 2024-01-12 9:37 UTC (permalink / raw)
To: Richard Biener; +Cc: gcc-patches
Hi!
The following testcase revealed a typo in condition, as the comment
says the intent is
/* If lhs of stmt is large/huge _BitInt SSA_NAME not in m_names
it means it will be handled in a loop or straight line code
at the location of its (ultimate) immediate use, so for
vop checking purposes check these only at the ultimate
immediate use. */
but the condition was using != BITINT_TYPE rather than == BITINT_TYPE,
so e.g. it used bitint_precision_kind on non-BITINT_TYPEs (e.g. on vector
types it will crash because TYPE_PRECISION means something different there,
or on say INTEGER_TYPEs the precision will never be large enough to be
>= bitint_prec_large).
The following patch fixes that, bootstrapped/regtested on x86_64-linux and
i686-linux, ok for trunk?
2024-01-12 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/113323
* gimple-lower-bitint.cc (bitint_dom_walker::before_dom_children): Fix
check for lhs being large/huge _BitInt not in m_names.
* gcc.dg/bitint-68.c: New test.
--- gcc/gimple-lower-bitint.cc.jj 2024-01-11 13:52:46.000000000 +0100
+++ gcc/gimple-lower-bitint.cc 2024-01-11 14:27:26.011875196 +0100
@@ -5513,7 +5513,7 @@ bitint_dom_walker::before_dom_children (
tree lhs = gimple_get_lhs (stmt);
if (lhs
&& TREE_CODE (lhs) == SSA_NAME
- && TREE_CODE (TREE_TYPE (lhs)) != BITINT_TYPE
+ && TREE_CODE (TREE_TYPE (lhs)) == BITINT_TYPE
&& bitint_precision_kind (TREE_TYPE (lhs)) >= bitint_prec_large
&& !bitmap_bit_p (m_names, SSA_NAME_VERSION (lhs)))
/* If lhs of stmt is large/huge _BitInt SSA_NAME not in m_names,
--- gcc/testsuite/gcc.dg/bitint-68.c.jj 2024-01-11 14:41:21.237183889 +0100
+++ gcc/testsuite/gcc.dg/bitint-68.c 2024-01-11 14:40:35.977814727 +0100
@@ -0,0 +1,14 @@
+/* PR tree-optimization/113323 */
+/* { dg-do compile { target bitint575 } } */
+/* { dg-options "-std=c23 -O2" } */
+
+typedef long __attribute__((__vector_size__ (16))) V;
+V u, v;
+_BitInt(535) i;
+
+void
+foo (void)
+{
+ while (i)
+ u = v;
+}
Jakub
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] lower-bitint: Fix a typo in a condition [PR113323]
2024-01-12 9:37 [PATCH] lower-bitint: Fix a typo in a condition [PR113323] Jakub Jelinek
@ 2024-01-12 9:43 ` Richard Biener
0 siblings, 0 replies; 2+ messages in thread
From: Richard Biener @ 2024-01-12 9:43 UTC (permalink / raw)
To: Jakub Jelinek; +Cc: gcc-patches
On Fri, 12 Jan 2024, Jakub Jelinek wrote:
> Hi!
>
> The following testcase revealed a typo in condition, as the comment
> says the intent is
> /* If lhs of stmt is large/huge _BitInt SSA_NAME not in m_names
> it means it will be handled in a loop or straight line code
> at the location of its (ultimate) immediate use, so for
> vop checking purposes check these only at the ultimate
> immediate use. */
> but the condition was using != BITINT_TYPE rather than == BITINT_TYPE,
> so e.g. it used bitint_precision_kind on non-BITINT_TYPEs (e.g. on vector
> types it will crash because TYPE_PRECISION means something different there,
> or on say INTEGER_TYPEs the precision will never be large enough to be
> >= bitint_prec_large).
>
> The following patch fixes that, bootstrapped/regtested on x86_64-linux and
> i686-linux, ok for trunk?
OK
> 2024-01-12 Jakub Jelinek <jakub@redhat.com>
>
> PR tree-optimization/113323
> * gimple-lower-bitint.cc (bitint_dom_walker::before_dom_children): Fix
> check for lhs being large/huge _BitInt not in m_names.
>
> * gcc.dg/bitint-68.c: New test.
>
> --- gcc/gimple-lower-bitint.cc.jj 2024-01-11 13:52:46.000000000 +0100
> +++ gcc/gimple-lower-bitint.cc 2024-01-11 14:27:26.011875196 +0100
> @@ -5513,7 +5513,7 @@ bitint_dom_walker::before_dom_children (
> tree lhs = gimple_get_lhs (stmt);
> if (lhs
> && TREE_CODE (lhs) == SSA_NAME
> - && TREE_CODE (TREE_TYPE (lhs)) != BITINT_TYPE
> + && TREE_CODE (TREE_TYPE (lhs)) == BITINT_TYPE
> && bitint_precision_kind (TREE_TYPE (lhs)) >= bitint_prec_large
> && !bitmap_bit_p (m_names, SSA_NAME_VERSION (lhs)))
> /* If lhs of stmt is large/huge _BitInt SSA_NAME not in m_names,
> --- gcc/testsuite/gcc.dg/bitint-68.c.jj 2024-01-11 14:41:21.237183889 +0100
> +++ gcc/testsuite/gcc.dg/bitint-68.c 2024-01-11 14:40:35.977814727 +0100
> @@ -0,0 +1,14 @@
> +/* PR tree-optimization/113323 */
> +/* { dg-do compile { target bitint575 } } */
> +/* { dg-options "-std=c23 -O2" } */
> +
> +typedef long __attribute__((__vector_size__ (16))) V;
> +V u, v;
> +_BitInt(535) i;
> +
> +void
> +foo (void)
> +{
> + while (i)
> + u = v;
> +}
>
> Jakub
>
>
--
Richard Biener <rguenther@suse.de>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-01-12 9:48 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-12 9:37 [PATCH] lower-bitint: Fix a typo in a condition [PR113323] Jakub Jelinek
2024-01-12 9:43 ` Richard Biener
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).