From 17b51b655e3afb4f6dd24a5ac1859bcece07777b Mon Sep 17 00:00:00 2001 From: Clement Courbet Date: Tue, 5 Feb 2019 07:36:20 +0000 Subject: [DAG] BaseIndexOffset: FrameIndexSDNodes with the same FrameIndex compare equal. Reviewers: niravd Subscribers: arphaman, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D57692 llvm-svn: 353143 --- .../CodeGen/SelectionDAG/SelectionDAGAddressAnalysis.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'llvm/lib/CodeGen/SelectionDAG/SelectionDAGAddressAnalysis.cpp') diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGAddressAnalysis.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGAddressAnalysis.cpp index e57dabc..5666c12 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGAddressAnalysis.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGAddressAnalysis.cpp @@ -59,17 +59,22 @@ bool BaseIndexOffset::equalBaseIndex(const BaseIndexOffset &Other, const MachineFrameInfo &MFI = DAG.getMachineFunction().getFrameInfo(); - // Match non-equal FrameIndexes - If both frame indices are fixed - // we know their relative offsets and can compare them. Otherwise - // we must be conservative. + // Match FrameIndexes. if (auto *A = dyn_cast(Base)) - if (auto *B = dyn_cast(Other.Base)) + if (auto *B = dyn_cast(Other.Base)) { + // Equal FrameIndexes - offsets are directly comparable. + if (A->getIndex() == B->getIndex()) + return true; + // Non-equal FrameIndexes - If both frame indices are fixed + // we know their relative offsets and can compare them. Otherwise + // we must be conservative. if (MFI.isFixedObjectIndex(A->getIndex()) && MFI.isFixedObjectIndex(B->getIndex())) { Off += MFI.getObjectOffset(B->getIndex()) - MFI.getObjectOffset(A->getIndex()); return true; } + } } return false; } @@ -195,4 +200,3 @@ void BaseIndexOffset::print(raw_ostream& OS) const { } #endif - -- cgit v1.1