[llvm] r360649 - [X86] Prefer locked stack op over mfence for seq_cst 64-bit stores on 32-bit targets
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Mon May 13 21:43:38 PDT 2019
Author: reames
Date: Mon May 13 21:43:37 2019
New Revision: 360649
URL: http://llvm.org/viewvc/llvm-project?rev=360649&view=rev
Log:
[X86] Prefer locked stack op over mfence for seq_cst 64-bit stores on 32-bit targets
This is a follow on to D58632, with the same logic. Given a memory operation which needs ordering, but doesn't need to modify any particular address, prefer to use a locked stack op over an mfence.
Differential Revision: https://reviews.llvm.org/D61863
Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
llvm/trunk/test/CodeGen/X86/atomic-load-store-wide.ll
llvm/trunk/test/CodeGen/X86/atomic-non-integer.ll
Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=360649&r1=360648&r2=360649&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Mon May 13 21:43:37 2019
@@ -26456,9 +26456,10 @@ static SDValue LowerATOMIC_STORE(SDValue
Ops, MVT::i64,
Node->getMemOperand());
- // If this is a sequentially consistent store, also emit an mfence.
+ // If this is a sequentially consistent store, also emit an appropriate
+ // barrier.
if (IsSeqCst)
- Chain = DAG.getNode(X86ISD::MFENCE, dl, MVT::Other, Chain);
+ Chain = emitLockedStackOp(DAG, Subtarget, Chain, dl);
return Chain;
}
Modified: llvm/trunk/test/CodeGen/X86/atomic-load-store-wide.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/atomic-load-store-wide.ll?rev=360649&r1=360648&r2=360649&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/atomic-load-store-wide.ll (original)
+++ llvm/trunk/test/CodeGen/X86/atomic-load-store-wide.ll Mon May 13 21:43:37 2019
@@ -11,7 +11,7 @@ define void @test1(i64* %ptr, i64 %val1)
; SSE42-NEXT: movl {{[0-9]+}}(%esp), %eax
; SSE42-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
; SSE42-NEXT: movlps %xmm0, (%eax)
-; SSE42-NEXT: mfence
+; SSE42-NEXT: lock orl $0, (%esp)
; SSE42-NEXT: retl
;
; NOSSE-LABEL: test1:
Modified: llvm/trunk/test/CodeGen/X86/atomic-non-integer.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/atomic-non-integer.ll?rev=360649&r1=360648&r2=360649&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/atomic-non-integer.ll (original)
+++ llvm/trunk/test/CodeGen/X86/atomic-non-integer.ll Mon May 13 21:43:37 2019
@@ -710,7 +710,7 @@ define void @store_double_seq_cst(double
; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %eax
; X86-SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
; X86-SSE2-NEXT: movlps %xmm0, (%eax)
-; X86-SSE2-NEXT: mfence
+; X86-SSE2-NEXT: lock orl $0, (%esp)
; X86-SSE2-NEXT: retl
;
; X86-AVX-LABEL: store_double_seq_cst:
@@ -718,7 +718,7 @@ define void @store_double_seq_cst(double
; X86-AVX-NEXT: movl {{[0-9]+}}(%esp), %eax
; X86-AVX-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
; X86-AVX-NEXT: vmovlps %xmm0, (%eax)
-; X86-AVX-NEXT: mfence
+; X86-AVX-NEXT: lock orl $0, (%esp)
; X86-AVX-NEXT: retl
;
; X86-NOSSE-LABEL: store_double_seq_cst:
More information about the llvm-commits
mailing list