SDAG: Avoid a large, usually empty SmallVector in a recursive function
authorJustin Bogner <mail@justinbogner.com>
Fri, 2 Dec 2016 00:11:01 +0000 (00:11 +0000)
committerJustin Bogner <mail@justinbogner.com>
Fri, 2 Dec 2016 00:11:01 +0000 (00:11 +0000)
commit35c5e58f8ce802e49dbadf52942779ec9078f0f2
treefa5a6e721046da72b96a009b3bbb44f8f36dc593
parent8986361fa15a4560d8a241bae726bb237b5c27e5
SDAG: Avoid a large, usually empty SmallVector in a recursive function

This SmallVector is using up 128 bytes on the stack every time despite
almost always being empty[1], and since this function can recurse quite
deeply that adds up to a lot of overhead. We've seen this run afoul of
ulimits in some cases with ASAN on.

Replacing the SmallVector with a std::vector trades an occasional heap
allocation for vastly less stack usage.

[1]: I gathered some stats on an internal test suite and the vector
was non-empty in only 45,000 of 10,000,000 calls to this function.

llvm-svn: 288441
llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp