diff options
author | Jakub Jelinek <jakub@redhat.com> | 2024-11-19 10:25:57 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2024-11-19 10:25:57 +0100 |
commit | 600cab162c561c3061317c998972b0ed1b681d5b (patch) | |
tree | 59dfdc4f49c19effc3d1e301405dffe2020bb760 /gcc | |
parent | 758d2b3d3e28c831c79f5c18727d149c81896434 (diff) | |
download | gcc-600cab162c561c3061317c998972b0ed1b681d5b.zip gcc-600cab162c561c3061317c998972b0ed1b681d5b.tar.gz gcc-600cab162c561c3061317c998972b0ed1b681d5b.tar.bz2 |
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/gimple-lower-bitint.cc | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/bitint-74.c | 27 |
2 files changed, 31 insertions, 1 deletions
diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc index 6fc4253..ea56c4c 100644 --- a/gcc/gimple-lower-bitint.cc +++ b/gcc/gimple-lower-bitint.cc @@ -2143,6 +2143,7 @@ bitint_large_huge::handle_stmt (gimple *stmt, tree idx) idx), gimple_assign_rhs2 (stmt), idx); case SSA_NAME: + case PAREN_EXPR: case INTEGER_CST: return handle_operand (gimple_assign_rhs1 (stmt), idx); CASE_CONVERT: @@ -5609,7 +5610,9 @@ bitint_large_huge::lower_stmt (gimple *stmt) || gimple_store_p (stmt) || gimple_assign_load_p (stmt) || 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); if (!eq_p) diff --git a/gcc/testsuite/gcc.dg/torture/bitint-74.c b/gcc/testsuite/gcc.dg/torture/bitint-74.c new file mode 100644 index 0000000..f9abe23 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/bitint-74.c @@ -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 +} |