diff options
author | Evan Cheng <evan.cheng@apple.com> | 2006-02-09 22:11:03 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2006-02-09 22:11:03 +0000 |
commit | a1ef3ec5b57ae39f287421619e51f1cade29c80f (patch) | |
tree | 2e98ecce8ccaf9e730fdaf46e3eaa19e1f8c7823 | |
parent | 89762198503e443bca713538d1729443ca59d1ed (diff) | |
download | bcm5719-llvm-a1ef3ec5b57ae39f287421619e51f1cade29c80f.tar.gz bcm5719-llvm-a1ef3ec5b57ae39f287421619e51f1cade29c80f.zip |
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).
llvm-svn: 26094
-rw-r--r-- | llvm/include/llvm/CodeGen/SelectionDAG.h | 10 | ||||
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 9 |
2 files changed, 17 insertions, 2 deletions
diff --git a/llvm/include/llvm/CodeGen/SelectionDAG.h b/llvm/include/llvm/CodeGen/SelectionDAG.h index 58f0d64792d..df695010bf1 100644 --- a/llvm/include/llvm/CodeGen/SelectionDAG.h +++ b/llvm/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/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 9c9df11bed2..23d1dc34cc1 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/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))); +} |