Re-commit r86077 now that r86290 fixes the 179.art and 175.vpr ARM regressions.
[oota-llvm.git] / include / llvm / Analysis / MemoryBuiltins.h
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
18 namespace llvm {
19 class CallInst;
20 class PointerType;
21 class TargetData;
22 class Type;
23 class 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
31 bool 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.
36 const CallInst *extractMallocCall(const Value *I);
37 CallInst *extractMallocCall(Value *I);
38
39 /// extractMallocCallFromBitCast - Returns the corresponding CallInst if the
40 /// instruction is a bitcast of the result of a malloc call.
41 const CallInst *extractMallocCallFromBitCast(const Value *I);
42 CallInst *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.
47 CallInst *isArrayMalloc(Value *I, const TargetData *TD);
48 const CallInst *isArrayMalloc(const Value *I,
49                               const TargetData *TD);
50
51 /// getMallocType - Returns the PointerType resulting from the malloc call.
52 /// The PointerType depends on the number of bitcast uses of the malloc call:
53 ///   0: PointerType is the malloc calls' return type.
54 ///   1: PointerType is the bitcast's result type.
55 ///  >1: Unique PointerType cannot be determined, return NULL.
56 const PointerType *getMallocType(const CallInst *CI);
57
58 /// getMallocAllocatedType - Returns the Type allocated by malloc call.
59 /// The Type depends on the number of bitcast uses of the malloc call:
60 ///   0: PointerType is the malloc calls' return type.
61 ///   1: PointerType is the bitcast's result type.
62 ///  >1: Unique PointerType cannot be determined, return NULL.
63 const Type *getMallocAllocatedType(const CallInst *CI);
64
65 /// getMallocArraySize - Returns the array size of a malloc call.  If the 
66 /// argument passed to malloc is a multiple of the size of the malloced type,
67 /// then return that multiple.  For non-array mallocs, the multiple is
68 /// constant 1.  Otherwise, return NULL for mallocs whose array size cannot be
69 /// determined.
70 Value *getMallocArraySize(CallInst *CI, const TargetData *TD);
71                           
72 //===----------------------------------------------------------------------===//
73 //  free Call Utility Functions.
74 //
75
76 /// isFreeCall - Returns true if the the value is a call to the builtin free()
77 bool isFreeCall(const Value *I);
78
79 } // End llvm namespace
80
81 #endif