diff options
author | Gabor Greif <ggreif@gmail.com> | 2009-03-01 17:13:15 +0000 |
---|---|---|
committer | Gabor Greif <ggreif@gmail.com> | 2009-03-01 17:13:15 +0000 |
commit | 5e7d4d643d691f6169eaaf60b13dc54ba2b69232 (patch) | |
tree | 4d17d738199b8f07900280d2b4c740e06c4454e5 | |
parent | abd6f28a74e74303725ec123bdfe9202617115c8 (diff) | |
download | external_llvm-5e7d4d643d691f6169eaaf60b13dc54ba2b69232.zip external_llvm-5e7d4d643d691f6169eaaf60b13dc54ba2b69232.tar.gz external_llvm-5e7d4d643d691f6169eaaf60b13dc54ba2b69232.tar.bz2 |
Another sentinel optimization. This one should always
be a win, since almost every interesting function has at least one Argument.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65778 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Function.h | 9 | ||||
-rw-r--r-- | lib/VMCore/Function.cpp | 7 |
2 files changed, 6 insertions, 10 deletions
diff --git a/include/llvm/Function.h b/include/llvm/Function.h index bdae9cd..9f4f23b 100644 --- a/include/llvm/Function.h +++ b/include/llvm/Function.h @@ -48,12 +48,15 @@ private: template<> struct ilist_traits<Argument> : public SymbolTableListTraits<Argument, Function> { - // createSentinel is used to create a node that marks the end of the list... - static Argument *createSentinel(); - static void destroySentinel(Argument *A) { delete A; } + Argument *createSentinel() const { + return const_cast<Argument*>(static_cast<const Argument*>(&Sentinel)); + } + static void destroySentinel(Argument*) {} static iplist<Argument> &getList(Function *F); static ValueSymbolTable *getSymTab(Function *ItemParent); static int getListOffset(); +private: + ilist_node<Argument> Sentinel; }; class Function : public GlobalValue, public Annotable, diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index fefe082..258158f 100644 --- a/lib/VMCore/Function.cpp +++ b/lib/VMCore/Function.cpp @@ -26,13 +26,6 @@ iplist<BasicBlock> &ilist_traits<BasicBlock>::getList(Function *F) { return F->getBasicBlockList(); } -Argument *ilist_traits<Argument>::createSentinel() { - Argument *Ret = new Argument(Type::Int32Ty); - // This should not be garbage monitored. - LeakDetector::removeGarbageObject(Ret); - return Ret; -} - iplist<Argument> &ilist_traits<Argument>::getList(Function *F) { return F->getArgumentList(); } |