00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef LLVM_ANALYSIS_LIVEVALUES_H
00016 #define LLVM_ANALYSIS_LIVEVALUES_H
00017
00018 #include "llvm/Pass.h"
00019 #include "llvm/ADT/DenseMap.h"
00020 #include "llvm/ADT/SmallPtrSet.h"
00021
00022 namespace llvm {
00023
00024 class DominatorTree;
00025 class LoopInfo;
00026 class Value;
00027
00031 class LiveValues : public FunctionPass {
00032 DominatorTree *DT;
00033 LoopInfo *LI;
00034
00037 struct Memo {
00040 SmallPtrSet<const BasicBlock *, 4> Used;
00041
00047 SmallPtrSet<const BasicBlock *, 4> LiveThrough;
00048
00052 SmallPtrSet<const BasicBlock *, 4> Killed;
00053 };
00054
00058 DenseMap<const Value *, Memo> Memos;
00059
00063 Memo &getMemo(const Value *V);
00064
00067 Memo &compute(const Value *V);
00068
00069 public:
00070 static char ID;
00071 LiveValues();
00072
00073 virtual void getAnalysisUsage(AnalysisUsage &AU) const;
00074 virtual bool runOnFunction(Function &F);
00075 virtual void releaseMemory();
00076
00079 bool isUsedInBlock(const Value *V, const BasicBlock *BB);
00080
00087 bool isLiveThroughBlock(const Value *V, const BasicBlock *BB);
00088
00094 bool isKilledInBlock(const Value *V, const BasicBlock *BB);
00095 };
00096
00097 }
00098
00099 #endif