[llvm] 5b38ecf - [DAG] BaseIndexOffset::equalBaseIndex - early out on failed matches. NFCI.
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 4 02:51:25 PST 2024
Author: Simon Pilgrim
Date: 2024-01-04T10:50:43Z
New Revision: 5b38ecff6e9d7ef84ba8fd9b1b1e4c9b229dbdb5
URL: https://github.com/llvm/llvm-project/commit/5b38ecff6e9d7ef84ba8fd9b1b1e4c9b229dbdb5
DIFF: https://github.com/llvm/llvm-project/commit/5b38ecff6e9d7ef84ba8fd9b1b1e4c9b229dbdb5.diff
LOG: [DAG] BaseIndexOffset::equalBaseIndex - early out on failed matches. NFCI.
If we successfully cast only the first base node as GlobalAddressSDNode / ConstantPoolSDNode / FrameIndexSDNode then we can early out as we know that base won't cast as a later type.
Noticed while investigating profiles for potential compile time improvements.
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/SelectionDAGAddressAnalysis.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGAddressAnalysis.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGAddressAnalysis.cpp
index 558706d3d3c562..66825d845c1910 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGAddressAnalysis.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGAddressAnalysis.cpp
@@ -38,15 +38,18 @@ bool BaseIndexOffset::equalBaseIndex(const BaseIndexOffset &Other,
return true;
// Match GlobalAddresses
- if (auto *A = dyn_cast<GlobalAddressSDNode>(Base))
+ if (auto *A = dyn_cast<GlobalAddressSDNode>(Base)) {
if (auto *B = dyn_cast<GlobalAddressSDNode>(Other.Base))
if (A->getGlobal() == B->getGlobal()) {
Off += B->getOffset() - A->getOffset();
return true;
}
+ return false;
+ }
+
// Match Constants
- if (auto *A = dyn_cast<ConstantPoolSDNode>(Base))
+ if (auto *A = dyn_cast<ConstantPoolSDNode>(Base)) {
if (auto *B = dyn_cast<ConstantPoolSDNode>(Other.Base)) {
bool IsMatch =
A->isMachineConstantPoolEntry() == B->isMachineConstantPoolEntry();
@@ -62,7 +65,8 @@ bool BaseIndexOffset::equalBaseIndex(const BaseIndexOffset &Other,
}
}
- const MachineFrameInfo &MFI = DAG.getMachineFunction().getFrameInfo();
+ return false;
+ }
// Match FrameIndexes.
if (auto *A = dyn_cast<FrameIndexSDNode>(Base))
@@ -73,6 +77,7 @@ bool BaseIndexOffset::equalBaseIndex(const BaseIndexOffset &Other,
// Non-equal FrameIndexes - If both frame indices are fixed
// we know their relative offsets and can compare them. Otherwise
// we must be conservative.
+ const MachineFrameInfo &MFI = DAG.getMachineFunction().getFrameInfo();
if (MFI.isFixedObjectIndex(A->getIndex()) &&
MFI.isFixedObjectIndex(B->getIndex())) {
Off += MFI.getObjectOffset(B->getIndex()) -
@@ -81,6 +86,7 @@ bool BaseIndexOffset::equalBaseIndex(const BaseIndexOffset &Other,
}
}
}
+
return false;
}
More information about the llvm-commits
mailing list