Fix PR 103317, ICE after PHI-OPT, minmax_replacement producing invalid SSA

The problem is r12-5300-gf98f373dd822b35c allows phiopt to recognize more basic blocks
but missed one location where the basic block does not need to be empty but still
needs to have a single predecessor. This patch fixes that over sight.

OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.

	PR tree-optimization/103317

gcc/ChangeLog:

	* tree-ssa-phiopt.c (minmax_replacement): For the non empty
	middle bb case, check to make sure it has a single predecessor.

gcc/testsuite/ChangeLog:

	* gcc.c-torture/compile/pr103317-1.c: New test.
This commit is contained in:
Andrew Pinski 2021-11-18 23:38:30 +00:00
parent 527e54a431
commit 09d462146b
2 changed files with 16 additions and 0 deletions

View file

@ -0,0 +1,13 @@
int a, b;
char c;
void
d (void)
{
char e = c;
if (b)
if (c < 16 - 11)
e = 16 - 11;
if (e > 8)
e = 8;
a = e;
}

View file

@ -1780,6 +1780,9 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
gimple *assign = last_and_only_stmt (middle_bb);
tree lhs, op0, op1, bound;
if (!single_pred_p (middle_bb))
return false;
if (!assign
|| gimple_code (assign) != GIMPLE_ASSIGN)
return false;