aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2006-02-09 22:11:03 +0000
committerEvan Cheng <evan.cheng@apple.com>2006-02-09 22:11:03 +0000
commitfae9f1cb34d6d2c4dbd007f2d748a70b67776a82 (patch)
treea28d7238f88f2431f6502ba00c3652031eb25d3a
parente487abbfbf9fdef21e5216379b2e74436ef99c7b (diff)
Added SelectionDAG::InsertISelMapEntry(). This is used to workaround the gcc
problem where it inline the map insertion call too aggressively. Before this change it was producing a frame size of 24k for Select_store(), now it's down to 10k (by calling this method rather than calling the map insertion operator). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26094 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/CodeGen/SelectionDAG.h10
-rw-r--r--lib/CodeGen/SelectionDAG/SelectionDAG.cpp9
2 files changed, 17 insertions, 2 deletions
diff --git a/include/llvm/CodeGen/SelectionDAG.h b/include/llvm/CodeGen/SelectionDAG.h
index 58f0d64792..df695010bf 100644
--- a/include/llvm/CodeGen/SelectionDAG.h
+++ b/include/llvm/CodeGen/SelectionDAG.h
@@ -395,14 +395,20 @@ public:
std::vector<SDNode*> *Deleted = 0);
void ReplaceAllUsesWith(SDNode *From, const std::vector<SDOperand> &To,
std::vector<SDNode*> *Deleted = 0);
-
-
+
/// DeleteNode - Remove the specified node from the system. This node must
/// have no referrers.
void DeleteNode(SDNode *N);
void dump() const;
+ /// InsertISelMapEntry - A helper function to insert a key / element pair
+ /// into a SDOperand to SDOperand map. This is added to avoid the map
+ /// insertion operator from being inlined.
+ static void InsertISelMapEntry(std::map<SDOperand, SDOperand> &Map,
+ SDNode *Key, unsigned KeyResNo,
+ SDNode *Element, unsigned ElementResNo);
+
private:
void RemoveNodeFromCSEMaps(SDNode *N);
SDNode *AddNonLeafNodeToCSEMaps(SDNode *N);
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 9c9df11bed..23d1dc34cc 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -2748,3 +2748,12 @@ void SelectionDAG::dump() const {
std::cerr << "\n\n";
}
+/// InsertISelMapEntry - A helper function to insert a key / element pair
+/// into a SDOperand to SDOperand map. This is added to avoid the map
+/// insertion operator from being inlined.
+void SelectionDAG::InsertISelMapEntry(std::map<SDOperand, SDOperand> &Map,
+ SDNode *Key, unsigned KeyResNo,
+ SDNode *Element, unsigned ElementResNo) {
+ Map.insert(std::make_pair(SDOperand(Key, KeyResNo),
+ SDOperand(Element, ElementResNo)));
+}