[llvm] r357256 - [DAGCombine] Improve Lifetime node chains.

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 3 00:44:39 PDT 2019


This was reverted together with r357309 in r357563 as it caused
https://bugs.llvm.org/show_bug.cgi?id=41352

On Fri, Mar 29, 2019 at 3:08 PM Nirav Dave via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
>
> 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: }
>  ;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list