[llvm-commits] Avoid O(#registers*#basicblocks) memory use in LiveVariables
evan.cheng at apple.com
Fri May 22 17:10:07 PDT 2009
On May 22, 2009, at 4:37 PM, Jeffrey Yasskin wrote:
> I just wanted to double-check that you're not worried about the extra
> memory use for small functions, and the potential for quadratic time
> with a higher constant, before I commit this.
I can see the potential for both of those issues. Perhaps you can
specialize SparseBitVector with a smaller element size to reduce
memory usage? As for compile time cost, can you measure it by return
through the llvm test suite?
> On Fri, May 22, 2009 at 4:03 PM, Evan Cheng <evan.cheng at apple.com>
>> Excellent. Thanks!
>> On May 22, 2009, at 3:41 PM, Jeffrey Yasskin wrote:
>>> LiveVariables::VarInfo contains two BitVectors, AliveBlocks and
>>> UsedBlocks, which have as many entries as there are basic blocks in
>>> the function. I believe LiveVariables::getVarInfo creates a VarInfo
>>> struct for every register in the function, leading to quadratic
>>> use. On a particular function with approximately 30k basic blocks
>>> 280k instructions, which I've uploaded to
>>> http://jeffrey.yasskin.info/dump/big_module.bc.bz2, this took
>>> approximately 1.6GB of memory to codegen. The attached patch changes
>>> these two variables to SparseBitVectors, which makes the memory
>>> use go
>>> down to ~420MB (on Mac; llc on linux goes from 1.6GB->~900MB).
>>> It's possible that this patch merely trades quadratic space on rare
>>> large functions for larger space and quadratic time on more common
>>> small functions, but I don't know enough about how LiveVariables
>>> to know.
>>> This passes LLVM's `make check`, except for the Frontend tests that
>>> never pass for me.
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
More information about the llvm-commits