Commit 8abaebcd by Uros Bizjak

re PR target/55981 (std::atomic store is split in two smaller stores)

	PR target/55981
	* config/i386/sync.md (atomic_store<mode>): Always generate SWImode
	store through atomic_store<mode>_1.
	(atomic_store<mode>_1): Macroize insn using SWI mode iterator.

testsuite/ChangeLog:

	PR target/55981
	* gcc.target/pr55981.c: New test.

From-SVN: r195273
parent 3f5da285
2012-01-17 Uros Bizjak <ubizjak@gmail.com>
PR target/55981
* config/i386/sync.md (atomic_store<mode>): Always generate SWImode
store through atomic_store<mode>_1.
(atomic_store<mode>_1): Macroize insn using SWI mode iterator.
2013-01-17 Martin Jambor <mjambor@suse.cz> 2013-01-17 Martin Jambor <mjambor@suse.cz>
PR tree-optimizations/55264 PR tree-optimizations/55264
...@@ -39,8 +46,7 @@ ...@@ -39,8 +46,7 @@
* tree-loop-distribution.c (update_phis_for_loop_copy): Remove. * tree-loop-distribution.c (update_phis_for_loop_copy): Remove.
(copy_loop_before): Adjust and delete update-ssa status. (copy_loop_before): Adjust and delete update-ssa status.
* tree-vect-loop-manip.c (rename_variables_in_bb): Make static. * tree-vect-loop-manip.c (rename_variables_in_bb): Make static.
(rename_variables_in_bb): Likewise. Properly walk over (rename_variables_in_bb): Likewise. Properly walk over predecessors.
predecessors.
(rename_variables_in_loop): Remove. (rename_variables_in_loop): Remove.
(slpeel_update_phis_for_duplicate_loop): Likewise. (slpeel_update_phis_for_duplicate_loop): Likewise.
(slpeel_tree_duplicate_loop_to_edge_cfg): Handle nested loops, (slpeel_tree_duplicate_loop_to_edge_cfg): Handle nested loops,
......
...@@ -225,11 +225,8 @@ ...@@ -225,11 +225,8 @@
} }
/* Otherwise use a store. */ /* Otherwise use a store. */
if (INTVAL (operands[2]) & IX86_HLE_RELEASE) emit_insn (gen_atomic_store<mode>_1 (operands[0], operands[1],
emit_insn (gen_atomic_store<mode>_1 (operands[0], operands[1], operands[2]));
operands[2]));
else
emit_move_insn (operands[0], operands[1]);
} }
/* ... followed by an MFENCE, if required. */ /* ... followed by an MFENCE, if required. */
if (model == MEMMODEL_SEQ_CST) if (model == MEMMODEL_SEQ_CST)
...@@ -238,10 +235,10 @@ ...@@ -238,10 +235,10 @@
}) })
(define_insn "atomic_store<mode>_1" (define_insn "atomic_store<mode>_1"
[(set (match_operand:ATOMIC 0 "memory_operand" "=m") [(set (match_operand:SWI 0 "memory_operand" "=m")
(unspec:ATOMIC [(match_operand:ATOMIC 1 "<nonmemory_operand>" "<r><i>") (unspec:SWI [(match_operand:SWI 1 "<nonmemory_operand>" "<r><i>")
(match_operand:SI 2 "const_int_operand")] (match_operand:SI 2 "const_int_operand")]
UNSPEC_MOVA))] UNSPEC_MOVA))]
"" ""
"%K2mov{<imodesuffix>}\t{%1, %0|%0, %1}") "%K2mov{<imodesuffix>}\t{%1, %0|%0, %1}")
......
2012-01-17 Uros Bizjak <ubizjak@gmail.com>
PR target/55981
* gcc.target/pr55981.c: New test.
2013-01-17 Janis Johnson <janisjo@codesourcery.com> 2013-01-17 Janis Johnson <janisjo@codesourcery.com>
* gcc.target/arm/pr40887.c: Require at least armv5. * gcc.target/arm/pr40887.c: Require at least armv5.
......
/* { dg-do compile { target { ! { ia32 } } } } */
/* { dg-options "-O2" } */
volatile int a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p;
volatile long long y;
void
test ()
{
int a_ = a;
int b_ = b;
int c_ = c;
int d_ = d;
int e_ = e;
int f_ = f;
int g_ = g;
int h_ = h;
int i_ = i;
int j_ = j;
int k_ = k;
int l_ = l;
int m_ = m;
int n_ = n;
int o_ = o;
int p_ = p;
int z;
for (z = 0; z < 1000; z++)
{
__atomic_store_n (&y, 0x100000002ll, __ATOMIC_SEQ_CST);
__atomic_store_n (&y, 0x300000004ll, __ATOMIC_SEQ_CST);
}
a = a_;
b = b_;
c = c_;
d = d_;
e = e_;
f = f_;
g = g_;
h = h_;
i = i_;
j = j_;
k = k_;
l = l_;
m = m_;
n = n_;
o = o_;
p = p_;
}
/* { dg-final { scan-assembler-times "movabs" 2 } } */
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