Skip to content

Commit

Permalink
bitint: Don't move debug stmts from before returns_twice calls [PR114…
Browse files Browse the repository at this point in the history
…628]

Debug stmts are allowed by the verifier before the returns_twice calls.
More importantly, they don't have a lhs, so the current handling of
arg_stmts statements to force them on the edges ICEs.

The following patch just keeps them where they were before.

2024-04-09  Jakub Jelinek  <[email protected]>

	PR middle-end/114628
	* gimple-lower-bitint.cc (gimple_lower_bitint): Keep debug stmts
	before returns_twice calls as is, don't push them into arg_stmts
	vector/move to edges.

	* gcc.dg/bitint-105.c: New test.
  • Loading branch information
jakubjelinek committed Apr 9, 2024
1 parent 46c9166 commit 7dd1f9d
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 2 deletions.
9 changes: 7 additions & 2 deletions gcc/gimple-lower-bitint.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7172,8 +7172,13 @@ gimple_lower_bitint (void)
gimple_stmt_iterator gsi = gsi_after_labels (gimple_bb (stmt));
while (gsi_stmt (gsi) != stmt)
{
arg_stmts.safe_push (gsi_stmt (gsi));
gsi_remove (&gsi, false);
if (is_gimple_debug (gsi_stmt (gsi)))
gsi_next (&gsi);
else
{
arg_stmts.safe_push (gsi_stmt (gsi));
gsi_remove (&gsi, false);
}
}
gimple *g;
basic_block bb = NULL;
Expand Down
29 changes: 29 additions & 0 deletions gcc/testsuite/gcc.dg/bitint-105.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/* PR middle-end/114628 */
/* { dg-do compile { target bitint } } */
/* { dg-options "-O2 -g" } */

int foo (int);
#if __BITINT_MAXWIDTH__ >= 129
__attribute__((returns_twice)) int bar (_BitInt(129) x);

void
baz (int x, _BitInt(129) y)
{
void *q[] = { &&l1, &&l2 };
l2:
x = foo (foo (3));
bar (y);
goto *q[x & 1];
l1:;
}

void
qux (int x, _BitInt(129) y)
{
void *q[] = { &&l1, &&l2 };
l2:
x = foo (foo (3));
bar (y);
l1:;
}
#endif

0 comments on commit 7dd1f9d

Please sign in to comment.