lower-bitint: Fix up handling of uninitialized large/huge _BitInt call arguments...
commitc1680bd2df187e06089b06ffe211c4abe4c440b0
authorJakub Jelinek <jakub@redhat.com>
Fri, 12 Jan 2024 10:19:08 +0000 (12 11:19 +0100)
committerJakub Jelinek <jakub@redhat.com>
Fri, 12 Jan 2024 10:19:08 +0000 (12 11:19 +0100)
tree3d2f9270d3813616e0636856044704cced0cd205
parent4ff5e7cec91013f2b2e5c680d13bfd20e2a19763
lower-bitint: Fix up handling of uninitialized large/huge _BitInt call arguments [PR113316]

The code to assign large/huge _BitInt SSA_NAMEs to partitions intentionally
ignores uninitialized SSA_NAMEs:
          /* Also ignore uninitialized uses.  */
          if (SSA_NAME_IS_DEFAULT_DEF (s)
              && (!SSA_NAME_VAR (s) || VAR_P (SSA_NAME_VAR (s))))
            continue;
because there is no need to store them into memory, all we need is when
trying to extract some limb from them use uninitialized SSA_NAME for the
limb.

The following testcase shows this is a problem for call arguments though,
for those we need to create replacement SSA_NAMEs which are loaded from
the underlying variable.  For uninitialized SSA_NAMEs because we didn't
create underlying variable for them var_to_partition doesn't work, the
following patch handles it by just creating an uninitialized replacement
SSA_NAME.

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

PR tree-optimization/113316
* gimple-lower-bitint.cc (bitint_large_huge::lower_call): Handle
uninitialized large/huge _BitInt arguments to calls.

* gcc.dg/bitint-67.c: New test.
gcc/gimple-lower-bitint.cc
gcc/testsuite/gcc.dg/bitint-67.c [new file with mode: 0644]