From 1e93deac15b1f6c1b2c6f3b268941b5c068bb578 Mon Sep 17 00:00:00 2001 From: Nirav Dave Date: Thu, 28 Mar 2019 15:53:01 +0000 Subject: [PATCH] [DAG] Fix Lifetime Node ID hashing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357179 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/SelectionDAGNodes.h | 5 +++-- lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 7 +++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/include/llvm/CodeGen/SelectionDAGNodes.h b/include/llvm/CodeGen/SelectionDAGNodes.h index dada28eb566..e562ffcefd7 100644 --- a/include/llvm/CodeGen/SelectionDAGNodes.h +++ b/include/llvm/CodeGen/SelectionDAGNodes.h @@ -1708,13 +1708,14 @@ public: /// This SDNode is used for LIFETIME_START/LIFETIME_END values, which indicate /// the offet and size that are started/ended in the underlying FrameIndex. class LifetimeSDNode : public SDNode { + friend class SelectionDAG; int64_t Size; int64_t Offset; // -1 if offset is unknown. -public: + LifetimeSDNode(unsigned Opcode, unsigned Order, const DebugLoc &dl, SDVTList VTs, int64_t Size, int64_t Offset) : SDNode(Opcode, Order, dl, VTs), Size(Size), Offset(Offset) {} - +public: int64_t getFrameIndex() const { return cast(getOperand(1))->getIndex(); } diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 6648d1b089e..3cd08271f26 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -517,6 +517,13 @@ static void AddNodeIDCustom(FoldingSetNodeID &ID, const SDNode *N) { case ISD::TargetFrameIndex: ID.AddInteger(cast(N)->getIndex()); break; + case ISD::LIFETIME_START: + case ISD::LIFETIME_END: + if (cast(N)->hasOffset()) { + ID.AddInteger(cast(N)->getSize()); + ID.AddInteger(cast(N)->getOffset()); + } + break; case ISD::JumpTable: case ISD::TargetJumpTable: ID.AddInteger(cast(N)->getIndex()); -- 2.50.1