http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55981



Andrew Pinski <pinskia at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

           Keywords|                            |wrong-code

             Target|                            |i?86-*-* x86_64-*-*

             Status|UNCONFIRMED                 |NEW

   Last reconfirmed|                            |2013-01-14

     Ever Confirmed|0                           |1



--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> 2013-01-14 
23:08:10 UTC ---

The tree level is correct:

  __atomic_store_8 (&MEM[(struct __atomic_base *)&y]._M_i, 4294967298, 5);

  __atomic_store_8 (&MEM[(struct __atomic_base *)&y]._M_i, 12884901892, 5);

Expansion is correct:

;; __atomic_store_8 (&MEM[(struct __atomic_base *)&y]._M_i, 4294967298, 5);



(insn 31 30 32 (set (reg:DI 84)

        (const_int 4294967298 [0x100000002]))

/data1/src/gcc-cavium/toolchain/x86_64-tools/bin/../lib/gcc/x86_64-montavista-linux-gnu/4.7.0/../../../../x86_64-montavista-linux-gnu/include/c++/4.7.0/bits/atomic_base.h:438

-1

     (nil))



(insn 32 31 33 (set (mem/v:DI (symbol_ref:DI ("y") [flags 0x2]  <var_decl

0x7f5cdac4c0a0 y>) [-1 S8 A64])

        (reg:DI 84))

/data1/src/gcc-cavium/toolchain/x86_64-tools/bin/../lib/gcc/x86_64-montavista-linux-gnu/4.7.0/../../../../x86_64-montavista-linux-gnu/include/c++/4.7.0/bits/atomic_base.h:438

-1

     (nil))



(insn 33 32 0 (set (mem/v:BLK (scratch:DI) [0 A8])

        (unspec:BLK [

                (mem/v:BLK (scratch:DI) [0 A8])

            ] UNSPEC_MFENCE))

/data1/src/gcc-cavium/toolchain/x86_64-tools/bin/../lib/gcc/x86_64-montavista-linux-gnu/4.7.0/../../../../x86_64-montavista-linux-gnu/include/c++/4.7.0/bits/atomic_base.h:438

-1

     (nil))



cprop3 does (though there might be cost issues):

(insn 66 30 33 3 (set (mem/v:DI (symbol_ref:DI ("y") [flags 0x2]  <var_decl

0x7f5cdac4c0a0 y>) [-1 S8 A64])

        (const_int 4294967298 [0x100000002]))

/data1/src/gcc-cavium/toolchain/x86_64-tools/bin/../lib/gcc/x86_64-montavista-linux-gnu/4.7.0/../../../../x86_64-montavista-linux-gnu/include/c++/4.7.0/bits/atomic_base.h:438

62 {*movdi_internal_rex64}

     (nil))



(insn 33 66 35 3 (set (mem/v:BLK (scratch:DI) [0 A8])

        (unspec:BLK [

                (mem/v:BLK (scratch:DI) [0 A8])

            ] UNSPEC_MFENCE))

/data1/src/gcc-cavium/toolchain/x86_64-tools/bin/../lib/gcc/x86_64-montavista-linux-gnu/4.7.0/../../../../x86_64-montavista-linux-gnu/include/c++/4.7.0/bits/atomic_base.h:438

2052 {mfence_sse2}

     (nil))



peephole2 then comes around and does the splitting of the atomic instruction so

this is a target issue.

Reply via email to