Commit 99e9cec8 by Shiva Chen Committed by Kyrylo Tkachov

[GCC, ARM] armv8 linux toolchain asan testcase fail due to stl missing conditional code

On behalf of Shiva Chen

2015-06-09  Shiva Chen  <shiva0217@gmail.com>

	* sync.md (atomic_load<mode>): Add conditional code for lda/ldr
	(atomic_store<mode>): Likewise.

2015-06-09  Shiva Chen  <shiva0217@gmail.com>

	* gcc.target/arm/stl-cond.c: New test.

From-SVN: r224269
parent d9c16ed2
2015-06-09 Shiva Chen <shiva0217@gmail.com>
* sync.md (atomic_load<mode>): Add conditional code for lda/ldr
(atomic_store<mode>): Likewise.
2015-06-09 Richard Biener <rguenther@suse.de> 2015-06-09 Richard Biener <rguenther@suse.de>
* cfgloop.c (get_loop_body_in_bfs_order): Fix assert. * cfgloop.c (get_loop_body_in_bfs_order): Fix assert.
......
...@@ -75,11 +75,12 @@ ...@@ -75,11 +75,12 @@
{ {
enum memmodel model = memmodel_from_int (INTVAL (operands[2])); enum memmodel model = memmodel_from_int (INTVAL (operands[2]));
if (is_mm_relaxed (model) || is_mm_consume (model) || is_mm_release (model)) if (is_mm_relaxed (model) || is_mm_consume (model) || is_mm_release (model))
return \"ldr<sync_sfx>\\t%0, %1\"; return \"ldr%(<sync_sfx>%)\\t%0, %1\";
else else
return \"lda<sync_sfx>\\t%0, %1\"; return \"lda<sync_sfx>%?\\t%0, %1\";
} }
) [(set_attr "predicable" "yes")
(set_attr "predicable_short_it" "no")])
(define_insn "atomic_store<mode>" (define_insn "atomic_store<mode>"
[(set (match_operand:QHSI 0 "memory_operand" "=Q") [(set (match_operand:QHSI 0 "memory_operand" "=Q")
...@@ -91,11 +92,12 @@ ...@@ -91,11 +92,12 @@
{ {
enum memmodel model = memmodel_from_int (INTVAL (operands[2])); enum memmodel model = memmodel_from_int (INTVAL (operands[2]));
if (is_mm_relaxed (model) || is_mm_consume (model) || is_mm_acquire (model)) if (is_mm_relaxed (model) || is_mm_consume (model) || is_mm_acquire (model))
return \"str<sync_sfx>\t%1, %0\"; return \"str%(<sync_sfx>%)\t%1, %0\";
else else
return \"stl<sync_sfx>\t%1, %0\"; return \"stl<sync_sfx>%?\t%1, %0\";
} }
) [(set_attr "predicable" "yes")
(set_attr "predicable_short_it" "no")])
;; Note that ldrd and vldr are *not* guaranteed to be single-copy atomic, ;; Note that ldrd and vldr are *not* guaranteed to be single-copy atomic,
;; even for a 64-bit aligned address. Instead we use a ldrexd unparied ;; even for a 64-bit aligned address. Instead we use a ldrexd unparied
......
2015-06-09 Shiva Chen <shiva0217@gmail.com>
* gcc.target/arm/stl-cond.c: New test.
2015-06-09 Richard Biener <rguenther@suse.de> 2015-06-09 Richard Biener <rguenther@suse.de>
PR middle-end/66413 PR middle-end/66413
......
/* { dg-do compile } */
/* { dg-require-effective-target arm_arm_ok } */
/* { dg-require-effective-target arm_arch_v8a_ok } */
/* { dg-options "-O2 -marm" } */
/* { dg-add-options arm_arch_v8a } */
struct backtrace_state
{
int threaded;
int lock_alloc;
};
void foo (struct backtrace_state *state)
{
if (state->threaded)
__sync_lock_release (&state->lock_alloc);
}
/* { dg-final { scan-assembler "stlne" } } */
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