mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Extend getMallocArraySize() to determine the array size if the malloc argument is:
ArraySize * ElementSize ElementSize * ArraySize ArraySize << log2(ElementSize) ElementSize << log2(ArraySize) Refactor isArrayMallocHelper and delete isSafeToGetMallocArraySize, so that there is only 1 copy of the malloc array determining logic. Update users of getMallocArraySize() to not bother calling isArrayMalloc() as well. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85421 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -43,15 +43,8 @@ const CallInst* extractMallocCallFromBitCast(const Value* I);
|
||||
CallInst* extractMallocCallFromBitCast(Value* I);
|
||||
|
||||
/// isArrayMalloc - Returns the corresponding CallInst if the instruction
|
||||
/// matches the malloc call IR generated by CallInst::CreateMalloc(). This
|
||||
/// means that it is a malloc call with one bitcast use AND the malloc call's
|
||||
/// size argument is:
|
||||
/// 1. a constant not equal to the size of the malloced type
|
||||
/// or
|
||||
/// 2. the result of a multiplication by the size of the malloced type
|
||||
/// Otherwise it returns NULL.
|
||||
/// The unique bitcast is needed to determine the type/size of the array
|
||||
/// allocation.
|
||||
/// is a call to malloc whose array size can be determined and the array size
|
||||
/// is not constant 1. Otherwise, return NULL.
|
||||
CallInst* isArrayMalloc(Value* I, LLVMContext &Context, const TargetData* TD);
|
||||
const CallInst* isArrayMalloc(const Value* I, LLVMContext &Context,
|
||||
const TargetData* TD);
|
||||
@@ -66,16 +59,10 @@ const PointerType* getMallocType(const CallInst* CI);
|
||||
/// unique bitcast use, then return NULL.
|
||||
const Type* getMallocAllocatedType(const CallInst* CI);
|
||||
|
||||
/// getMallocArraySize - Returns the array size of a malloc call. For array
|
||||
/// mallocs, the size is computated in 1 of 3 ways:
|
||||
/// 1. If the element type is of size 1, then array size is the argument to
|
||||
/// malloc.
|
||||
/// 2. Else if the malloc's argument is a constant, the array size is that
|
||||
/// argument divided by the element type's size.
|
||||
/// 3. Else the malloc argument must be a multiplication and the array size is
|
||||
/// the first operand of the multiplication.
|
||||
/// For non-array mallocs, the computed size is constant 1.
|
||||
/// This function returns NULL for all mallocs whose array size cannot be
|
||||
/// getMallocArraySize - Returns the array size of a malloc call. If the
|
||||
/// argument passed to malloc is a multiple of the size of the malloced type,
|
||||
/// then return that multiple. For non-array mallocs, the multiple is
|
||||
/// constant 1. Otherwise, return NULL for mallocs whose array size cannot be
|
||||
/// determined.
|
||||
Value* getMallocArraySize(CallInst* CI, LLVMContext &Context,
|
||||
const TargetData* TD);
|
||||
|
Reference in New Issue
Block a user