sra: Partial fix for BITINT_TYPEs [PR113120]
commit2611cdc329e0229330b228e441934f386d6d5ff7
authorJakub Jelinek <jakub@redhat.com>
Wed, 10 Jan 2024 11:46:00 +0000 (10 12:46 +0100)
committerJakub Jelinek <jakub@redhat.com>
Wed, 10 Jan 2024 11:46:00 +0000 (10 12:46 +0100)
treef1c8dd9dce1cc2e34c9f695c1960e817ab06656c
parent7de5bb642c1265ff57a009dd889ab435b098bfca
sra: Partial fix for BITINT_TYPEs [PR113120]

As changed in other parts of the compiler, using
build_nonstandard_integer_type is not appropriate for arbitrary precisions,
especially if the precision comes from a BITINT_TYPE or something based on
that, build_nonstandard_integer_type relies on some integral mode being
supported that can support the precision.

The following patch uses build_bitint_type instead for BITINT_TYPE
precisions.

Note, it would be good if we were able to punt on the optimization
(but this code doesn't seem to be able to punt, so it needs to be done
somewhere earlier) at least in cases where building it would be invalid.
E.g. right now BITINT_TYPE can support precisions up to 65535 (inclusive),
but 65536 will not work anymore (we can't have > 16-bit TYPE_PRECISION).
I've tried to replace 513 with 65532 in the testcase and it didn't ICE,
so maybe it ran into some other SRA limit.

2024-01-10  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/113120
* tree-sra.cc (analyze_access_subtree): For BITINT_TYPE
with root->size TYPE_PRECISION don't build anything new.
Otherwise, if root->type is a BITINT_TYPE, use build_bitint_type
rather than build_nonstandard_integer_type.

* gcc.dg/bitint-63.c: New test.
gcc/testsuite/gcc.dg/bitint-63.c [new file with mode: 0644]
gcc/tree-sra.cc