MemoryBuiltins.h revision 252ef566e8734b6bcf46434d0a7954c9eda0bd96
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//===----------------------------------------------------------------------===//
73//  calloc Call Utility Functions.
74//
75
76/// extractCallocCall - Returns the corresponding CallInst if the instruction
77/// is a calloc call.
78const CallInst *extractCallocCall(const Value *I);
79CallInst *extractCallocCall(Value *I);
80
81
82//===----------------------------------------------------------------------===//
83//  free Call Utility Functions.
84//
85
86/// isFreeCall - Returns non-null if the value is a call to the builtin free()
87const CallInst *isFreeCall(const Value *I);
88
89static inline CallInst *isFreeCall(Value *I) {
90  return const_cast<CallInst*>(isFreeCall((const Value*)I));
91}
92
93} // End llvm namespace
94
95#endif
96