[Bug middle-end/64974] [SH] Weird expansion of 'expected' operand in atomic_compare_and_swap<mode>

olegendo at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Feb 10 20:48:00 GMT 2015


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64974

--- Comment #1 from Oleg Endo <olegendo at gcc dot gnu.org> ---
Author: olegendo
Date: Tue Feb 10 20:47:33 2015
New Revision: 220594

URL: https://gcc.gnu.org/viewcvs?rev=220594&root=gcc&view=rev
Log:
gcc/
    PR target/64661
    * config/sh/sh-protos.h (TARGET_ATOMIC_ANY, TARGET_ATOMIC_STRICT,
    TARGET_ATOMIC_SOFT_GUSA, TARGET_ATOMIC_HARD_LLCS,
    TARGET_ATOMIC_SOFT_TCB, TARGET_ATOMIC_SOFT_IMASK): Add parentheses.
    * config/sh/constraints.md (Ara, Add): New constraints.
    * config/sh/sync.md (atomic_mem_operand_0, atomic_mem_operand_1): New
    predicates.
    (atomic_compare_and_swap<mode>, atomic_exchange<mode>): Use
    atomic_mem_operand_0.  Don't use force_reg on the memory address.
    (atomic_compare_and_swapsi_hard): Use atomic_mem_operand_0 predicate and
    Sra constraint.  Convert to insn_and_split.  Add workaround for
    PR 64974.
    (atomic_compare_and_swap<mode>_hard): Copy to
    atomic_compare_and_swap<mode>_hard_1.  Convert to insn_and_split.
    Use atomic_mem_operand_0 predicate.
    (atomic_compare_and_swap<mode>_soft_gusa,
    atomic_exchange<mode>_soft_gusa): Use atomic_mem_operand_0 predicate and
    AraAdd constraints.
    (atomic_compare_and_swap<mode>_soft_tcb,
    atomic_compare_and_swap<mode>_soft_imask,
    atomic_exchange<mode>_soft_tcb, atomic_exchange<mode>_soft_imask): Use
    atomic_mem_operand_0 predicate and SraSdd constraints.
    (atomic_exchangesi_hard) Use atomic_mem_operand_0 predicate and Sra
    constraint.
    (atomic_exchange<mode>_hard): Copy to atomic_exchange<mode>_hard_1.
    Convert to insn_and_split.  Use atomic_mem_operand_0 predicate.
    (atomic_fetch_<fetchop_name><mode>, atomic_fetch_nand<mode>,
    atomic_<fetchop_name>_fetch<mode>): Use atomic_mem_operand_1.  Don't use
    force_reg on the memory address.
    (atomic_fetch_<fetchop_name>si_hard, atomic_fetch_notsi_hard,
    atomic_fetch_nandsi_hard, atomic_<fetchop_name>_fetchsi_hard,
    atomic_not_fetchsi_hard, atomic_nand_fetchsi_hard): Use
    atomic_mem_operand_1 predicate and Sra constraint.
    (atomic_fetch_<fetchop_name><mode>_hard): Copy to
    atomic_fetch_<fetchop_name><mode>_hard_1.  Convert to insn_and_split.
    Use atomic_mem_operand_1 predicate.
    (atomic_<fetchop_name><mode>_hard): Copy to
    atomic_<fetchop_name><mode>_hard_1.  Convert to insn_and_split.
    Use atomic_mem_operand_1 predicate.
    (atomic_fetch_nand<mode>_hard): Copy to atomic_fetch_nand<mode>_hard_1.
    Convert to insn_and_split.  Use atomic_mem_operand_1 predicate.
    (atomic_nand<mode>_hard): Copy to atomic_nand<mode>_hard_1.  Convert to
    insn_and_split.  Use atomic_mem_operand_1 predicate.
    (atomic_<fetchop_name>_fetch<mode>_hard): Copy to
    atomic_<fetchop_name>_fetch<mode>_hard_1.  Convert to insn_and_split.
    Use atomic_mem_operand_1 predicate.
    (atomic_nand_fetch<mode>_hard): Copy to atomic_nand_fetch<mode>_hard_1.
    Convert to insn_and_split.  Use atomic_mem_operand_1 predicate.
    (atomic_fetch_not<mode>_hard, atomic_not_fetch<mode>_hard): Replace mems
    in generated insn with original mem operand before emitting the insn.
    (atomic_fetch_<fetchop_name><mode>_soft_gusa,
    atomic_fetch_not<mode>_soft_gusa, atomic_fetch_nand<mode>_soft_gusa,
    atomic_<fetchop_name>_fetch<mode>_soft_gusa,
    atomic_not_fetch<mode>_soft_gusa, atomic_nand_fetch<mode>_soft_gusa):
    Use atomic_mem_operand_1 predicate and AraAdd constraints.
    (atomic_fetch_<fetchop_name><mode>_soft_tcb,
    atomic_<fetchop_name><mode>_soft_tcb, atomic_fetch_not<mode>_soft_tcb,
    atomic_not<mode>_soft_tcb, atomic_fetch_<fetchop_name><mode>_soft_imask,
    atomic_fetch_not<mode>_soft_imask, atomic_fetch_nand<mode>_soft_tcb,
    atomic_nand<mode>_soft_tcb, atomic_fetch_nand<mode>_soft_imask,
    atomic_<fetchop_name>_fetch<mode>_soft_tcb,
    atomic_not_fetch<mode>_soft_tcb,
    atomic_<fetchop_name>_fetch<mode>_soft_imask,
    atomic_not_fetch<mode>_soft_imask, atomic_nand_fetch<mode>,
    atomic_nand_fetch<mode>_soft_tcb, atomic_nand_fetch<mode>_soft_imask):
    Use atomic_mem_operand_1 predicate and SraSdd constraints.

gcc/testsuite/
    PR target/64661
    * gcc.taget/sh/pr64661-0.h: New.
    * gcc.taget/sh/pr64661-1.c: New.
    * gcc.taget/sh/pr64661-2.c: New.
    * gcc.taget/sh/pr64661-3.c: New.
    * gcc.taget/sh/pr64661-4.c: New.

Added:
    trunk/gcc/testsuite/gcc.target/sh/pr64661-0.h
    trunk/gcc/testsuite/gcc.target/sh/pr64661-1.c
    trunk/gcc/testsuite/gcc.target/sh/pr64661-2.c
    trunk/gcc/testsuite/gcc.target/sh/pr64661-3.c
    trunk/gcc/testsuite/gcc.target/sh/pr64661-4.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/sh/constraints.md
    trunk/gcc/config/sh/sh-protos.h
    trunk/gcc/config/sh/sync.md
    trunk/gcc/testsuite/ChangeLog



More information about the Gcc-bugs mailing list