Add a missing return transforming atomic bit test and operations
Commit Message
When failing to transform equivalent, but slighly different cases of
atomic bit test and operations to their canonical forms, return
immediately.
gcc/
PR middle-end/103268
* tree-ssa-ccp.c (optimize_atomic_bit_test_and): Add a missing
return.
gcc/testsuite/
PR middle-end/103268
* gcc.dg/pr103268-1.c: New test.
* gcc.dg/pr103268-2.c: Likewise.
---
gcc/testsuite/gcc.dg/pr103268-1.c | 10 ++++++++++
gcc/testsuite/gcc.dg/pr103268-2.c | 12 ++++++++++++
gcc/tree-ssa-ccp.c | 2 ++
3 files changed, 24 insertions(+)
create mode 100644 gcc/testsuite/gcc.dg/pr103268-1.c
create mode 100644 gcc/testsuite/gcc.dg/pr103268-2.c
Comments
On 11/15/2021 8:18 PM, H.J. Lu via Gcc-patches wrote:
> When failing to transform equivalent, but slighly different cases of
> atomic bit test and operations to their canonical forms, return
> immediately.
>
> gcc/
>
> PR middle-end/103268
> * tree-ssa-ccp.c (optimize_atomic_bit_test_and): Add a missing
> return.
>
> gcc/testsuite/
>
> PR middle-end/103268
> * gcc.dg/pr103268-1.c: New test.
> * gcc.dg/pr103268-2.c: Likewise.
OK
jeff
new file mode 100644
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+extern int si;
+long
+test_types (void)
+{
+ unsigned int u2 = __atomic_fetch_xor (&si, 0, 5);
+ return u2;
+}
new file mode 100644
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+extern long pscc_a_2_3;
+extern int pscc_a_1_4;
+
+void
+pscc (void)
+{
+ pscc_a_1_4 = __sync_fetch_and_and (&pscc_a_2_3, 1);
+}
+
@@ -3638,6 +3638,8 @@ optimize_atomic_bit_test_and (gimple_stmt_iterator *gsip,
use_stmt = use_nop_stmt;
}
}
+ else
+ return;
if (!bit)
{