mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-17 23:44:43 +00:00
Simplify the logic of getting hold of a PHI predecessor block.
There is now a direct way from value-use-iterator to incoming block in PHINode's API. This way we avoid the iterator->index->iterator trip, and especially the costly getOperandNo() invocation. Additionally there is now an assertion that the iterator really refers to one of the PHI's Uses. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62869 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
60789e419e
commit
a36791da41
@ -482,8 +482,7 @@ public:
|
||||
++UI) {
|
||||
BlockT *UserBB = cast<Instruction>(*UI)->getParent();
|
||||
if (PHINode *P = dyn_cast<PHINode>(*UI)) {
|
||||
unsigned OperandNo = UI.getOperandNo();
|
||||
UserBB = P->getIncomingBlock(OperandNo/2);
|
||||
UserBB = P->getIncomingBlock(UI);
|
||||
}
|
||||
|
||||
// Check the current block, as a fast-path. Most values are used in
|
||||
|
@ -1943,6 +1943,14 @@ public:
|
||||
return i*2;
|
||||
}
|
||||
|
||||
/// getIncomingBlock - Return incoming basic block corresponding
|
||||
/// to value use iterator
|
||||
///
|
||||
template <typename U>
|
||||
BasicBlock *getIncomingBlock(value_use_iterator<U> I) const {
|
||||
assert(this == *I && "Iterator doesn't point to PHI's Uses?");
|
||||
return static_cast<BasicBlock*>((&I.getUse() + 1)->get());
|
||||
}
|
||||
/// getIncomingBlock - Return incoming basic block number x
|
||||
///
|
||||
BasicBlock *getIncomingBlock(unsigned i) const {
|
||||
|
@ -988,8 +988,7 @@ static void ReplaceUsesOfMallocWithGlobal(Instruction *Alloc,
|
||||
} else if (PHINode *PN = dyn_cast<PHINode>(U)) {
|
||||
// Insert the load in the corresponding predecessor, not right before the
|
||||
// PHI.
|
||||
unsigned PredNo = Alloc->use_begin().getOperandNo()/2;
|
||||
InsertPt = PN->getIncomingBlock(PredNo)->getTerminator();
|
||||
InsertPt = PN->getIncomingBlock(Alloc->use_begin())->getTerminator();
|
||||
} else if (isa<BitCastInst>(U)) {
|
||||
// Must be bitcast between the malloc and store to initialize the global.
|
||||
ReplaceUsesOfMallocWithGlobal(U, GV);
|
||||
|
@ -459,8 +459,7 @@ static bool OptimizeNoopCopyExpression(CastInst *CI, const TargetLowering &TLI){
|
||||
// appropriate predecessor block.
|
||||
BasicBlock *UserBB = User->getParent();
|
||||
if (PHINode *PN = dyn_cast<PHINode>(User)) {
|
||||
unsigned OpVal = UI.getOperandNo()/2;
|
||||
UserBB = PN->getIncomingBlock(OpVal);
|
||||
UserBB = PN->getIncomingBlock(UI);
|
||||
}
|
||||
|
||||
// Preincrement use iterator so we don't invalidate it.
|
||||
|
@ -175,8 +175,7 @@ void LCSSA::ProcessInstruction(Instruction *Instr,
|
||||
UI != E;) {
|
||||
BasicBlock *UserBB = cast<Instruction>(*UI)->getParent();
|
||||
if (PHINode *P = dyn_cast<PHINode>(*UI)) {
|
||||
unsigned OperandNo = UI.getOperandNo();
|
||||
UserBB = P->getIncomingBlock(OperandNo/2);
|
||||
UserBB = P->getIncomingBlock(UI);
|
||||
}
|
||||
|
||||
// If the user is in the loop, don't rewrite it!
|
||||
@ -212,8 +211,7 @@ void LCSSA::getLoopValuesUsedOutsideLoop(Loop *L,
|
||||
++UI) {
|
||||
BasicBlock *UserBB = cast<Instruction>(*UI)->getParent();
|
||||
if (PHINode* p = dyn_cast<PHINode>(*UI)) {
|
||||
unsigned OperandNo = UI.getOperandNo();
|
||||
UserBB = p->getIncomingBlock(OperandNo/2);
|
||||
UserBB = p->getIncomingBlock(UI);
|
||||
}
|
||||
|
||||
if (*BB != UserBB && !inLoop(UserBB)) {
|
||||
|
@ -278,8 +278,7 @@ bool Instruction::isUsedOutsideOfBlock(const BasicBlock *BB) const {
|
||||
continue;
|
||||
}
|
||||
|
||||
unsigned UseOperand = UI.getOperandNo();
|
||||
if (PN->getIncomingBlock(UseOperand/2) != BB)
|
||||
if (PN->getIncomingBlock(UI) != BB)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user