[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