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