diff options
author | Matthew Wahab <matthew.wahab@arm.com> | 2015-08-14 15:05:42 +0000 |
---|---|---|
committer | Matthew Wahab <mwahab@gcc.gnu.org> | 2015-08-14 15:05:42 +0000 |
commit | 356c32e2f4b9d44140a8333da5381813f9aad516 (patch) | |
tree | 973bc4d5a6378f40868d026a02ff8f75bd705c87 /gcc | |
parent | 2548a4d6ba4d54393ae7947a7a8c9070d9c7e113 (diff) | |
download | gcc-356c32e2f4b9d44140a8333da5381813f9aad516.zip gcc-356c32e2f4b9d44140a8333da5381813f9aad516.tar.gz gcc-356c32e2f4b9d44140a8333da5381813f9aad516.tar.bz2 |
re PR target/67143 (ICE (could not split insn) on aarch64-linux-gnu)
gcc/
2015-08-14 Matthew Wahab <matthew.wahab@arm.com>
PR target/67143
* config/aarch64/atomics.md (atomic_<optab><mode>): Replace
'lconst_atomic' with 'const_atomic'.
(atomic_fetch_<optab><mode>): Likewise.
(atomic_<optab>_fetch<mode>): Likewise.
* config/aarch64/iterators.md (lconst-atomic): Move below
'const_atomic'.
(const_atomic): New.
gcc/testsuite/
2015-08-14 Matthew Wahab <matthew.wahab@arm.com>
Matthias Klose <doko@debian.org>
PR target/67143
* gcc.c-torture/compile/pr67143.c: New
* gcc.target/aarch64/atomic-op-imm.c
(atomic_fetch_add_negative_RELAXED): New.
(atomic_fetch_sub_negative_ACQUIRE): New.
Co-Authored-By: Matthias Klose <doko@debian.org>
From-SVN: r226895
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/config/aarch64/atomics.md | 6 | ||||
-rw-r--r-- | gcc/config/aarch64/iterators.md | 13 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr67143.c | 21 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/atomic-op-imm.c | 14 |
6 files changed, 67 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 154c077..afade5d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2015-08-14 Matthew Wahab <matthew.wahab@arm.com> + + PR target/67143 + * config/aarch64/atomics.md (atomic_<optab><mode>): Replace + 'lconst_atomic' with 'const_atomic'. + (atomic_fetch_<optab><mode>): Likewise. + (atomic_<optab>_fetch<mode>): Likewise. + * config/aarch64/iterators.md (lconst-atomic): Move below + 'const_atomic'. + (const_atomic): New. + 2015-08-14 Thomas Schwinge <thomas@codesourcery.com> Bernd Schmidt <bernds@codesourcery.com> diff --git a/gcc/config/aarch64/atomics.md b/gcc/config/aarch64/atomics.md index 7082f61..65d2cc9 100644 --- a/gcc/config/aarch64/atomics.md +++ b/gcc/config/aarch64/atomics.md @@ -171,7 +171,7 @@ [(set (match_operand:ALLI 0 "aarch64_sync_memory_operand" "+Q") (unspec_volatile:ALLI [(atomic_op:ALLI (match_dup 0) - (match_operand:ALLI 1 "<atomic_op_operand>" "r<lconst_atomic>")) + (match_operand:ALLI 1 "<atomic_op_operand>" "r<const_atomic>")) (match_operand:SI 2 "const_int_operand")] ;; model UNSPECV_ATOMIC_OP)) (clobber (reg:CC CC_REGNUM)) @@ -216,7 +216,7 @@ (set (match_dup 1) (unspec_volatile:ALLI [(atomic_op:ALLI (match_dup 1) - (match_operand:ALLI 2 "<atomic_op_operand>" "r<lconst_atomic>")) + (match_operand:ALLI 2 "<atomic_op_operand>" "r<const_atomic>")) (match_operand:SI 3 "const_int_operand")] ;; model UNSPECV_ATOMIC_OP)) (clobber (reg:CC CC_REGNUM)) @@ -261,7 +261,7 @@ [(set (match_operand:ALLI 0 "register_operand" "=&r") (atomic_op:ALLI (match_operand:ALLI 1 "aarch64_sync_memory_operand" "+Q") - (match_operand:ALLI 2 "<atomic_op_operand>" "r<lconst_atomic>"))) + (match_operand:ALLI 2 "<atomic_op_operand>" "r<const_atomic>"))) (set (match_dup 1) (unspec_volatile:ALLI [(match_dup 1) (match_dup 2) diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md index 5d7966d..b8a45d1 100644 --- a/gcc/config/aarch64/iterators.md +++ b/gcc/config/aarch64/iterators.md @@ -345,9 +345,6 @@ ;; Attribute to describe constants acceptable in logical operations (define_mode_attr lconst [(SI "K") (DI "L")]) -;; Attribute to describe constants acceptable in atomic logical operations -(define_mode_attr lconst_atomic [(QI "K") (HI "K") (SI "K") (DI "L")]) - ;; Map a mode to a specific constraint character. (define_mode_attr cmode [(QI "q") (HI "h") (SI "s") (DI "d")]) @@ -843,6 +840,16 @@ (plus "aarch64_plus_operand") (minus "aarch64_plus_operand")]) +;; Constants acceptable for atomic operations. +;; This definition must appear in this file before the iterators it refers to. +(define_code_attr const_atomic + [(plus "IJ") (minus "IJ") + (xor "<lconst_atomic>") (ior "<lconst_atomic>") + (and "<lconst_atomic>")]) + +;; Attribute to describe constants acceptable in atomic logical operations +(define_mode_attr lconst_atomic [(QI "K") (HI "K") (SI "K") (DI "L")]) + ;; ------------------------------------------------------------------- ;; Int Iterators. ;; ------------------------------------------------------------------- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c4dc432..9a4cd14 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2015-08-14 Matthew Wahab <matthew.wahab@arm.com> + Matthias Klose <doko@debian.org> + + PR target/67143 + * gcc.c-torture/compile/pr67143.c: New + * gcc.target/aarch64/atomic-op-imm.c + (atomic_fetch_add_negative_RELAXED): New. + (atomic_fetch_sub_negative_ACQUIRE): New. + 2015-08-14 Kyrylo Tkachov <kyrylo.tkachov@arm.com> * gcc.target/aarch64/target_attr_5.c: Add static modifier to bar. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr67143.c b/gcc/testsuite/gcc.c-torture/compile/pr67143.c new file mode 100644 index 0000000..62c4186 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr67143.c @@ -0,0 +1,21 @@ +long a, c; +int b; +int d; +void ut_dbg_assertion_failed() __attribute__((noreturn)); +long dict_index_is_spatial(int *); +void btr_block_get_func(char *); +long btr_page_get_level_low(unsigned char *); +void btr_validate_level(long p1) { + unsigned char *e; + while (p1 != btr_page_get_level_low(e)) { + if (__builtin_expect(b, 0)) + ut_dbg_assertion_failed(); + if (dict_index_is_spatial(&d)) + while (c != 5535) { + __sync_add_and_fetch(&a, 536870912); + btr_block_get_func(""); + } + } + for (long i; i; ++i) + btr_validate_level(-i); +} diff --git a/gcc/testsuite/gcc.target/aarch64/atomic-op-imm.c b/gcc/testsuite/gcc.target/aarch64/atomic-op-imm.c index 6c6f7e1..47d7a96 100644 --- a/gcc/testsuite/gcc.target/aarch64/atomic-op-imm.c +++ b/gcc/testsuite/gcc.target/aarch64/atomic-op-imm.c @@ -16,6 +16,18 @@ atomic_fetch_sub_ACQUIRE () } int +atomic_fetch_add_negative_RELAXED () +{ + return __atomic_fetch_add (&v, -4096, __ATOMIC_RELAXED); +} + +int +atomic_fetch_sub_negative_ACQUIRE () +{ + return __atomic_fetch_sub (&v, -4096, __ATOMIC_ACQUIRE); +} + +int atomic_fetch_and_SEQ_CST () { return __atomic_fetch_and (&v, 4096, __ATOMIC_SEQ_CST); @@ -75,4 +87,4 @@ atomic_or_fetch_CONSUME () return __atomic_or_fetch (&v, 4096, __ATOMIC_CONSUME); } -/* { dg-final { scan-assembler-times "\tw\[0-9\]+, w\[0-9\]+, #*4096" 12 } } */ +/* { dg-final { scan-assembler-times "\tw\[0-9\]+, w\[0-9\]+, #*4096" 14 } } */ |