1
//===- llvm/Analysis/MemoryBuiltins.h- Calls to memory builtins -*- C++ -*-===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// This family of functions identifies calls to builtin functions that allocate
13
//===----------------------------------------------------------------------===//
15
#ifndef LLVM_ANALYSIS_MEMORYBUILTINS_H
16
#define LLVM_ANALYSIS_MEMORYBUILTINS_H
25
//===----------------------------------------------------------------------===//
26
// malloc Call Utility Functions.
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);
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);
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);
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
const CallInst *isArrayMalloc(const Value *I, const TargetData *TD);
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.
54
const PointerType *getMallocType(const CallInst *CI);
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.
61
const Type *getMallocAllocatedType(const CallInst *CI);
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
68
Value *getMallocArraySize(CallInst *CI, const TargetData *TD,
69
bool LookThroughSExt = false);
71
//===----------------------------------------------------------------------===//
72
// free Call Utility Functions.
75
/// isFreeCall - Returns true if the value is a call to the builtin free()
76
bool isFreeCall(const Value *I);
78
} // End llvm namespace