summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2019-04-03 07:41:58 +0000
committerHans Wennborg <hans@hanshq.net>2019-04-03 07:41:58 +0000
commit94b867dc7c202162f587fd3345eccdb09bff2a77 (patch)
tree5c0983aa79877796bddf773ad597aae079a5182e
parent2374bff376c6cf54fbea55c739a30968663a5cf1 (diff)
downloadbcm5719-llvm-94b867dc7c202162f587fd3345eccdb09bff2a77.tar.gz
bcm5719-llvm-94b867dc7c202162f587fd3345eccdb09bff2a77.zip
Revert r357256 "[DAGCombine] Improve Lifetime node chains."
As it caused a pathological compile-time regressionin V8, see PR41352. > 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 This also reverts the follow-up r357309: > [DAGCombiner] Rewrite ImproveLifetimeNodeChain to avoid DAG loop. > > Avoid EXPENSIVE_CHECK failure. NFCI. llvm-svn: 357563
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp31
-rw-r--r--llvm/test/CodeGen/X86/swap.ll3
-rw-r--r--llvm/test/DebugInfo/COFF/lexicalblock.ll13
3 files changed, 16 insertions, 31 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 15044d1f18d..e58e8353617 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -427,10 +427,6 @@ 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);
@@ -1654,7 +1650,6 @@ 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);
@@ -15705,33 +15700,7 @@ SDValue DAGCombiner::visitSTORE(SDNode *N) {
return ReduceLoadOpStoreWidth(N);
}
-SDValue DAGCombiner::ImproveLifetimeNodeChain(SDNode *N) {
- auto Chain = N->getOperand(0);
- auto NewChain = FindBetterChain(N, Chain);
- if (NewChain != Chain) {
- LifetimeSDNode *LN = cast<LifetimeSDNode>(N);
- // Create New Node to prevent loop in CombineTo.
- SDValue NewN = DAG.getLifetimeNode(N->getOpcode() == ISD::LIFETIME_START,
- SDLoc(N), NewChain, LN->getFrameIndex(),
- LN->hasOffset() ? LN->getSize() : -1,
- LN->hasOffset() ? LN->getOffset() : -1);
- AddToWorklist(NewN.getNode());
- auto TF = DAG.getNode(ISD::TokenFactor, SDLoc(N), MVT::Other, Chain, NewN);
- return CombineTo(N, TF);
- }
- 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();
diff --git a/llvm/test/CodeGen/X86/swap.ll b/llvm/test/CodeGen/X86/swap.ll
index 08166d830ae..7a8edbbe50a 100644
--- a/llvm/test/CodeGen/X86/swap.ll
+++ b/llvm/test/CodeGen/X86/swap.ll
@@ -94,6 +94,7 @@ define dso_local void @twoallocs(i8* nocapture %a, i8* nocapture %b) local_unnam
; 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:
@@ -124,6 +125,7 @@ define dso_local void @onealloc_readback_1(i8* nocapture %a, i8* nocapture %b) l
; 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:
@@ -153,6 +155,7 @@ define dso_local void @onealloc_readback_2(i8* nocapture %a, i8* nocapture %b) l
; 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:
diff --git a/llvm/test/DebugInfo/COFF/lexicalblock.ll b/llvm/test/DebugInfo/COFF/lexicalblock.ll
index 646f13bf82e..970aae27d69 100644
--- a/llvm/test/DebugInfo/COFF/lexicalblock.ll
+++ b/llvm/test/DebugInfo/COFF/lexicalblock.ll
@@ -80,6 +80,19 @@
; 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: }
;
OpenPOWER on IntegriCloud