mirror of
https://github.com/gcc-mirror/gcc.git
synced 2024-11-21 13:40:47 +00:00
bitintlower: Handle PAREN_EXPR [PR117459]
The following patch handles PAREN_EXPR in bitint lowering, and handles it as an optimization barrier, so that temporary arithmetics from PAREN_EXPR isn't mixed with temporary arithmetics from outside of the PAREN_EXPR. 2024-11-19 Jakub Jelinek <jakub@redhat.com> PR middle-end/117459 * gimple-lower-bitint.cc (bitint_large_huge::handle_stmt, bitint_large_huge::lower_stmt): Handle PAREN_EXPR. * gcc.dg/torture/bitint-74.c: New test.
This commit is contained in:
parent
758d2b3d3e
commit
600cab162c
@ -2143,6 +2143,7 @@ bitint_large_huge::handle_stmt (gimple *stmt, tree idx)
|
|||||||
idx),
|
idx),
|
||||||
gimple_assign_rhs2 (stmt), idx);
|
gimple_assign_rhs2 (stmt), idx);
|
||||||
case SSA_NAME:
|
case SSA_NAME:
|
||||||
|
case PAREN_EXPR:
|
||||||
case INTEGER_CST:
|
case INTEGER_CST:
|
||||||
return handle_operand (gimple_assign_rhs1 (stmt), idx);
|
return handle_operand (gimple_assign_rhs1 (stmt), idx);
|
||||||
CASE_CONVERT:
|
CASE_CONVERT:
|
||||||
@ -5609,7 +5610,9 @@ bitint_large_huge::lower_stmt (gimple *stmt)
|
|||||||
|| gimple_store_p (stmt)
|
|| gimple_store_p (stmt)
|
||||||
|| gimple_assign_load_p (stmt)
|
|| gimple_assign_load_p (stmt)
|
||||||
|| eq_p
|
|| eq_p
|
||||||
|| mergeable_cast_p)
|
|| mergeable_cast_p
|
||||||
|
|| (is_gimple_assign (stmt)
|
||||||
|
&& gimple_assign_rhs_code (stmt) == PAREN_EXPR))
|
||||||
{
|
{
|
||||||
lhs = lower_mergeable_stmt (stmt, cmp_code, cmp_op1, cmp_op2);
|
lhs = lower_mergeable_stmt (stmt, cmp_code, cmp_op1, cmp_op2);
|
||||||
if (!eq_p)
|
if (!eq_p)
|
||||||
|
27
gcc/testsuite/gcc.dg/torture/bitint-74.c
Normal file
27
gcc/testsuite/gcc.dg/torture/bitint-74.c
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/* PR middle-end/117459 */
|
||||||
|
/* { dg-do run { target bitint } } */
|
||||||
|
/* { dg-options "-std=c23" } */
|
||||||
|
/* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */
|
||||||
|
/* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */
|
||||||
|
|
||||||
|
#if __BITINT_MAXWIDTH__ >= 255
|
||||||
|
_BitInt(255) b, c, d;
|
||||||
|
|
||||||
|
_BitInt(255)
|
||||||
|
foo ()
|
||||||
|
{
|
||||||
|
return __builtin_assoc_barrier (b + c) + d;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
#if __BITINT_MAXWIDTH__ >= 255
|
||||||
|
b = 3162082328713384445049140446737468449630746270013462291267283007210433157591wb;
|
||||||
|
c = 12998515555477887328635550261966833804427562203752161174274777867442907371807wb;
|
||||||
|
d = 5016523343681809792116154509287659112784399275423992541459788346980443294044wb;
|
||||||
|
if (foo () != 21177121227873081565800845217991961366842707749189616007001849221633783823442wb)
|
||||||
|
__builtin_abort ();
|
||||||
|
#endif
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user