mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-25 20:59:51 +00:00
add ability for clients of SSAUpdater to find out about the
PHI nodes inserted. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83744 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
aa6aeb91b4
commit
f5a1fb6b24
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user