Commit 3548abca by Oleg Endo

re PR target/64660 ([SH] Convert atomic_fetch_<op> to atomic_<op>_fetch)

gcc/
	PR target/64660
	* config/sh/sync.md (atomic_<fetchop_name><mode>_hard,
	atomic_not<mode>_hard, atomic_<fetchop_name><mode>_soft_tcb,
	atomic_not<mode>_soft_tcb, atomic_nand<mode>_hard,
	atomic_nand<mode>_soft_tcb): New insns.
	(atomic_fetch_<fetchop_name>si_hard): Convert to insn_and_split.
	Split into atomic_<fetchop_name>_fetchsi_hard if operands[0] is unused.
	(define_insn "atomic_fetch_notsi_hard): Convert to insn_and_split.
	Split into atomic_not_fetchsi_hard if operands[0] is unused.
	(atomic_fetch_<fetchop_name><mode>_hard): Convert to insn_and_split.
	Split into atomic_<fetchop_name><mode>_hard if operands[0] is unused.
	(atomic_fetch_not<mode>_hard): Convert to insn_and_split.  Split into
	atomic_not<mode>_hard if operands[0] is unused.
	(atomic_fetch_<fetchop_name><mode>_soft_gusa): Convert to
	insn_and_split.  Split into atomic_<fetchop_name>_fetch<mode>_soft_gusa
	if operands[0] is unused.
	(atomic_fetch_not<mode>_soft_gusa): Convert to insn_and_split.  Split
	into atomic_not_fetch<mode>_soft_gusa if operands[0] is unused.
	(atomic_fetch_<fetchop_name><mode>_soft_tcb): Convert to insn_and_split.
	Split into atomic_<fetchop_name><mode>_soft_tcb if operands[0] is
	unused.
	(atomic_fetch_not<mode>_soft_tcb): Convert to insn_and_split.  Split
	into atomic_not<mode>_soft_tcb if operands[0] is unused.
	(atomic_fetch_<fetchop_name><mode>_soft_imask): Convert to
	insn_and_split.  Split into atomic_<fetchop_name>_fetch<mode>_soft_imask
	if operands[0] is unused.
	(atomic_fetch_not<mode>_soft_imask): Convert to insn_and_split.  Split
	into atomic_not_fetch<mode>_soft_imask is operands[0] is unused.
	(atomic_fetch_nandsi_hard): Convert to insn_and_split.  Split into
	atomic_nand_fetchsi_hard if operands[0] is unused.
	(atomic_fetch_nand<mode>_hard): Convert to insn_and_split.  Split into
	atomic_nand<mode>_hard if operands[0] is unused.
	(atomic_fetch_nand<mode>_soft_gusa): Convert to insn_and_split.  Split
	into atomic_nand_fetch<mode>_soft_gusa if operands[0] is unused.
	(atomic_fetch_nand<mode>_soft_tcb): Convert to insn_and_split.  Split
	into atomic_nand<mode>_soft_tcb if operands[0] is unused.
	(atomic_fetch_nand<mode>_soft_imask): Convert to insn_and_split.  Split
	into atomic_nand_fetch<mode>_soft_imask if operands[0] is unused.
	(atomic_<fetchop_name>_fetch<mode>_hard): Convert to insn_and_split.
	Split into atomic_<fetchop_name><mode>_hard if operands[0] is unused.
	(atomic_not_fetch<mode>_hard): Convert to insn_and_split.  Split into
	atomic_not<mode>_hard if operands[0] is unused.
	(atomic_<fetchop_name>_fetch<mode>_soft_tcb): Convert to insn_and_split.
	Split into atomic_<fetchop_name><mode>_soft_tcb if operands[0] is
	unused.
	(atomic_not_fetch<mode>_soft_tcb): Convert to insn_and_split.  Split
	into atomic_not<mode>_soft_tcb if operands[0] is unused.
	(atomic_nand_fetch<mode>_hard): Convert to insn_and_split.  Split into
	atomic_nand<mode>_hard if operands[0] is unused.
	(atomic_nand_fetch<mode>_soft_tcb): Convert to insn_and_split.  Split
	into atomic_nand<mode>_soft_tcb if operands[0] is unused.

gcc/testsuite/
	PR target/64660
	* gcc.target/sh/pr64660-0.h: New.
	* gcc.target/sh/pr64660-1.c: New.
	* gcc.target/sh/pr64660-2.c: New.
	* gcc.target/sh/pr64660-3.c: New.
	* gcc.target/sh/pr64660-4.c: New.

From-SVN: r220376
parent 0ed4f017
2015-02-03 Oleg Endo <olegendo@gcc.gnu.org>
PR target/64660
* config/sh/sync.md (atomic_<fetchop_name><mode>_hard,
atomic_not<mode>_hard, atomic_<fetchop_name><mode>_soft_tcb,
atomic_not<mode>_soft_tcb, atomic_nand<mode>_hard,
atomic_nand<mode>_soft_tcb): New insns.
(atomic_fetch_<fetchop_name>si_hard): Convert to insn_and_split.
Split into atomic_<fetchop_name>_fetchsi_hard if operands[0] is unused.
(define_insn "atomic_fetch_notsi_hard): Convert to insn_and_split.
Split into atomic_not_fetchsi_hard if operands[0] is unused.
(atomic_fetch_<fetchop_name><mode>_hard): Convert to insn_and_split.
Split into atomic_<fetchop_name><mode>_hard if operands[0] is unused.
(atomic_fetch_not<mode>_hard): Convert to insn_and_split. Split into
atomic_not<mode>_hard if operands[0] is unused.
(atomic_fetch_<fetchop_name><mode>_soft_gusa): Convert to
insn_and_split. Split into atomic_<fetchop_name>_fetch<mode>_soft_gusa
if operands[0] is unused.
(atomic_fetch_not<mode>_soft_gusa): Convert to insn_and_split. Split
into atomic_not_fetch<mode>_soft_gusa if operands[0] is unused.
(atomic_fetch_<fetchop_name><mode>_soft_tcb): Convert to insn_and_split.
Split into atomic_<fetchop_name><mode>_soft_tcb if operands[0] is
unused.
(atomic_fetch_not<mode>_soft_tcb): Convert to insn_and_split. Split
into atomic_not<mode>_soft_tcb if operands[0] is unused.
(atomic_fetch_<fetchop_name><mode>_soft_imask): Convert to
insn_and_split. Split into atomic_<fetchop_name>_fetch<mode>_soft_imask
if operands[0] is unused.
(atomic_fetch_not<mode>_soft_imask): Convert to insn_and_split. Split
into atomic_not_fetch<mode>_soft_imask is operands[0] is unused.
(atomic_fetch_nandsi_hard): Convert to insn_and_split. Split into
atomic_nand_fetchsi_hard if operands[0] is unused.
(atomic_fetch_nand<mode>_hard): Convert to insn_and_split. Split into
atomic_nand<mode>_hard if operands[0] is unused.
(atomic_fetch_nand<mode>_soft_gusa): Convert to insn_and_split. Split
into atomic_nand_fetch<mode>_soft_gusa if operands[0] is unused.
(atomic_fetch_nand<mode>_soft_tcb): Convert to insn_and_split. Split
into atomic_nand<mode>_soft_tcb if operands[0] is unused.
(atomic_fetch_nand<mode>_soft_imask): Convert to insn_and_split. Split
into atomic_nand_fetch<mode>_soft_imask if operands[0] is unused.
(atomic_<fetchop_name>_fetch<mode>_hard): Convert to insn_and_split.
Split into atomic_<fetchop_name><mode>_hard if operands[0] is unused.
(atomic_not_fetch<mode>_hard): Convert to insn_and_split. Split into
atomic_not<mode>_hard if operands[0] is unused.
(atomic_<fetchop_name>_fetch<mode>_soft_tcb): Convert to insn_and_split.
Split into atomic_<fetchop_name><mode>_soft_tcb if operands[0] is
unused.
(atomic_not_fetch<mode>_soft_tcb): Convert to insn_and_split. Split
into atomic_not<mode>_soft_tcb if operands[0] is unused.
(atomic_nand_fetch<mode>_hard): Convert to insn_and_split. Split into
atomic_nand<mode>_hard if operands[0] is unused.
(atomic_nand_fetch<mode>_soft_tcb): Convert to insn_and_split. Split
into atomic_nand<mode>_soft_tcb if operands[0] is unused.
2015-02-03 David Malcolm <dmalcolm@redhat.com>
PR jit/64810
......
2015-02-03 Oleg Endo <olegendo@gcc.gnu.org>
PR target/64660
* gcc.target/sh/pr64660-0.h: New.
* gcc.target/sh/pr64660-1.c: New.
* gcc.target/sh/pr64660-2.c: New.
* gcc.target/sh/pr64660-3.c: New.
* gcc.target/sh/pr64660-4.c: New.
2015-02-03 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/64877
......
/* Check that the appropriate atomic insns are used if the result values
are unused. */
#define concat_1(x, y) x ## y
#define concat(x, y) concat_1 (x, y)
#define makefuncname(name) concat (concat (test_, __LINE__), name)
#define emitfuncs(name,val)\
void makefuncname (_0) (char* mem)\
{\
name (mem, val, __ATOMIC_ACQ_REL);\
}\
void makefuncname (_1) (short* mem)\
{\
name (mem, val, __ATOMIC_ACQ_REL);\
}\
void makefuncname (_2) (int* mem)\
{\
name (mem, val, __ATOMIC_ACQ_REL);\
}\
emitfuncs (__atomic_add_fetch, 1)
emitfuncs (__atomic_fetch_add, 1)
emitfuncs (__atomic_sub_fetch, 1)
emitfuncs (__atomic_fetch_sub, 1)
emitfuncs (__atomic_and_fetch, 1)
emitfuncs (__atomic_fetch_and, 1)
emitfuncs (__atomic_or_fetch, 1)
emitfuncs (__atomic_fetch_or, 1)
emitfuncs (__atomic_xor_fetch, 1)
emitfuncs (__atomic_fetch_xor, 1)
emitfuncs (__atomic_nand_fetch, 1)
emitfuncs (__atomic_fetch_nand, 1)
emitfuncs (__atomic_xor_fetch, -1)
emitfuncs (__atomic_fetch_xor, -1)
emitfuncs (__atomic_nand_fetch, -1)
emitfuncs (__atomic_fetch_nand, -1)
/* Check that the appropriate atomic insns are used if the result values
are unused. */
/* { dg-do compile { target { atomic_model_soft_gusa_available } } } */
/* { dg-options "-dp -O2 -matomic-model=soft-gusa,strict" } */
/* { dg-final { scan-assembler-times "atomic_add_fetch" 12 } } */
/* { dg-final { scan-assembler-times "atomic_and_fetch" 6 } } */
/* { dg-final { scan-assembler-times "atomic_or_fetch" 6 } } */
/* { dg-final { scan-assembler-times "atomic_xor_fetch" 6 } } */
/* { dg-final { scan-assembler-times "atomic_nand_fetch" 6 } } */
/* { dg-final { scan-assembler-times "atomic_not_fetch" 12 } } */
#include "pr64660-0.h"
/* Check that the appropriate atomic insns are used if the result values
are unused. */
/* { dg-do compile { target { atomic_model_soft_tcb_available } } } */
/* { dg-options "-dp -O2 -matomic-model=soft-tcb,gbr-offset=0,strict" } */
/* { dg-final { scan-assembler-times "atomic_add" 12 } } */
/* { dg-final { scan-assembler-times "atomic_and" 6 } } */
/* { dg-final { scan-assembler-times "atomic_or" 6 } } */
/* { dg-final { scan-assembler-times "atomic_xor" 6 } } */
/* { dg-final { scan-assembler-times "atomic_nand" 6 } } */
/* { dg-final { scan-assembler-times "atomic_not" 12 } } */
/* { dg-final { scan-assembler-not "fetch" } } */
#include "pr64660-0.h"
/* Check that the appropriate atomic insns are used if the result values
are unused. */
/* { dg-do compile { target { atomic_model_soft_imask_available } } } */
/* { dg-options "-dp -O2 -matomic-model=soft-imask,strict -mno-usermode" } */
/* { dg-final { scan-assembler-times "atomic_add_fetch" 12 } } */
/* { dg-final { scan-assembler-times "atomic_and_fetch" 6 } } */
/* { dg-final { scan-assembler-times "atomic_or_fetch" 6 } } */
/* { dg-final { scan-assembler-times "atomic_xor_fetch" 6 } } */
/* { dg-final { scan-assembler-times "atomic_nand_fetch" 6 } } */
/* { dg-final { scan-assembler-times "atomic_not_fetch" 12 } } */
#include "pr64660-0.h"
/* Check that atomic not ops are generated. */
/* { dg-do compile { target { atomic_model_hard_llcs_available } } } */
/* { dg-options "-dp -O2 -matomic-model=hard-llcs,strict" } */
/* { dg-final { scan-assembler-times "atomic_add" 12 } } */
/* { dg-final { scan-assembler-times "atomic_add_fetch" 4 } } */
/* { dg-final { scan-assembler-times "atomic_and" 6 } } */
/* { dg-final { scan-assembler-times "atomic_and_fetch" 2 } } */
/* { dg-final { scan-assembler-times "atomic_or" 6 } } */
/* { dg-final { scan-assembler-times "atomic_or_fetch" 2 } } */
/* { dg-final { scan-assembler-times "atomic_xor" 6 } } */
/* { dg-final { scan-assembler-times "atomic_xor_fetch" 2 } } */
/* { dg-final { scan-assembler-times "atomic_nand" 6 } } */
/* { dg-final { scan-assembler-times "atomic_nand_fetch" 2 } } */
/* { dg-final { scan-assembler-times "atomic_not" 12 } } */
/* { dg-final { scan-assembler-times "atomic_not_fetch" 4 } } */
#include "pr64660-0.h"
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