diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-10-10 23:15:24 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-10-10 23:15:24 +0000 |
| commit | 249265de06c3287a48f701c830e4a01f91bd9886 (patch) | |
| tree | 7e30fe00da7a4b462aa63a60bfa37ea998214b86 /llvm | |
| parent | 472330d5d20784b8d2f4286b11d5b4f9098cb126 (diff) | |
| download | bcm5719-llvm-249265de06c3287a48f701c830e4a01f91bd9886.tar.gz bcm5719-llvm-249265de06c3287a48f701c830e4a01f91bd9886.zip | |
add ability for clients of SSAUpdater to find out about the
PHI nodes inserted.
llvm-svn: 83744
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/Transforms/Utils/SSAUpdater.h | 11 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Utils/SSAUpdater.cpp | 10 |
2 files changed, 19 insertions, 2 deletions
diff --git a/llvm/include/llvm/Transforms/Utils/SSAUpdater.h b/llvm/include/llvm/Transforms/Utils/SSAUpdater.h index 8af50e35d1b..c697d048f1f 100644 --- a/llvm/include/llvm/Transforms/Utils/SSAUpdater.h +++ b/llvm/include/llvm/Transforms/Utils/SSAUpdater.h @@ -18,6 +18,9 @@ namespace llvm { class Value; class BasicBlock; class Use; + class PHINode; + template<typename T> + class SmallVectorImpl; /// SSAUpdater - This class updates SSA form for a set of values defined in /// multiple blocks. This is used when code duplication or another unstructured @@ -40,8 +43,14 @@ class SSAUpdater { /// should be empty. //std::vector<std::pair<BasicBlock*, TrackingVH<Value> > > IncomingPredInfo; void *IPI; + + /// InsertedPHIs - If this is non-null, the SSAUpdater adds all PHI nodes that + /// it creates to the vector. + SmallVectorImpl<PHINode*> *InsertedPHIs; public: - SSAUpdater(); + /// SSAUpdater constructor. If InsertedPHIs is specified, it will be filled + /// in with all PHI Nodes created by rewriting. + SSAUpdater(SmallVectorImpl<PHINode*> *InsertedPHIs = 0); ~SSAUpdater(); /// Initialize - Reset this object to get ready for a new set of SSA diff --git a/llvm/lib/Transforms/Utils/SSAUpdater.cpp b/llvm/lib/Transforms/Utils/SSAUpdater.cpp index 294d9aa61e0..2fb742bb445 100644 --- a/llvm/lib/Transforms/Utils/SSAUpdater.cpp +++ b/llvm/lib/Transforms/Utils/SSAUpdater.cpp @@ -33,7 +33,8 @@ static IncomingPredInfoTy &getIncomingPredInfo(void *IPI) { } -SSAUpdater::SSAUpdater() : AV(0), PrototypeValue(0), IPI(0) {} +SSAUpdater::SSAUpdater(SmallVectorImpl<PHINode*> *NewPHI) + : AV(0), PrototypeValue(0), IPI(0), InsertedPHIs(NewPHI) {} SSAUpdater::~SSAUpdater() { delete &getAvailableVals(AV); @@ -158,6 +159,10 @@ Value *SSAUpdater::GetValueInMiddleOfBlock(BasicBlock *BB) { InsertedPHI->eraseFromParent(); return ConstVal; } + + // If the client wants to know about all new instructions, tell it. + if (InsertedPHIs) InsertedPHIs->push_back(InsertedPHI); + DEBUG(errs() << " Inserted PHI: " << *InsertedPHI << "\n"); return InsertedPHI; } @@ -313,6 +318,9 @@ Value *SSAUpdater::GetValueAtEndOfBlockInternal(BasicBlock *BB) { InsertedVal = ConstVal; } else { DEBUG(errs() << " Inserted PHI: " << *InsertedPHI << "\n"); + + // If the client wants to know about all new instructions, tell it. + if (InsertedPHIs) InsertedPHIs->push_back(InsertedPHI); } return InsertedVal; |

