]> granicus.if.org Git - llvm/commit
Recommit r358211 "[X86] Use FILD/FIST to implement i64 atomic load on 32-bit targets...
authorCraig Topper <craig.topper@intel.com>
Thu, 11 Apr 2019 19:19:42 +0000 (19:19 +0000)
committerCraig Topper <craig.topper@intel.com>
Thu, 11 Apr 2019 19:19:42 +0000 (19:19 +0000)
commitb5079b20d2ecf1d45d7ec33633238dc9200db481
treeddec0afdbafcc05366323eac16e15b420fa8c53e
parentd11a7fa9a6eb1d2da7294c8c908ad02df4501059
Recommit r358211 "[X86] Use FILD/FIST to implement i64 atomic load on 32-bit targets with X87, but no SSE2"

With correct test checks this time.

If we have X87, but not SSE2 we can atomicaly load an i64 value into the significand of an 80-bit extended precision x87 register using fild. We can then use a fist instruction to convert it back to an i64 integ

This matches what gcc and icc do for this case and removes an existing FIXME.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358214 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86ISelLowering.cpp
lib/Target/X86/X86ISelLowering.h
lib/Target/X86/X86InstrFPStack.td
test/CodeGen/X86/atomic-fp.ll
test/CodeGen/X86/atomic-load-store-wide.ll
test/CodeGen/X86/atomic-mi.ll
test/CodeGen/X86/atomic-non-integer.ll
test/CodeGen/X86/misched_phys_reg_assign_order.ll