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)
commit8cfa23f93aeb8d3596a1ddc53b458953e487b8cf
tree6e6a5fb132e2c7de34a0d18a60176bb50490d862
parentbd4b424c12339e21b2fb7c1a1f4c2cf18fc350c2
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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244128 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86ISelLowering.cpp
lib/Target/X86/X86ISelLowering.h
lib/Target/X86/X86InstrCompiler.td
lib/Target/X86/X86MCInstLower.cpp
test/CodeGen/X86/atomic_mi.ll