> Am 11.05.2026 um 16:48 schrieb Artemiy Volkov <[email protected]>:
> 
> The precondition for (view_convert (BIT_FIELD_REF)) simplification at
> match.pd:5881 last fixed in r16-4735-g44c27171c36a91 is still wrong,
> as it allows a vector type to be converted to/from _BitInt types (for
> which precision can be smaller than size).  Address this by always
> checking type_has_mode_precision_p () for all integer types.  (This fix
> was posted by Richard B. at
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125259#c5.)
> 
> Add a testcase as reduced in the PR as tree-ssa/pr125259.c.
> 
> Bootstrapped and regtested on aarch64, arm, and x86_64.
> 
> OK for trunk and 16?

Ok

Richard 

>        PR middle-end/125259
> 
> gcc/ChangeLog:
> 
>        * match.pd: Fix the view_convert (BIT_FIELD_REF) pattern.
> 
> gcc/testsuite/ChangeLog:
> 
>        * gcc.dg/tree-ssa/pr125259.c: New test.
> ---
> gcc/match.pd                             |  6 +++---
> gcc/testsuite/gcc.dg/tree-ssa/pr125259.c | 14 ++++++++++++++
> 2 files changed, 17 insertions(+), 3 deletions(-)
> create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr125259.c
> 
> diff --git a/gcc/match.pd b/gcc/match.pd
> index 198e2e7202e..d612f8bbc59 100644
> --- a/gcc/match.pd
> +++ b/gcc/match.pd
> @@ -5881,9 +5881,9 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
>   (view_convert (BIT_FIELD_REF@0 @1 @2 @3))
>   (if (is_gimple_reg_type (type)
>        && (!INTEGRAL_TYPE_P (type)
> -       || !INTEGRAL_TYPE_P (TREE_TYPE (@0))
> -       || (type_has_mode_precision_p (type)
> -           && type_has_mode_precision_p (TREE_TYPE (@0)))))
> +       || type_has_mode_precision_p (type))
> +       && (!INTEGRAL_TYPE_P (TREE_TYPE (@0))
> +       || type_has_mode_precision_p (TREE_TYPE (@0))))
>    (BIT_FIELD_REF:type @1 @2 @3)))
> 
> /* For integral conversions with the same precision or pointer
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr125259.c 
> b/gcc/testsuite/gcc.dg/tree-ssa/pr125259.c
> new file mode 100644
> index 00000000000..f9596b798ae
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr125259.c
> @@ -0,0 +1,14 @@
> +/* { dg-do compile { target bitint } } */
> +/* { dg-options "-O2 -fdump-tree-forwprop1" } */
> +
> +typedef __attribute__((__vector_size__(4))) char V4;
> +typedef __attribute__((__vector_size__(8))) char V8;
> +
> +_BitInt(17) foo(V8 *xx)
> +{
> +    V8 x = *xx;
> +    V4 v = *(V4 *)&x;
> +    return *(_BitInt(17) *)&v;
> +}
> +
> +/* { dg-final { scan-tree-dump "VIEW_CONVERT_EXPR" "forwprop1" } } */
> --
> 2.34.1
> 

Reply via email to