[llvm] r357256 - [DAGCombine] Improve Lifetime node chains.
Nirav Dave via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 29 07:09:47 PDT 2019
Author: niravd
Date: Fri Mar 29 07:09:47 2019
New Revision: 357256
URL: http://llvm.org/viewvc/llvm-project?rev=357256&view=rev
Log:
[DAGCombine] Improve Lifetime node chains.
Improve both start and end lifetime nodes chain dependencies.
Reviewers: courbet
Reviewed By: courbet
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D59795
Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/trunk/test/CodeGen/X86/swap.ll
llvm/trunk/test/DebugInfo/COFF/lexicalblock.ll
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=357256&r1=357255&r2=357256&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Fri Mar 29 07:09:47 2019
@@ -384,6 +384,10 @@ namespace {
SDValue replaceStoreOfFPConstant(StoreSDNode *ST);
SDValue visitSTORE(SDNode *N);
+
+ SDValue ImproveLifetimeNodeChain(SDNode *N);
+
+ SDValue visitLIFETIME_START(SDNode *N);
SDValue visitLIFETIME_END(SDNode *N);
SDValue visitINSERT_VECTOR_ELT(SDNode *N);
SDValue visitEXTRACT_VECTOR_ELT(SDNode *N);
@@ -1604,6 +1608,7 @@ SDValue DAGCombiner::visit(SDNode *N) {
case ISD::MLOAD: return visitMLOAD(N);
case ISD::MSCATTER: return visitMSCATTER(N);
case ISD::MSTORE: return visitMSTORE(N);
+ case ISD::LIFETIME_START: return visitLIFETIME_START(N);
case ISD::LIFETIME_END: return visitLIFETIME_END(N);
case ISD::FP_TO_FP16: return visitFP_TO_FP16(N);
case ISD::FP16_TO_FP: return visitFP16_TO_FP(N);
@@ -15654,7 +15659,32 @@ SDValue DAGCombiner::visitSTORE(SDNode *
return ReduceLoadOpStoreWidth(N);
}
+SDValue DAGCombiner::ImproveLifetimeNodeChain(SDNode *N) {
+ auto Chain = N->getOperand(0);
+ auto NewChain = FindBetterChain(N, Chain);
+ if (NewChain != Chain) {
+ SDNode *N2 = DAG.UpdateNodeOperands(N, NewChain, N->getOperand(1));
+ // Make sure users of new N still depend on Chain
+ auto TF = DAG.getNode(ISD::TokenFactor, SDLoc(N2), MVT::Other, Chain,
+ SDValue(N2, 0));
+ DAG.ReplaceAllUsesOfValueWith(SDValue(N2, 0), TF);
+ AddToWorklist(DAG.UpdateNodeOperands(TF.getNode(), Chain, SDValue(N2, 0)));
+ AddToWorklist(N2);
+ return SDValue(N, 0);
+ }
+ return SDValue();
+}
+
+SDValue DAGCombiner::visitLIFETIME_START(SDNode *N) {
+ if (SDValue V = ImproveLifetimeNodeChain(N))
+ return V;
+ return SDValue();
+}
+
SDValue DAGCombiner::visitLIFETIME_END(SDNode *N) {
+ if (SDValue V = ImproveLifetimeNodeChain(N))
+ return V;
+
const auto *LifetimeEnd = cast<LifetimeSDNode>(N);
if (!LifetimeEnd->hasOffset())
return SDValue();
Modified: llvm/trunk/test/CodeGen/X86/swap.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/swap.ll?rev=357256&r1=357255&r2=357256&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/swap.ll (original)
+++ llvm/trunk/test/CodeGen/X86/swap.ll Fri Mar 29 07:09:47 2019
@@ -94,7 +94,6 @@ define dso_local void @twoallocs(i8* noc
; AA-LABEL: twoallocs:
; AA: # %bb.0: # %entry
; AA-NEXT: vmovups (%rdi), %xmm0
-; AA-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
; AA-NEXT: vmovups %xmm0, (%rsi)
; AA-NEXT: retq
entry:
@@ -125,7 +124,6 @@ define dso_local void @onealloc_readback
; AA-LABEL: onealloc_readback_1:
; AA: # %bb.0: # %entry
; AA-NEXT: vmovups (%rsi), %xmm0
-; AA-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
; AA-NEXT: vmovups %xmm0, (%rdi)
; AA-NEXT: retq
entry:
@@ -155,7 +153,6 @@ define dso_local void @onealloc_readback
; AA-LABEL: onealloc_readback_2:
; AA: # %bb.0: # %entry
; AA-NEXT: vmovups (%rsi), %xmm0
-; AA-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
; AA-NEXT: vmovups %xmm0, (%rdi)
; AA-NEXT: retq
entry:
Modified: llvm/trunk/test/DebugInfo/COFF/lexicalblock.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/lexicalblock.ll?rev=357256&r1=357255&r2=357256&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/COFF/lexicalblock.ll (original)
+++ llvm/trunk/test/DebugInfo/COFF/lexicalblock.ll Fri Mar 29 07:09:47 2019
@@ -80,19 +80,6 @@
; CHECK: ScopeEndSym {
; CHECK: Kind: S_END {{.*}}
; CHECK: }
-; CHECK: BlockSym {
-; CHECK: Kind: S_BLOCK32 {{.*}}
-; CHECK: BlockName:
-; CHECK: }
-; CHECK: ScopeEndSym {
-; CHECK: }
-; CHECK: BlockSym {
-; CHECK: Kind: S_BLOCK32 {{.*}}
-; CHECK: BlockName:
-; CHECK: }
-; CHECK: ScopeEndSym {
-; CHECK: Kind: S_END {{.*}}
-; CHECK: }
; CHECK: ProcEnd {
; CHECK: }
;
More information about the llvm-commits
mailing list