Fix bug where array malloc with unexpected computation of the size argument resulted...
authorVictor Hernandez <vhernandez@apple.com>
Thu, 15 Oct 2009 20:14:52 +0000 (20:14 +0000)
committerVictor Hernandez <vhernandez@apple.com>
Thu, 15 Oct 2009 20:14:52 +0000 (20:14 +0000)
commit2491ce03535cf8ec171570d2e28df63e4db3dd6b
treef989d52d9bee2406d249320485604cfc15d171b1
parent5814fefc7f27caba408d75194a40d880c64eaac6
Fix bug where array malloc with unexpected computation of the size argument resulted in MallocHelper
identifying the malloc as a non-array malloc.  This broke GlobalOpt's optimization of stores of mallocs
to global variables.

The fix is to classify malloc's into 3 categories:
1. non-array mallocs
2. array mallocs whose array size can be determined
3. mallocs that cannot be determined to be of type 1 or 2 and cannot be optimized

getMallocArraySize() returns NULL for category 3, and all users of this function must avoid their
malloc optimization if this function returns NULL.

Eventually, currently unexpected codegen for computing the malloc's size argument will be supported in
isArrayMalloc() and getMallocArraySize(), extending malloc optimizations to those examples.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84199 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Analysis/MallocHelper.h
lib/Analysis/MallocHelper.cpp
lib/Analysis/PointerTracking.cpp
lib/Transforms/IPO/GlobalOpt.cpp