Commit 356c32e2 by Matthew Wahab Committed by Matthew Wahab

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
parent 2548a4d6
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> 2015-08-14 Thomas Schwinge <thomas@codesourcery.com>
Bernd Schmidt <bernds@codesourcery.com> Bernd Schmidt <bernds@codesourcery.com>
......
...@@ -171,7 +171,7 @@ ...@@ -171,7 +171,7 @@
[(set (match_operand:ALLI 0 "aarch64_sync_memory_operand" "+Q") [(set (match_operand:ALLI 0 "aarch64_sync_memory_operand" "+Q")
(unspec_volatile:ALLI (unspec_volatile:ALLI
[(atomic_op:ALLI (match_dup 0) [(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 (match_operand:SI 2 "const_int_operand")] ;; model
UNSPECV_ATOMIC_OP)) UNSPECV_ATOMIC_OP))
(clobber (reg:CC CC_REGNUM)) (clobber (reg:CC CC_REGNUM))
...@@ -216,7 +216,7 @@ ...@@ -216,7 +216,7 @@
(set (match_dup 1) (set (match_dup 1)
(unspec_volatile:ALLI (unspec_volatile:ALLI
[(atomic_op:ALLI (match_dup 1) [(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 (match_operand:SI 3 "const_int_operand")] ;; model
UNSPECV_ATOMIC_OP)) UNSPECV_ATOMIC_OP))
(clobber (reg:CC CC_REGNUM)) (clobber (reg:CC CC_REGNUM))
...@@ -261,7 +261,7 @@ ...@@ -261,7 +261,7 @@
[(set (match_operand:ALLI 0 "register_operand" "=&r") [(set (match_operand:ALLI 0 "register_operand" "=&r")
(atomic_op:ALLI (atomic_op:ALLI
(match_operand:ALLI 1 "aarch64_sync_memory_operand" "+Q") (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) (set (match_dup 1)
(unspec_volatile:ALLI (unspec_volatile:ALLI
[(match_dup 1) (match_dup 2) [(match_dup 1) (match_dup 2)
......
...@@ -345,9 +345,6 @@ ...@@ -345,9 +345,6 @@
;; Attribute to describe constants acceptable in logical operations ;; Attribute to describe constants acceptable in logical operations
(define_mode_attr lconst [(SI "K") (DI "L")]) (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. ;; Map a mode to a specific constraint character.
(define_mode_attr cmode [(QI "q") (HI "h") (SI "s") (DI "d")]) (define_mode_attr cmode [(QI "q") (HI "h") (SI "s") (DI "d")])
...@@ -843,6 +840,16 @@ ...@@ -843,6 +840,16 @@
(plus "aarch64_plus_operand") (plus "aarch64_plus_operand")
(minus "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. ;; Int Iterators.
;; ------------------------------------------------------------------- ;; -------------------------------------------------------------------
......
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> 2015-08-14 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* gcc.target/aarch64/target_attr_5.c: Add static modifier to bar. * gcc.target/aarch64/target_attr_5.c: Add static modifier to bar.
......
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);
}
...@@ -16,6 +16,18 @@ atomic_fetch_sub_ACQUIRE () ...@@ -16,6 +16,18 @@ atomic_fetch_sub_ACQUIRE ()
} }
int 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 () atomic_fetch_and_SEQ_CST ()
{ {
return __atomic_fetch_and (&v, 4096, __ATOMIC_SEQ_CST); return __atomic_fetch_and (&v, 4096, __ATOMIC_SEQ_CST);
...@@ -75,4 +87,4 @@ atomic_or_fetch_CONSUME () ...@@ -75,4 +87,4 @@ atomic_or_fetch_CONSUME ()
return __atomic_or_fetch (&v, 4096, __ATOMIC_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 } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment