Check for SSA_NAME not in the IL yet.

Check for an SSA_NAME not in the CFG before trying to create an
equivalence record in the defintion block.

	PR tree-optimization/116003
	gcc/
	* value-relation.cc (equiv_oracle::register_initial_def): Check
	if SSA_NAME is in the IL before registering.

	gcc/testsuite/
	* gcc.dg/pr116003.c: New.
This commit is contained in:
Andrew MacLeod 2024-07-19 17:39:40 -04:00
parent a95c1911d8
commit 01c095ab77
2 changed files with 26 additions and 1 deletions

View File

@ -0,0 +1,21 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fnon-call-exceptions -fprofile-arcs -finstrument-functions -fno-tree-copy-prop" } */
_BitInt(5) b5;
char c;
int i;
_BitInt(129) b129;
void
foo(_BitInt(128) b128)
{
l50:
b128 %= b128 - b129;
l64:
b128 %= c;
if (__builtin_add_overflow(i, 0, &c))
goto l50;
if (__builtin_sub_overflow(c, 0, &b5))
goto l64;
}

View File

@ -607,7 +607,11 @@ equiv_oracle::register_initial_def (tree ssa)
if (SSA_NAME_IS_DEFAULT_DEF (ssa)) if (SSA_NAME_IS_DEFAULT_DEF (ssa))
return; return;
basic_block bb = gimple_bb (SSA_NAME_DEF_STMT (ssa)); basic_block bb = gimple_bb (SSA_NAME_DEF_STMT (ssa));
gcc_checking_assert (bb && !find_equiv_dom (ssa, bb));
// If defining stmt is not in the IL, simply return.
if (!bb)
return;
gcc_checking_assert (!find_equiv_dom (ssa, bb));
unsigned v = SSA_NAME_VERSION (ssa); unsigned v = SSA_NAME_VERSION (ssa);
bitmap_set_bit (m_equiv_set, v); bitmap_set_bit (m_equiv_set, v);