LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DependencyAnalysis.h
Go to the documentation of this file.
1 //===- DependencyAnalysis.h - ObjC ARC Optimization ---*- 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 /// \file
10 ///
11 /// This file declares special dependency analysis routines used in Objective C
12 /// ARC Optimizations.
13 ///
14 /// WARNING: This file knows about certain library functions. It recognizes them
15 /// by name, and hardwires knowledge of their semantics.
16 ///
17 /// WARNING: This file knows about how certain Objective-C library functions are
18 /// used. Naive LLVM IR transformations which would otherwise be
19 /// behavior-preserving may break these assumptions.
20 ///
21 //===----------------------------------------------------------------------===//
22 
23 #ifndef LLVM_TRANSFORMS_OBJCARC_DEPEDENCYANALYSIS_H
24 #define LLVM_TRANSFORMS_OBJCARC_DEPEDENCYANALYSIS_H
25 
26 #include "llvm/ADT/SmallPtrSet.h"
27 
28 namespace llvm {
29  class BasicBlock;
30  class Instruction;
31  class Value;
32 }
33 
34 namespace llvm {
35 namespace objcarc {
36 
37 class ProvenanceAnalysis;
38 
39 /// \enum DependenceKind
40 /// \brief Defines different dependence kinds among various ARC constructs.
41 ///
42 /// There are several kinds of dependence-like concepts in use here.
43 ///
48  RetainAutoreleaseDep, ///< Blocks objc_retainAutorelease.
49  RetainAutoreleaseRVDep, ///< Blocks objc_retainAutoreleaseReturnValue.
50  RetainRVDep ///< Blocks objc_retainAutoreleasedReturnValue.
51 };
52 
54  const Value *Arg,
55  BasicBlock *StartBB, Instruction *StartInst,
56  SmallPtrSet<Instruction *, 4> &DependingInstructions,
58  ProvenanceAnalysis &PA);
59 
60 bool
61 Depends(DependenceKind Flavor, Instruction *Inst, const Value *Arg,
62  ProvenanceAnalysis &PA);
63 
64 /// Test whether the given instruction can "use" the given pointer's object in a
65 /// way that requires the reference count to be positive.
66 bool
67 CanUse(const Instruction *Inst, const Value *Ptr, ProvenanceAnalysis &PA,
69 
70 /// Test whether the given instruction can result in a reference count
71 /// modification (positive or negative) for the pointer's object.
72 bool
73 CanAlterRefCount(const Instruction *Inst, const Value *Ptr,
74  ProvenanceAnalysis &PA, InstructionClass Class);
75 
76 } // namespace objcarc
77 } // namespace llvm
78 
79 #endif // LLVM_TRANSFORMS_OBJCARC_DEPEDENCYANALYSIS_H
Various leaf nodes.
Definition: ISDOpcodes.h:60
Blocks objc_retainAutorelease.
bool Depends(DependenceKind Flavor, Instruction *Inst, const Value *Arg, ProvenanceAnalysis &PA)
void FindDependencies(DependenceKind Flavor, const Value *Arg, BasicBlock *StartBB, Instruction *StartInst, SmallPtrSet< Instruction *, 4 > &DependingInstructions, SmallPtrSet< const BasicBlock *, 4 > &Visited, ProvenanceAnalysis &PA)
LLVM Basic Block Representation.
Definition: BasicBlock.h:72
bool CanAlterRefCount(const Instruction *Inst, const Value *Ptr, ProvenanceAnalysis &PA, InstructionClass Class)
InstructionClass
A simple classification for instructions.
DependenceKind
Defines different dependence kinds among various ARC constructs.
bool CanUse(const Instruction *Inst, const Value *Ptr, ProvenanceAnalysis &PA, InstructionClass Class)
Blocks objc_retainAutoreleaseReturnValue.
LLVM Value Representation.
Definition: Value.h:66
Blocks objc_retainAutoreleasedReturnValue.