diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2021-11-15 17:37:10 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2021-11-15 19:23:58 -0800 |
commit | 074ee8d9a91d7573c1e8774a22e4e08f923adb18 (patch) | |
tree | 488df1f360dcf7770fa4c792cdf75de61a061600 /gcc | |
parent | a031aaa2ac9d4c74994df085a0d8c79bd55792c9 (diff) | |
download | gcc-074ee8d9a91d7573c1e8774a22e4e08f923adb18.zip gcc-074ee8d9a91d7573c1e8774a22e4e08f923adb18.tar.gz gcc-074ee8d9a91d7573c1e8774a22e4e08f923adb18.tar.bz2 |
Add a missing return when transforming atomic bit test and operations
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gcc.dg/pr103268-1.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr103268-2.c | 12 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 2 |
3 files changed, 24 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/pr103268-1.c b/gcc/testsuite/gcc.dg/pr103268-1.c new file mode 100644 index 0000000..6d583d5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr103268-1.c @@ -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; +} diff --git a/gcc/testsuite/gcc.dg/pr103268-2.c b/gcc/testsuite/gcc.dg/pr103268-2.c new file mode 100644 index 0000000..12283bb --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr103268-2.c @@ -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); +} + diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index 0666dc6..18d5772 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -3638,6 +3638,8 @@ optimize_atomic_bit_test_and (gimple_stmt_iterator *gsip, use_stmt = use_nop_stmt; } } + else + return; if (!bit) { |