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.