MemoryBuiltins.h revision 24f934d0551e33508c4ffd24318ea0e970db9810
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 LLVMContext; 21class PointerType; 22class TargetData; 23class Type; 24class Value; 25 26//===----------------------------------------------------------------------===// 27// malloc Call Utility Functions. 28// 29 30/// isMalloc - Returns true if the value is either a malloc call or a bitcast of 31/// the result of a malloc call 32bool isMalloc(const Value* I); 33 34/// extractMallocCall - Returns the corresponding CallInst if the instruction 35/// is a malloc call. Since CallInst::CreateMalloc() only creates calls, we 36/// ignore InvokeInst here. 37const CallInst* extractMallocCall(const Value* I); 38CallInst* extractMallocCall(Value* I); 39 40/// extractMallocCallFromBitCast - Returns the corresponding CallInst if the 41/// instruction is a bitcast of the result of a malloc call. 42const CallInst* extractMallocCallFromBitCast(const Value* I); 43CallInst* extractMallocCallFromBitCast(Value* I); 44 45/// isArrayMalloc - Returns the corresponding CallInst if the instruction 46/// is a call to malloc whose array size can be determined and the array size 47/// is not constant 1. Otherwise, return NULL. 48CallInst* isArrayMalloc(Value* I, LLVMContext &Context, const TargetData* TD); 49const CallInst* isArrayMalloc(const Value* I, LLVMContext &Context, 50 const TargetData* TD); 51 52/// getMallocType - Returns the PointerType resulting from the malloc call. 53/// The PointerType depends on the number of bitcast uses of the malloc call: 54/// 0: PointerType is the malloc calls' return type. 55/// 1: PointerType is the bitcast's result type. 56/// >1: Unique PointerType cannot be determined, return NULL. 57const PointerType* getMallocType(const CallInst* CI); 58 59/// getMallocAllocatedType - Returns the Type allocated by malloc call. 60/// The Type depends on the number of bitcast uses of the malloc call: 61/// 0: PointerType is the malloc calls' return type. 62/// 1: PointerType is the bitcast's result type. 63/// >1: Unique PointerType cannot be determined, return NULL. 64const Type* getMallocAllocatedType(const CallInst* CI); 65 66/// getMallocArraySize - Returns the array size of a malloc call. If the 67/// argument passed to malloc is a multiple of the size of the malloced type, 68/// then return that multiple. For non-array mallocs, the multiple is 69/// constant 1. Otherwise, return NULL for mallocs whose array size cannot be 70/// determined. 71Value* getMallocArraySize(CallInst* CI, LLVMContext &Context, 72 const TargetData* TD); 73 74//===----------------------------------------------------------------------===// 75// free Call Utility Functions. 76// 77 78/// isFreeCall - Returns true if the the value is a call to the builtin free() 79bool isFreeCall(const Value* I); 80 81} // End llvm namespace 82 83#endif 84