]> git.ipfire.org Git - thirdparty/gcc.git/commit
Remove TARGET_RELAXED_ORDERING and optimize for weak memory models.
authorramana <ramana@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 4 Jun 2015 09:19:51 +0000 (09:19 +0000)
committerramana <ramana@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 4 Jun 2015 09:19:51 +0000 (09:19 +0000)
commit0925e39e497b5f218c4979b49afbdabcd3828e88
treeb1f66152fa773d5b7dac557924b8c752070f198e
parent993a73303db1c33cf6a946a83f532369a74fea85
Remove TARGET_RELAXED_ORDERING and optimize for weak memory models.

This patch removes the special casing for targets with relaxed
memory ordering and handles guard accesses with equivalent
atomic load acquire operations. In this process we change the
algorithm to load the guard variable with an atomic load that
has ACQUIRE semantics.

This then means that on targets which have weak memory models, the
fast path is inlined and can directly use a load-acquire instruction
where available (and yay! one more hook gone).

2015-06-04  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>

PR c++/66192
PR target/66200
* doc/tm.texi: Regenerate.
* doc/tm.texi.in (TARGET_RELAXED_ORDERING): Delete.
* target.def (TARGET_RELAXED_ORDERING): Likewise.
* config/alpha/alpha.c (TARGET_RELAXED_ORDERING): Likewise.
* config/ia64/ia64.c (TARGET_RELAXED_ORDERING): Likewise.
* config/rs6000/rs6000.c (TARGET_RELAXED_ORDERING): Likewise.
* config/sparc/linux.h (SPARC_RELAXED_ORDERING): Likewise.
* config/sparc/linux64.h (SPARC_RELAXED_ORDERING): Likewise.
* config/sparc/sparc.c (TARGET_RELAXED_ORDERING): Likewise.
* config/sparc/sparc.h (SPARC_RELAXED_ORDERING): Likewise.
* system.h (TARGET_RELAXED_ORDERING): Poison.

2015-06-04  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>

PR c++/66192
PR target/66200
* cp-tree.h (get_guard_cond): Adjust declaration
* decl.c (expand_static_init): Use atomic load acquire
and adjust call to get_guard_cond.
* decl2.c (build_atomic_load_byte): New function.
(get_guard_cond): Handle thread_safety.
(one_static_initialization_or_destruction): Adjust call to
get_guard_cond.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@224118 138bc75d-0d04-0410-961f-82ee72b054a4
16 files changed:
gcc/ChangeLog
gcc/config/alpha/alpha.c
gcc/config/ia64/ia64.c
gcc/config/rs6000/rs6000.c
gcc/config/sparc/linux.h
gcc/config/sparc/linux64.h
gcc/config/sparc/sparc.c
gcc/config/sparc/sparc.h
gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/decl2.c
gcc/doc/tm.texi
gcc/doc/tm.texi.in
gcc/system.h
gcc/target.def