1//===- llvm/Analysis/MemoryBuiltins.h- Calls to memory builtins -*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This family of functions identifies calls to builtin functions that allocate 11// or free memory. 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef LLVM_ANALYSIS_MEMORYBUILTINS_H 16#define LLVM_ANALYSIS_MEMORYBUILTINS_H 17 18namespace llvm { 19class CallInst; 20class PointerType; 21class TargetData; 22class Type; 23class Value; 24 25//===----------------------------------------------------------------------===// 26// malloc Call Utility Functions. 27// 28 29/// isMalloc - Returns true if the value is either a malloc call or a bitcast of 30/// the result of a malloc call 31bool isMalloc(const Value *I); 32 33/// extractMallocCall - Returns the corresponding CallInst if the instruction 34/// is a malloc call. Since CallInst::CreateMalloc() only creates calls, we 35/// ignore InvokeInst here. 36const CallInst *extractMallocCall(const Value *I); 37CallInst *extractMallocCall(Value *I); 38 39/// extractMallocCallFromBitCast - Returns the corresponding CallInst if the 40/// instruction is a bitcast of the result of a malloc call. 41const CallInst *extractMallocCallFromBitCast(const Value *I); 42CallInst *extractMallocCallFromBitCast(Value *I); 43 44/// isArrayMalloc - Returns the corresponding CallInst if the instruction 45/// is a call to malloc whose array size can be determined and the array size 46/// is not constant 1. Otherwise, return NULL. 47const CallInst *isArrayMalloc(const Value *I, const TargetData *TD); 48 49/// getMallocType - Returns the PointerType resulting from the malloc call. 50/// The PointerType depends on the number of bitcast uses of the malloc call: 51/// 0: PointerType is the malloc calls' return type. 52/// 1: PointerType is the bitcast's result type. 53/// >1: Unique PointerType cannot be determined, return NULL. 54PointerType *getMallocType(const CallInst *CI); 55 56/// getMallocAllocatedType - Returns the Type allocated by malloc call. 57/// The Type depends on the number of bitcast uses of the malloc call: 58/// 0: PointerType is the malloc calls' return type. 59/// 1: PointerType is the bitcast's result type. 60/// >1: Unique PointerType cannot be determined, return NULL. 61Type *getMallocAllocatedType(const CallInst *CI); 62 63/// getMallocArraySize - Returns the array size of a malloc call. If the 64/// argument passed to malloc is a multiple of the size of the malloced type, 65/// then return that multiple. For non-array mallocs, the multiple is 66/// constant 1. Otherwise, return NULL for mallocs whose array size cannot be 67/// determined. 68Value *getMallocArraySize(CallInst *CI, const TargetData *TD, 69 bool LookThroughSExt = false); 70 71//===----------------------------------------------------------------------===// 72// free Call Utility Functions. 73// 74 75/// isFreeCall - Returns non-null if the value is a call to the builtin free() 76const CallInst *isFreeCall(const Value *I); 77 78static inline CallInst *isFreeCall(Value *I) { 79 return const_cast<CallInst*>(isFreeCall((const Value*)I)); 80} 81 82} // End llvm namespace 83 84#endif 85