diff options
author | Chris Lattner <sabre@nondot.org> | 2007-04-17 04:04:14 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-04-17 04:04:14 +0000 |
commit | f8dfef74376dd85f37601855f7519d8256700dab (patch) | |
tree | 426e7bcdcbcd9beb1c684ced7f62ba3c3b1cbf2b /include/llvm/BasicBlock.h | |
parent | 17fcdd5e1b78b829068ca657c97357a39d6e768b (diff) |
The (negative) offset from a SymbolTableListTraits-using ilist to its container
object is always constant. As such, evaluate it at compile time instead of storing
it as an ivar in SymbolTableListTraits. This shrinks every SymbolTableListTraits
ilist by a word, shrinking BasicBlock from 44->40 bytes, Function from 96->88 bytes,
and Module from 60->52 bytes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36189 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/BasicBlock.h')
-rw-r--r-- | include/llvm/BasicBlock.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/include/llvm/BasicBlock.h b/include/llvm/BasicBlock.h index 8cc450c127..0a22f44b98 100644 --- a/include/llvm/BasicBlock.h +++ b/include/llvm/BasicBlock.h @@ -31,6 +31,7 @@ template<> struct ilist_traits<Instruction> static void destroySentinel(Instruction *I) { delete I; } static iplist<Instruction> &getList(BasicBlock *BB); static ValueSymbolTable *getSymTab(BasicBlock *ItemParent); + static int getListOffset(); }; /// This represents a single basic block in LLVM. A basic block is simply a @@ -194,8 +195,19 @@ public: /// the basic block). /// BasicBlock *splitBasicBlock(iterator I, const std::string &BBName = ""); + + + static unsigned getInstListOffset() { + BasicBlock *Obj = 0; + return reinterpret_cast<unsigned>(&Obj->InstList); + } }; +inline int +ilist_traits<Instruction>::getListOffset() { + return BasicBlock::getInstListOffset(); +} + } // End llvm namespace #endif |