x86 atomic: optimize a.store(reg op a.load(acquire), release)
authorJF Bastien <jfb@google.com>
Wed, 5 Aug 2015 21:04:59 +0000 (21:04 +0000)
committerJF Bastien <jfb@google.com>
Wed, 5 Aug 2015 21:04:59 +0000 (21:04 +0000)
commit8662083770b34a7e62c8a3ae01f6b2e5be417417
treeccd4d0d937fd080842d39d17cff41444e95234d4
parent8ef3cda3983842531d09e3ef7b445141b626677c
x86 atomic: optimize a.store(reg op a.load(acquire), release)

Summary: PR24191 finds that the expected memory-register operations aren't generated when relaxed { load ; modify ; store } is used. This is similar to PR17281 which was addressed in D4796, but only for memory-immediate operations (and for memory orderings up to acquire and release). This patch also handles some floating-point operations.

Reviewers: reames, kcc, dvyukov, nadav, morisset, chandlerc, t.p.northover, pete

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D11382

llvm-svn: 244128
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/lib/Target/X86/X86ISelLowering.h
llvm/lib/Target/X86/X86InstrCompiler.td
llvm/lib/Target/X86/X86MCInstLower.cpp
llvm/test/CodeGen/X86/atomic_mi.ll